62 ssgNormalArray *shd_nrm;
76 shd_nrm =
new ssgNormalArray(1);
77 nrm[0] = nrm[1] = 0.0;
89 skidState->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);
90 skidState->setTexture (
"data/textures/grey-tracks.rgb", TRUE, TRUE, TRUE);
96 for (i = 0; i<4; i++) {
103 *
sizeof( ssgColourArray *));
127 grCarInfo[car->
index].skidmarks->strips[i].vta[k]->setCullFace(0);
137 grCarInfo[car->
index].skidmarks->strips[i].last_state_of_skid = 0;
151 ssgVertexArray *basevtx = NULL;
153 ssgTexCoordArray* texcoords = NULL;
154 tdble skid_sensitivity = 0.75f;
160 cur_clr[0] = cur_clr[1] = cur_clr[2] = 1.0f;
162 for (i = 0; i < 4; i++) {
164 tdble sling_mud = 1.0f;
168 if (strstr(s,
"sand")) {
172 skid_sensitivity = 0.9f;
173 }
else if (strstr(s,
"dirt")) {
177 skid_sensitivity = 0.9f;
178 }
else if (strstr(s,
"mud")) {
182 skid_sensitivity = 1.0f;
183 }
else if (strstr(s,
"grass")) {
187 skid_sensitivity = 0.8f;
188 }
else if (strstr(s,
"gravel")) {
192 skid_sensitivity = 0.7f;
198 skid_sensitivity = 0.5f;
202 if (car->_skid[i] > 0.1f) {
203 cur_clr[3] = tanh(skid_sensitivity*car->_skid[i]);
208 for (
int c = 0; c < 3; c++) {
210 grCarInfo[car->
index].skidmarks->strips[i].smooth_colour[c] = 0.9f*tmp + 0.1f*cur_clr[c];
219 if (cur_clr[3] > 0.1f) {
221 basevtx =
new ssgVertexArray(4 * 2 + 1);
222 tdble sling_left = 0.0f;
223 tdble sling_right = 0.0f;
224 sling_right = sling_mud;
225 sling_left = -sling_mud;
238 tdble z_adjust = 0.95;
244 if (car->_speed_x > 0.0f) {
245 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_right + 1.0)*car->_tireWidth(i) / 2.0;
247 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_left - 1.0)* car->_tireWidth(i) / 2.0;
254 if (car->_speed_x > 0.0f) {
255 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_left - 1.0)* car->_tireWidth(i) / 2.0;
257 vtx[1] = car->
priv.
wheel[i].
relPos.
y + (sling_right + 1.0)*car->_tireWidth(i) / 2.0;
262 texcoords =
new ssgTexCoordArray();
266 TxVtx[1] = 0.75f + sling_right*0.25f;
267 texcoords->add(TxVtx);
269 TxVtx[1] = 0.25f+sling_left*0.25f;
270 texcoords->add(TxVtx);
274 grCarInfo[car->
index].skidmarks->strips[i].tex_state += dt*car->_wheelSpinVel(i);
276 grCarInfo[car->
index].skidmarks->base =
new ssgVtxTable(GL_TRIANGLE_STRIP, basevtx, NULL, texcoords, NULL);
278 grCarInfo[car->
index].skidmarks->base->getVertexList((
void**)&tvtx);
279 grCarInfo[car->
index].skidmarks->base->getTexCoordList((
void**)&tclist);
282 if (
grCarInfo[car->
index].skidmarks->strips[i].last_state_of_skid == 0) {
284 grCarInfo[car->
index].skidmarks->strips[i].last_state_of_skid = 1;
329 basevtx->removeAll();
333 if (
grCarInfo[car->
index].skidmarks->strips[i].last_state_of_skid != 0) {
337 grCarInfo[car->
index].skidmarks->strips[i].last_state_of_skid = 0;