Na najnowszych exe z warsztatu też? W funkcji rysującej była różnica między stronami pojazdu, ale nadal nic zależnego od ilości zapalonych świateł.
{
glBlendFunc(GL_DST_COLOR, GL_ONE);
glDepthFunc(GL_GEQUAL);
glAlphaFunc(GL_GREATER, 0.004);
// glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glDisable(GL_FOG);
//glColor4f(0.15f, 0.15f, 0.15f, 0.25f);
glBindTexture(GL_TEXTURE_2D, light); // Select our texture
//float ddl = (0.15*Global::diffuseDayLight[0]+0.295*Global::diffuseDayLight[1]+0.055*Global::diffuseDayLight[2]); //0.24:0
glBegin(GL_QUADS);
float fSmudge = Train->Dynamic()->MoverParameters->DimHalf.y + 7; // gdzie zaczynać smugę
if (Train->Controlled()->iLights[0] & 21)
{ // wystarczy jeden zapalony z przodu
for (int i = 15; i <= 35; i++)
{
float z = i * i * i * 0.01f;//25/4;
//float C = (36 - i*0.5)*0.005*(1.5 - sqrt(ddl));
float C = (36 - i*0.5)*0.005*sqrt((1/sqrt(Global::fLuminance+0.015))-1);
glColor4f(C, C, C, 0.25f);
glTexCoord2f(0, 0); glVertex3f(-10 / 2 - 2 * i / 4, 6.0 + 0.3*z, 13 + 1.7*z / 3);
glTexCoord2f(1, 0); glVertex3f(10 / 2 + 2 * i / 4, 6.0 + 0.3*z, 13 + 1.7*z / 3);
glTexCoord2f(1, 1); glVertex3f(10 / 2 + 2 * i / 4, -5.0 - 0.5*z, 13 + 1.7*z / 3);
glTexCoord2f(0, 1); glVertex3f(-10 / 2 - 2 * i / 4, -5.0 - 0.5*z, 13 + 1.7*z / 3);
}
}
if (Train->Controlled()->iLights[1] & 21)
{ // wystarczy jeden zapalony z tyłu
for (int i = 15; i <= 35; i++)
{
float z = i * i * i * 0.01f;//25/4;
float C = (36 - i*0.5)*0.005*sqrt((1/sqrt(Global::fLuminance+0.015))-1);
glColor4f(C, C, C, 0.25f);
glTexCoord2f(0, 0); glVertex3f(10 / 2 + 2 * i / 4, 6.0 + 0.3*z, -13 - 1.7*z / 3);
glTexCoord2f(1, 0); glVertex3f(-10 / 2 - 2 * i / 4, 6.0 + 0.3*z, -13 - 1.7*z / 3);
glTexCoord2f(1, 1); glVertex3f(-10 / 2 - 2 * i / 4, -5.0 - 0.5*z, -13 - 1.7*z / 3);
glTexCoord2f(0, 1); glVertex3f(10 / 2 + 2 * i / 4, -5.0 - 0.5*z, -13 - 1.7*z / 3);
}
}
glEnd();
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// glEnable(GL_DEPTH_TEST);
glAlphaFunc(GL_GREATER, 0.04);
glDepthFunc(GL_LEQUAL);
glEnable(GL_LIGHTING); //i tak się włączy potem
glEnable(GL_FOG);
}
Czyli w pętli rysowane są kolejne płaszczyzny ze zmiennym nasyceniem (maską alfy tutaj) C i rozmiarem z zależnie od iteracji i.
Train->Controlled()->iLights[n] zawiera sumę bitową świateł danego czoła. Na jej podstawie można określić jaka kombinacja reflektorów jest zapalona i rysować przesuniętą w bok smugę o mniejszym nasyceniu/rozmiarze. Do empirycznego ogarnięcia. Można by też tam wsadzić przyciemnienie reflektorów.
Każda kombinacja musi mieć alternatywny wariant, bo ogl nie wymiesza kilku niezależnych przy wielu światłach ładnie. Chce ktoś przełożyć to co napisałem na kod?