From 524be63b16a5ac8b1c4d0801aa13b707f5624df2 Mon Sep 17 00:00:00 2001 From: antonisauren Date: Mon, 6 Jun 2016 19:37:08 +0200 Subject: [PATCH] =?UTF-8?q?Opcjonalna=20stara=20smuga=20(oldsmudge=20yes).?= =?UTF-8?q?=20Symetryczno=C5=9B=C4=87=20smugi=20z=20obu=20stron=20pojazdu?= =?UTF-8?q?=20(do=20testu).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Globals.cpp | 3 ++ Globals.h | 2 + World.cpp | 118 +++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 89 insertions(+), 34 deletions(-) diff --git a/Globals.cpp b/Globals.cpp index 7b585254..609a098b 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -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" diff --git a/Globals.h b/Globals.h index 522475a1..ec3ef5a9 100644 --- a/Globals.h +++ b/Globals.h @@ -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 diff --git a/World.cpp b/World.cpp index 1b67dac9..42c38cf8 100644 --- a/World.cpp +++ b/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