mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 14:39:18 +02:00
Opcjonalna stara smuga (oldsmudge yes).
Symetryczność smugi z obu stron pojazdu (do testu).
This commit is contained in:
@@ -151,6 +151,7 @@ double Global::fFpsMax = 0.0; // g
|
||||
double Global::fFpsRadiusMax = 3000.0; // maksymalny promieñ renderowania
|
||||
int Global::iFpsRadiusMax = 225; // maksymalny promieñ renderowania
|
||||
double Global::fRadiusFactor = 1.1; // wspó³czynnik jednorazowej zmiany promienia scenerii
|
||||
bool Global::bOldSmudge = false; // U¿ywanie starej smugi
|
||||
|
||||
// parametry testowe (do testowania scenerii i obiektów)
|
||||
bool Global::bWireFrame = false;
|
||||
@@ -428,6 +429,8 @@ void Global::ConfigParse(TQueryParserComp *qp, cParser *cp)
|
||||
iModifyTGA = GetNextSymbol().ToIntDef(0); // domyœlnie 0
|
||||
else if (str == AnsiString("hideconsole")) // hunter-271211: ukrywanie konsoli
|
||||
bHideConsole = (GetNextSymbol().LowerCase() == AnsiString("yes"));
|
||||
else if (str == AnsiString("oldsmudge"))
|
||||
bOldSmudge = (GetNextSymbol().LowerCase() == AnsiString("yes"));
|
||||
else if (str ==
|
||||
AnsiString(
|
||||
"rollfix")) // Ra: poprawianie przechy³ki, aby wewnêtrzna szyna by³a "pozioma"
|
||||
|
||||
@@ -280,6 +280,8 @@ class Global
|
||||
static int iSlowMotionMask; // maska wy³¹czanych w³aœciwoœci
|
||||
static int iModifyTGA; // czy korygowaæ pliki TGA dla szybszego wczytywania
|
||||
static bool bHideConsole; // hunter-271211: ukrywanie konsoli
|
||||
static bool bOldSmudge; // U¿ywanie starej smugi
|
||||
|
||||
static TWorld *pWorld; // wskaŸnik na œwiat do usuwania pojazdów
|
||||
static TAnimModel *pTerrainCompact; // obiekt terenu do ewentualnego zapisania w pliku
|
||||
static AnsiString asTerrainModel; // nazwa obiektu terenu do zapisania w pliku
|
||||
|
||||
118
World.cpp
118
World.cpp
@@ -664,6 +664,9 @@ bool TWorld::Init(HWND NhWnd, HDC hDC)
|
||||
}
|
||||
// glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //{Texture blends with object
|
||||
// background}
|
||||
if (Global::bOldSmudge == true)
|
||||
light = TTexturesManager::GetTextureID(szTexturePath, szSceneryPath, "smuga.tga");
|
||||
else
|
||||
light = TTexturesManager::GetTextureID(szTexturePath, szSceneryPath, "smuga2.tga");
|
||||
// Camera.Reset();
|
||||
ResetTimers();
|
||||
@@ -1497,53 +1500,100 @@ bool TWorld::Update()
|
||||
// 3. jeœli smuga w³aczona, wyrenderowaæ pojazd u¿ytkownia po dodaniu smugi do sceny
|
||||
if (Train->Controlled()->Battery)
|
||||
{ // trochê na skróty z t¹ bateri¹
|
||||
glBlendFunc(GL_DST_COLOR, GL_ONE);
|
||||
// glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE);
|
||||
// glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE);
|
||||
// glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_DST_COLOR);
|
||||
if (Global::bOldSmudge == true)
|
||||
{
|
||||
glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE);
|
||||
// glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_DST_COLOR);
|
||||
// glBlendFunc(GL_SRC_ALPHA_SATURATE,GL_ONE);
|
||||
glDepthFunc(GL_GEQUAL);
|
||||
glAlphaFunc(GL_GREATER, 0.004);
|
||||
// glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_LIGHTING);
|
||||
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
|
||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
glBindTexture(GL_TEXTURE_2D, light); // Select our texture
|
||||
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.05*0.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);
|
||||
}
|
||||
}
|
||||
glTexCoord2f(0, 0);
|
||||
glVertex3f(15.0, 0.0, +fSmudge); // rysowanie wzglêdem po³o¿enia modelu
|
||||
glTexCoord2f(1, 0);
|
||||
glVertex3f(-15.0, 0.0, +fSmudge);
|
||||
glTexCoord2f(1, 1);
|
||||
glVertex3f(-15.0, 2.5, 250.0);
|
||||
glTexCoord2f(0, 1);
|
||||
glVertex3f(15.0, 2.5, 250.0);
|
||||
}
|
||||
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;
|
||||
glTexCoord2f(0, 0); glVertex3f(10 / 2 + 3 * i / 4, 6.0 + 0.3*z, -13 - 1.7*z / 3);
|
||||
glTexCoord2f(1, 0); glVertex3f(-10 / 2 - 3 * i / 4, 6.0 + 0.3*z, -13 - 1.7*z / 3);
|
||||
glTexCoord2f(1, 1); glVertex3f(-10 / 2 - 3 * i / 4, -5.0 - 0.5*z, -13 - 1.7*z / 3);
|
||||
glTexCoord2f(0, 1); glVertex3f(10 / 2 + 3 * i / 4, -5.0 - 0.5*z, -13 - 1.7*z / 3);
|
||||
}
|
||||
}
|
||||
glTexCoord2f(0, 0);
|
||||
glVertex3f(-15.0, 0.0, -fSmudge);
|
||||
glTexCoord2f(1, 0);
|
||||
glVertex3f(15.0, 0.0, -fSmudge);
|
||||
glTexCoord2f(1, 1);
|
||||
glVertex3f(15.0, 2.5, -250.0);
|
||||
glTexCoord2f(0, 1);
|
||||
glVertex3f(-15.0, 2.5, -250.0);
|
||||
}
|
||||
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_DEPTH_TEST);
|
||||
// glEnable(GL_LIGHTING); //i tak siê w³¹czy potem
|
||||
glEnable(GL_FOG);
|
||||
}
|
||||
else
|
||||
{
|
||||
glBlendFunc(GL_DST_COLOR, GL_ONE);
|
||||
// glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE);
|
||||
// glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_ONE);
|
||||
// glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_DST_COLOR);
|
||||
// glBlendFunc(GL_SRC_ALPHA_SATURATE,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
|
||||
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.05*0.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.05*0.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);
|
||||
}
|
||||
}
|
||||
glEnable(GL_LIGHTING); // po renderowaniu smugi jest to wy³¹czone
|
||||
// Ra: pojazd u¿ytkownika nale¿a³o by renderowaæ po smudze, aby go nie rozœwietla³a
|
||||
|
||||
Reference in New Issue
Block a user