blob: 645866d89114dced2d109668fa12cbf221300720 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#if 0
static const char sccsid[] = "@(#)buildlwo.c 4.02 97/04/20 xlockmore";
#endif
/*-
* buildlwo.c: Lightwave Object Display List Builder for OpenGL
*
* This module can be called by any GL mode wishing to use
* objects created in NewTek's Lightwave 3D. The objects must
* first be converted to C source with my converter "lw2ogl".
* If other people are interested in this, I will put up a
* web page for it at http://www.netaxs.com/~emackey/lw2ogl/
*
* by Ed Mackey, 4/19/97
*
*/
#ifndef STANDALONE
# include "xlock.h"
#else
# include "screenhackI.h"
#endif
#ifdef USE_GL
#include "buildlwo.h"
GLuint
BuildLWO(int wireframe, const struct lwo *object)
{
GLuint dl_num;
const GLfloat *pnts, *normals, *grab;
const unsigned short int *pols;
GLfloat three[3];
int p, num_pnts = 0;
dl_num = glGenLists(1);
if (!dl_num)
return (0);
pnts = object->pnts;
normals = object->normals;
pols = object->pols;
glNewList(dl_num, GL_COMPILE);
if (!pols) {
num_pnts = object->num_pnts;
glBegin(GL_POINTS);
for (p = 0; p < num_pnts; ++p) {
three[0] = *(pnts++);
three[1] = *(pnts++);
three[2] = *(pnts++);
glVertex3fv(three);
}
glEnd();
} else
for (;;) {
if (num_pnts <= 0) {
num_pnts = *pols + 2;
if (num_pnts < 3)
break;
if (num_pnts == 3) {
glBegin(GL_POINTS);
} else if (num_pnts == 4) {
glBegin(GL_LINES);
} else {
three[0] = *(normals++);
three[1] = *(normals++);
three[2] = *(normals++);
glNormal3fv(three);
if (wireframe)
glBegin(GL_LINE_LOOP);
else
glBegin(GL_POLYGON);
}
} else if (num_pnts == 1) {
glEnd();
} else {
grab = pnts + ((int) (*pols) * 3);
three[0] = *(grab++);
three[1] = *(grab++);
three[2] = *(grab);
glVertex3fv(three);
}
--num_pnts;
++pols;
}
glEndList();
return (dl_num);
}
#endif /* USE_GL */
/* End of buildlwo.c */
|