22 #include <sys/types.h> 56 ssgVtxTable::copy_from(src, clone_flags);
80 gltype = GL_TRIANGLE_STRIP;
81 type = ssgTypeVtxTable();
87 vertices = (vtx!=NULL) ? vtx :
new ssgVertexArray();
88 normals =
new ssgNormalArray();
89 texcoords =
new ssgTexCoordArray();
90 colours =
new ssgColourArray();
113 GLfloat modelView[16];
119 sgVec3 *vx = (sgVec3 *) vertices->get(0);
120 sgVec3 *nm = (sgVec3 *) normals->get(0);
127 glDepthMask(GL_FALSE);
128 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
130 glPolygonOffset(-15.0f, -20.0f);
131 glEnable(GL_POLYGON_OFFSET_FILL);
133 glGetFloatv(GL_MODELVIEW_MATRIX, modelView);
136 up[0] = modelView[1];
137 up[1] = modelView[5];
138 up[2] = modelView[9];
140 right[0] = modelView[0];
141 right[1] = modelView[4];
142 right[2] = modelView[8];
147 C[0] = right[0] + up[0];
148 C[1] = right[1] + up[1];
149 C[2] = right[2] + up[2];
152 D[0] = -right[0] + up[0];
153 D[1] = -right[1] + up[1];
154 D[2] = -right[2] + up[2];
157 A[0] = -right[0] - up[0];
158 A[1] = -right[1] - up[1];
159 A[2] = -right[2] - up[2];
162 B[0] = right[0] - up[0];
163 B[1] = right[1] - up[1];
164 B[2] = right[2] - up[2];
170 glActiveTextureARB (GL_TEXTURE0_ARB);
173 sgMakeRotMat4(mat, ((
float)rand()/(
float)RAND_MAX)*45, axis);
174 glMatrixMode(GL_TEXTURE);
176 sgMakeTransMat4(mat3, 0.5, 0.5, 0);
177 glMultMatrixf((
float *)mat3);
178 glMultMatrixf((
float *)mat);
179 sgMakeTransMat4(mat3, -0.5, -0.5, 0);
180 glMultMatrixf((
float *)mat3);
181 glMatrixMode(GL_MODELVIEW);
184 glColor4f(0.8, 0.8, 0.8, alpha);
185 if (num_normals == 1) {
202 glDisable(GL_POLYGON_OFFSET_FILL);
205 glActiveTextureARB (GL_TEXTURE0_ARB);
208 glMatrixMode(GL_TEXTURE);
210 glMatrixMode(GL_MODELVIEW);
212 glDepthMask(GL_TRUE);
227 const int BUFSIZE=256;
233 for (i = 0; i < index; i++) {
238 snprintf(buf, BUFSIZE,
"data/textures;data/img;.");
245 frontlight1->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
251 snprintf(buf, BUFSIZE,
"data/textures;data/img;.");
258 frontlight2->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
264 snprintf(buf, BUFSIZE,
"data/textures;data/img;.");
271 rearlight1->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
277 snprintf(buf, BUFSIZE,
"data/textures;data/img;.");
284 rearlight2->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
290 snprintf(buf, BUFSIZE,
"data/textures;data/img;.");
297 breaklight1->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
303 snprintf(buf, BUFSIZE,
"data/textures;data/img;.");
310 breaklight2->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
360 ssgVertexArray *light_vtx =
new ssgVertexArray(1);
426 clight->setCullFace(0);
435 if (car->_brakeCmd>0) {
void grUpdateCarlight(tCarElt *car, class cGrPerspCamera *curCam, int disp)
virtual ssgBase * clone(int clone_flags=0)
void grInitCarlight(int index)
virtual void copy_from(ssgVtxTableCarlight *src, int clone_flags)
ssgVtxTableCarlight * lightArray[MAX_NUMBER_LIGHT]
ssgSimpleState * frontlight1
ssgBranch * CarlightAnchor
ssgVtxTableCarlight * lightCurr[MAX_NUMBER_LIGHT]
The Gaming Framework API (client part).
void grShudownCarlight(void)
int lightType[MAX_NUMBER_LIGHT]
#define LIGHT_TYPE_FRONT2
virtual void transform(const sgMat4 m)
#define RM_LIGHT_HEAD2
head light 2
#define LIGHT_TYPE_BRAKE2
tgrCarlight * theCarslight
virtual ~ssgVtxTableCarlight(void)
Graphic Module Interface Definition.
void grAddCarlight(tCarElt *car, int type, sgVec3 pos, double size)
This is the car structure.
ssgSimpleState * rearlight1
ssgSimpleState * breaklight2
ssgState * grSsgLoadTexStateEx(const char *img, char *filepath, int wrap, int mipmap)
ssgSimpleState * frontlight2
void grLinkCarlights(tCarElt *car)
ssgSimpleState * rearlight2
Track Structure and Track Loader Module Definition.
#define RM_LIGHT_HEAD1
head light 1
ssgSimpleState * breaklight1