comparison Render.cpp @ 2322:a59892f99d31

for draw terrain
author Ritor1
date Sun, 23 Mar 2014 19:55:59 +0600
parents 53c9d34024d6
children 846e28e41fb4 defd2526c94c
comparison
equal deleted inserted replaced
2321:53c9d34024d6 2322:a59892f99d31
226 226
227 void Render::RenderTerrainD3D() // New function 227 void Render::RenderTerrainD3D() // New function
228 { 228 {
229 int v6; // ecx@8 229 int v6; // ecx@8
230 struct Polygon *pTilePolygon; // ebx@8 230 struct Polygon *pTilePolygon; // ebx@8
231 float a3a; 231 float Light_tile_dist;
232 232
233 //warning: the game uses CW culling by default, ccw is incosistent 233 //warning: the game uses CW culling by default, ccw is incosistent
234 pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CCW); 234 pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_CCW);
235 235
236 static RenderVertexSoft pTerrainVertices[128 * 128];//vertexCountX and vertexCountZ 236 static RenderVertexSoft pTerrainVertices[128 * 128];//vertexCountX and vertexCountZ
284 Start_X = 0, End_X = 127; 284 Start_X = 0, End_X = 127;
285 Start_Z = 0, End_Z = pODMRenderParams->uMapGridCellZ + 1; 285 Start_Z = 0, End_Z = pODMRenderParams->uMapGridCellZ + 1;
286 } 286 }
287 else if (direction >= 3.0 && direction < 5.0)//WestNorth(CЗ) - SouthWest(ЮЗ) 287 else if (direction >= 3.0 && direction < 5.0)//WestNorth(CЗ) - SouthWest(ЮЗ)
288 { 288 {
289 Start_X = 0, End_X = pODMRenderParams->uMapGridCellX + 1; 289 Start_X = 0, End_X = pODMRenderParams->uMapGridCellX + 2;
290 Start_Z = 0, End_Z = 127; 290 Start_Z = 0, End_Z = 127;
291 } 291 }
292 else if ( direction >= 5.0 && direction < 7.0 )//SouthWest(ЮЗ) - //SouthEast(ЮВ) 292 else if ( direction >= 5.0 && direction < 7.0 )//SouthWest(ЮЗ) - //SouthEast(ЮВ)
293 { 293 {
294 Start_X = 0, End_X = 127; 294 Start_X = 0, End_X = 127;
357 pTilePolygon->dimming_level = 20.0 - floorf(20.0 * _f + 0.5f); 357 pTilePolygon->dimming_level = 20.0 - floorf(20.0 * _f + 0.5f);
358 if ( norm_idx < 0 || norm_idx > uNumTerrainNormals - 1 ) 358 if ( norm_idx < 0 || norm_idx > uNumTerrainNormals - 1 )
359 norm = 0; 359 norm = 0;
360 else 360 else
361 norm = &pTerrainNormals[norm_idx]; 361 norm = &pTerrainNormals[norm_idx];
362 //pGame->pLightmapBuilder->StackLights_TerrainFace(norm, &a3a, array_50AC10, 4, 1);//Ritor1: slows 362 //pGame->pLightmapBuilder->StackLights_TerrainFace(norm, &Light_tile_dist, array_50AC10, 4, 1);//Ritor1: slows
363 //pDecalBuilder->_49BE8A(pTilePolygon, norm, &a3a, array_50AC10, 4, 1); 363 //pDecalBuilder->_49BE8A(pTilePolygon, norm, &Light_tile_dist, array_50AC10, 4, 1);
364 //----------------------------------------------------------------------------------------------- 364 //unsigned int a5 = 4;
365 //----------------------------------------------------------------------------
365 366
366 ++pODMRenderParams->uNumPolygons; 367 ++pODMRenderParams->uNumPolygons;
367 ++pODMRenderParams->field_44; 368 ++pODMRenderParams->field_44;
368 assert(pODMRenderParams->uNumPolygons < 20000); 369 assert(pODMRenderParams->uNumPolygons < 20000);
369 370
385 || array_73D150[3].vWorldViewPosition.x < 8.0; 386 || array_73D150[3].vWorldViewPosition.x < 8.0;
386 bool far_clip = (double)pODMRenderParams->shading_dist_mist < array_73D150[0].vWorldViewPosition.x 387 bool far_clip = (double)pODMRenderParams->shading_dist_mist < array_73D150[0].vWorldViewPosition.x
387 || (double)pODMRenderParams->shading_dist_mist < array_73D150[1].vWorldViewPosition.x 388 || (double)pODMRenderParams->shading_dist_mist < array_73D150[1].vWorldViewPosition.x
388 || (double)pODMRenderParams->shading_dist_mist < array_73D150[2].vWorldViewPosition.x 389 || (double)pODMRenderParams->shading_dist_mist < array_73D150[2].vWorldViewPosition.x
389 || (double)pODMRenderParams->shading_dist_mist < array_73D150[3].vWorldViewPosition.x; 390 || (double)pODMRenderParams->shading_dist_mist < array_73D150[3].vWorldViewPosition.x;
391
392 /* int v33 = 0;
393 static stru154 static_sub_0048034E_stru_154;
394 pGame->pLightmapBuilder->std__vector_000004_size = 0;
395 if ( stru_F8AD28.uNumLightsApplied > 0 || pDecalBuilder->uNumDecals > 0 )
396 {
397 if ( neer_clip )
398 v33 = 3;
399 else
400 v33 = far_clip != 0 ? 5 : 0;
401 static_sub_0048034E_stru_154.ClassifyPolygon(norm, Light_tile_dist);
402 if ( pDecalBuilder->uNumDecals > 0 )
403 pDecalBuilder->ApplyDecals(31 - pTilePolygon->dimming_level, 4, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, *(float *)&v33, -1);
404 }
405 if ( stru_F8AD28.uNumLightsApplied > 0 )
406 pGame->pLightmapBuilder->ApplyLights(&stru_F8AD28, &static_sub_0048034E_stru_154, a5, array_50AC10, 0, v33);*/
407
390 if ( !byte_4D864C || ~pGame->uFlags & 0x80 ) 408 if ( !byte_4D864C || ~pGame->uFlags & 0x80 )
391 { 409 {
392 //if ( neer_clip ) //Ritor1: Даёт искажения на подъёме, возможно требуется ф-ция Безье 410 //if ( neer_clip ) //Ritor1: Даёт искажения на подъёме, возможно требуется ф-ция Безье
393 //{ 411 //{
394 // pTilePolygon->uNumVertices = ODM_NearClip(pTilePolygon->uNumVertices); 412 // pTilePolygon->uNumVertices = ODM_NearClip(pTilePolygon->uNumVertices);
433 --pODMRenderParams->uNumPolygons; 451 --pODMRenderParams->uNumPolygons;
434 --pODMRenderParams->field_44; 452 --pODMRenderParams->field_44;
435 } 453 }
436 } 454 }
437 } 455 }
438
439 456
440 //----- (004811A3) -------------------------------------------------------- 457 //----- (004811A3) --------------------------------------------------------
441 void Render::DrawBorderTiles(struct Polygon *poly) 458 void Render::DrawBorderTiles(struct Polygon *poly)
442 { 459 {
443 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false); 460 pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false);
1024 LOBYTE(v38) = v38 | 0x80; 1041 LOBYTE(v38) = v38 | 0x80;
1025 if ( v8->uGlowRadius ) 1042 if ( v8->uGlowRadius )
1026 { 1043 {
1027 if ( pRenderer->pRenderD3D && pRenderer->bUseColoredLights ) 1044 if ( pRenderer->pRenderD3D && pRenderer->bUseColoredLights )
1028 { 1045 {
1029 v14 = decor_desc->uColoredLightRed; 1046 v14 = 255;//decor_desc->uColoredLightRed;
1030 v15 = decor_desc->uColoredLightGreen; 1047 v15 = 255;//decor_desc->uColoredLightGreen;
1031 v16 = decor_desc->uColoredLightBlue; 1048 v16 = 255;//decor_desc->uColoredLightBlue;
1032 } 1049 }
1033 else 1050 else
1034 { 1051 {
1035 v16 = 255; 1052 v16 = 255;
1036 v14 = 255; 1053 v14 = 255;