Mercurial > mm7
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; |