diff Engine/Graphics/Render.cpp @ 2531:f6de3e15d4a5

for light in indoor
author Ritor1
date Sun, 23 Nov 2014 15:30:17 +0600
parents b1c516bf1102
children 9ec6b8be16fe
line wrap: on
line diff
--- a/Engine/Graphics/Render.cpp	Mon Oct 13 17:52:23 2014 +0300
+++ b/Engine/Graphics/Render.cpp	Sun Nov 23 15:30:17 2014 +0600
@@ -279,28 +279,28 @@
   unsigned int Start_X, End_X, Start_Z, End_Z;
   if ( direction >= 0 && direction < 1.0 )//East(B) - NorthEast(CB)
   {
-    Start_X = pODMRenderParams->uMapGridCellX - 2, End_X = 127;
-    Start_Z = 0, End_Z = 127;
+    Start_X = pODMRenderParams->uMapGridCellX - 2, End_X = 128;
+    Start_Z = 0, End_Z = 128;
   }
   else if (direction >= 1.0 && direction < 3.0)//NorthEast(CB) - WestNorth(CЗ)
   {
-      Start_X = 0, End_X = 127;
+      Start_X = 0, End_X = 128;
       Start_Z = 0, End_Z = pODMRenderParams->uMapGridCellZ + 1;
   }
   else if (direction >= 3.0 && direction < 5.0)//WestNorth(CЗ) - SouthWest(ЮЗ)
   {
     Start_X = 0, End_X = pODMRenderParams->uMapGridCellX + 2;
-    Start_Z = 0, End_Z = 127;
+    Start_Z = 0, End_Z = 128;
   }
   else if ( direction >= 5.0 && direction < 7.0 )//SouthWest(ЮЗ) - //SouthEast(ЮВ)
   {
-    Start_X = 0, End_X = 127;
-    Start_Z = pODMRenderParams->uMapGridCellZ - 2, End_Z = 127;
+    Start_X = 0, End_X = 128;
+    Start_Z = pODMRenderParams->uMapGridCellZ - 2, End_Z = 128;
   }
   else//SouthEast(ЮВ) - East(B)
   {
-    Start_X = pODMRenderParams->uMapGridCellX - 2, End_X = 127;
-    Start_Z = 0, End_Z = 127;
+    Start_X = pODMRenderParams->uMapGridCellX - 2, End_X = 128;
+    Start_Z = 0, End_Z = 128;
   }
   for (unsigned int z = Start_Z; z < End_Z; ++z)
   {
@@ -348,9 +348,33 @@
       pTilePolygon->uNumVertices = 4;
       pTilePolygon->field_59 = 5;
 
+      if ( array_73D150[0].vWorldViewPosition.x < 8.0
+        && array_73D150[1].vWorldViewPosition.x < 8.0
+        && array_73D150[2].vWorldViewPosition.x < 8.0
+        && array_73D150[3].vWorldViewPosition.x < 8.0 )
+        continue;
+      if ( (double)pODMRenderParams->shading_dist_mist < array_73D150[0].vWorldViewPosition.x
+        && (double)pODMRenderParams->shading_dist_mist < array_73D150[1].vWorldViewPosition.x
+        && (double)pODMRenderParams->shading_dist_mist < array_73D150[2].vWorldViewPosition.x
+        && (double)pODMRenderParams->shading_dist_mist < array_73D150[3].vWorldViewPosition.x )
+        continue;
+ //----------------------------------------------------------------------------
+
+      ++pODMRenderParams->uNumPolygons;
+      ++pODMRenderParams->field_44;
+      assert(pODMRenderParams->uNumPolygons < 20000);
+
+      pTilePolygon->uBModelID = 0;
+      pTilePolygon->uBModelFaceID = 0;
+      pTilePolygon->field_50 = (8 * (0 | (0 << 6))) | 6;
+      for (unsigned int k = 0; k < pTilePolygon->uNumVertices; ++k)
+      {
+        memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft));
+        array_50AC10[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097);
+      }
 //shading (затенение)----------------------------------------------------------------------------
       //uint norm_idx = pTerrainNormalIndices[2 * (z * 128 + x) + 1];
-      uint norm_idx = pTerrainNormalIndices[2 * (x * 128 + z) + 2];
+      uint norm_idx = pTerrainNormalIndices[2 * (x * 128 + z) + 1];
       assert(norm_idx < uNumTerrainNormals);
 
       Vec3_float_* norm = &pTerrainNormals[norm_idx];
@@ -364,26 +388,14 @@
         norm = &pTerrainNormals[norm_idx];
       if (for_refactoring)
       {
-        MessageBoxA(nullptr, "Ritor1: function StackLights_TerrainFace needed refactoring and result - slows", "", 0);
-        __debugbreak();
-      }
-      //pGame->pLightmapBuilder->StackLights_TerrainFace(norm, &Light_tile_dist, array_50AC10, 4, 1);//Ritor1: slows
+        //MessageBoxA(nullptr, "Ritor1: function StackLights_TerrainFace needed refactoring and result - slows", "", 0);
+        //__debugbreak();
+
+      pGame->pLightmapBuilder->StackLights_TerrainFace(norm, &Light_tile_dist, array_50AC10, 4, 1);//Ritor1: slows
       //pDecalBuilder->_49BE8A(pTilePolygon, norm, &Light_tile_dist, array_50AC10, 4, 1);
-      //unsigned int a5 = 4;
-//----------------------------------------------------------------------------
-
-      ++pODMRenderParams->uNumPolygons;
-      ++pODMRenderParams->field_44;
-      assert(pODMRenderParams->uNumPolygons < 20000);
-
-      pTilePolygon->uBModelID = 0;
-      pTilePolygon->uBModelFaceID = 0;
-      pTilePolygon->field_50 = (8 * (0 | (0 << 6))) | 6;
-      for (unsigned int k = 0; k < pTilePolygon->uNumVertices; ++k)
-      {
-        memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft));
-        array_50AC10[k]._rhw = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097);
-      }
+      }
+      unsigned int a5 = 4;
+
 //---------Draw distance(Дальность отрисовки)-------------------------------
       int temp =  pODMRenderParams->shading_dist_mist;
       if ( draw_terrain_dist_mist )
@@ -397,21 +409,21 @@
                    || (double)pODMRenderParams->shading_dist_mist < array_73D150[2].vWorldViewPosition.x
                    || (double)pODMRenderParams->shading_dist_mist < array_73D150[3].vWorldViewPosition.x;
 
-         /* int v33 = 0;
-          static stru154 static_sub_0048034E_stru_154;
-          pGame->pLightmapBuilder->std__vector_000004_size = 0;
-          if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
-          {
-            if ( neer_clip )
-              v33 = 3;
-            else
-              v33 = far_clip != 0 ? 5 : 0;
-            static_sub_0048034E_stru_154.ClassifyPolygon(norm, Light_tile_dist);
-            if ( pDecalBuilder->uNumDecals > 0 )
-              pDecalBuilder->ApplyDecals(31 - pTilePolygon->dimming_level, 4, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, *(float *)&v33, -1);
-          }
-          if ( stru_F8AD28.uNumLightsApplied > 0 )
-            pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, v33);*/
+      int v33 = 0;
+      static stru154 static_sub_0048034E_stru_154;
+      pGame->pLightmapBuilder->std__vector_000004_size = 0;
+      if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
+      {
+        if ( neer_clip )
+          v33 = 3;
+        else
+          v33 = far_clip != 0 ? 5 : 0;
+        static_sub_0048034E_stru_154.ClassifyPolygon(norm, Light_tile_dist);
+        if ( pDecalBuilder->uNumDecals > 0 )
+          pDecalBuilder->ApplyDecals(31 - pTilePolygon->dimming_level, 4, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, *(float *)&v33, -1);
+        if ( stru_F8AD28.uNumLightsApplied > 0 )
+          pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, v33);
+      }
 
       if ( !byte_4D864C || ~pGame->uFlags & 0x80 )
       {
@@ -4664,8 +4676,8 @@
           {
             d3d_vertex_buffer[i].specular = 0;
 		  }
-          __debugbreak(); // warning C4700: uninitialized local variable 'v20' used
-		  d3d_vertex_buffer[i].specular = v20;
+          //__debugbreak(); // warning C4700: uninitialized local variable 'v20' used
+		  //d3d_vertex_buffer[i].specular = v20;
 		  d3d_vertex_buffer[i].texcoord.x = array_50AC10[i].u;
 		  d3d_vertex_buffer[i].texcoord.y = array_50AC10[i].v;
 		}