Mercurial > mm7
changeset 106:efece1632349
8.02.13
author | Ritor1 |
---|---|
date | Fri, 08 Feb 2013 18:33:54 +0600 |
parents | 56e11be29db1 |
children | 23b213c3f8e1 |
files | Render.cpp |
diffstat | 1 files changed, 84 insertions(+), 202 deletions(-) [+] |
line wrap: on
line diff
--- a/Render.cpp Tue Feb 05 19:08:52 2013 +0600 +++ b/Render.cpp Fri Feb 08 18:33:54 2013 +0600 @@ -1566,7 +1566,7 @@ ptr_801A08 = pVerticesSR_806210; ptr_801A04 = pVerticesSR_801A10; v126 = v69; - if ( v105 && v105 != 7 && v105 != 3 && v105 != 4 ) + if ( v105 && v105 != 7 && v105 != 3 && v105 != 4 )//áëîê { for ( i = v69; i >= 1; --i ) { @@ -1599,14 +1599,12 @@ v111 = v75 - uStartZ; for (int z = uStartZ; z < uEndZ; ++z) { - ptr_801A08[v127].vWorldPosition.x = (-64 + x) * 512; + ptr_801A08[v127].vWorldPosition.x = (-64 + x) * 512;//pTerrainVertices[z * 128 + x].vWorldPosition.x = (-64 + (signed)x) * 512; ptr_801A08[v127].vWorldPosition.y = (64 - terrain_76D9C8[i]) * 512; ptr_801A08[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i]); - ptr_801A04[v127].vWorldPosition.x = (-64 + x) * 512; ptr_801A04[v127].vWorldPosition.y = (63 - terrain_76D9C8[i]) * 512; ptr_801A04[v127].vWorldPosition.z = pOutdoor->GetHeightOnTerrain( z, terrain_76D9C8[i] + 1); - if ( !byte_4D864C || !(pGame->uFlags & 0x80) ) { pIndoorCameraD3D_4->ViewTransform(&ptr_801A08[v127], 1); @@ -1618,12 +1616,12 @@ v127 ++; //++v116; //pHeight = v79; - } + } //while ( v116 < v107 ); } - v102.v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[i]); + v102.v103 = abs((int)pIndoorCamera->uMapGridCellZ - terrain_76D9C8[i]); v102.v104 = abs((int)pIndoorCamera->uMapGridCellX - terrain_76DBC8[i]); - if ( pRenderer->pRenderD3D )//Ritor1: do comment to test + if ( pRenderer->pRenderD3D )//Ritor1: do comment to test Render::RenderTerrainD3D();//Render::DrawTerrainD3D(v111, 0, (int)&v102); else Render::DrawTerrainSW(v111, 0, (int)&v102); @@ -1737,217 +1735,101 @@ int v63; // [sp+50h] [bp-8h]@3 int v64; // [sp+57h] [bp-1h]@2 int v62; + struct IndoorCameraD3D *pIndoorCameraD3D; v63 = 0; - // basic optimizations - unsigned int uStartX, uEndX, - uStartZ, uEndZ; - if (pIndoorCamera->sRotationY >= 0 && pIndoorCamera->sRotationY <= 1024) - { - /* CAMERA - ï/2 512 - ^ - \ | / - \ | / - ï _____\|/______ + 0 - 1024 | x 0 - | - - y - 3ï/2 1536 - */ - uStartX = 0, uEndX = 128; - uStartZ = 0, uEndZ = 64 + 16; - } - else if (pIndoorCamera->sRotationY >= 512 && pIndoorCamera->sRotationY <= 1536) - { - /* ï/2 512 - + y - \ | - \ | -CAMERA ï _____\| ______ + 0 - 1024 /| x 0 - / | - / - y - 3ï/2 1536 - */ - uStartX = 0, uEndX = 64 + 16; - uStartZ = 0, uEndZ = 128; - } - else if (pIndoorCamera->sRotationY >= 1536 || pIndoorCamera->sRotationY <= 512) - { - /* ï/2 512 - + y - | / - | / - ï _____ |/______ + 0 CAMERA - 1024 |\ x 0 - | \ - - y \ - 3ï/2 1536 - */ - uStartX = 64 - 16, uEndX = 128; - uStartZ = 0, uEndZ = 128; - } - else - { - uStartX = 0, uEndX = 128; - uStartZ = 64 - 16, uEndZ = 128; - } - -// uStartX = 0, uEndX = 128; -// uStartZ = 0, uEndZ = 128; - - - static RenderVertexSoft pTerrainVertices[128 * 128]; - for (unsigned int z = uStartZ; z < uEndZ; ++z) - for (unsigned int x = uStartX; x < uEndX; ++x) - { - pTerrainVertices[z * 128 + x].vWorldPosition.x = (-64 + (signed)x) * 512; - pTerrainVertices[z * 128 + x].vWorldPosition.y = (64 - (signed)z) * 512; - pTerrainVertices[z * 128 + x].vWorldPosition.z = 32 * pOutdoor->pTerrain.pHeightmap[z * 128 + x]; - - struct IndoorCameraD3D *pIndoorCameraD3D = pGame->pIndoorCameraD3D; - pIndoorCameraD3D->ViewTransform(&pTerrainVertices[z * 128 + x], 1); - pIndoorCameraD3D->Project(&pTerrainVertices[z * 128 + x], 1, 0); - } - - - - for (unsigned int z = uStartZ; z < uEndZ - 1; ++z) - for (unsigned int x = uStartX; x < uEndX - 1; ++x) - { - v8 = &array_77EC08[pOutdoorCamera->numStru148s]; - v8->flags = 0; - v8->field_32 = 0; - - //unsigned int uTileID = pOutdoor->pTerrain.pTilemap[z * 128 + x]; - //struct TileDesc *pTile = pOutdoor->pTerrain->pTileTable->GetTileById(uTileID); - v8->uTileBitmapID = pOutdoor->DoGetTileTexture(x, z); - /*if (uTileID == 1 || //dirttyl BitmapID 88 - uTileID == 2 || //dirt1 BitmapID 126 - uTileID == 3 || //dirttyl BitmapID 88 - uTileID == 4 || //dirt2 BitmapID 127 - uTileID == 11 || //dirttyl BitmapID 127 - - uTileID == 90 || //grastyl BitmapID 110 - uTileID == 92 || //grastyl BitmapID 110 - - uTileID == 102 || //grdrtNE BitmapID 128 - uTileID == 104 || //grdrtNW BitmapID 130 - uTileID == 105 || //grdrtSW BitmapID 131 - uTileID == 106 || //grdrtE BitmapID 132 - uTileID == 107 || //grdrtW BitmapID 133 - uTileID == 108 || //grdrtN BitmapID 134 - uTileID == 109 || //grdrtS BitmapID 135 - uTileID == 110 || //grdrtXNE BitmapID 136 - uTileID == 112 || //grdrtXNW BitmapID 138 - uTileID == 113 || //grdrtXSW BitmapID 139 - - uTileID == 126 || uTileID == 127 || uTileID == 128 || uTileID == 129 || - uTileID == 130 || //wtrtyl BitmapID 89 - uTileID == 131 || //wtrtyl BitmapID 89 - uTileID == 132 || //wtrtyl BitmapID 89 - uTileID == 133 || //wtrtyl BitmapID 89 - uTileID == 134 || //wtrtyl BitmapID 89 - uTileID == 135 || //wtrtyl BitmapID 89 - uTileID == 136 || //wtrtyl BitmapID 89 - uTileID == 137 || //wtrtyl BitmapID 89 - - uTileID == 139 || //wtrdrSE BitmapID 141 - uTileID == 141 || //wrtdrSW BitmapID 143 - uTileID == 142 || //wrtdrE BitmapID 144 - uTileID == 143 || //wrtdrW BitmapID 145 - uTileID == 145 || //wtrdrS BitmapID 147 - uTileID == 147 || //wtrdrXSE BitmapID 149 - uTileID == 149 ) //wtrdrXSW BitmapID 151 - continue;*/ - - /*if (uTileID == 199 || //dirttyl BitmapID 0 - uTileID == 200 || //dirttyl BitmapID 0 - uTileID == 201 || //dirttyl BitmapID 0 - uTileID == 202 || //dirttyl BitmapID 0 - uTileID == 203 || //dirttyl BitmapID 0 - uTileID == 204 || //dirttyl BitmapID 0 - uTileID == 212 || //dirttyl BitmapID 0 - uTileID == 217) //dirttyl BitmapID 0 - continue;*/ - - v6 = v8->uTileBitmapID; - v8->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v6]; - - if (v8->uTileBitmapID == 0xFFFF) - continue; - - v8->sTextureDeltaU = 0; - v8->sTextureDeltaV = 0; - - -/* world coordinates, z -> height - 32767 - +y - - -32768 -x +x 32767 - - -y - -32768 -*/ - - memcpy(array_73D150 + 0, &pTerrainVertices[z * 128 + x], sizeof(RenderVertexSoft)); - array_73D150[0].u = 0; - array_73D150[0].v = 0; - - memcpy(array_73D150 + 1, &pTerrainVertices[z * 128 + x + 1], sizeof(RenderVertexSoft)); - array_73D150[1].u = 1; - array_73D150[1].v = 0; - - memcpy(array_73D150 + 2, &pTerrainVertices[(z + 1) * 128 + x + 1], sizeof(RenderVertexSoft)); - array_73D150[2].u = 1; - array_73D150[2].v = 1; - - memcpy(array_73D150 + 3, &pTerrainVertices[(z + 1) * 128 + x], sizeof(RenderVertexSoft)); - array_73D150[3].u = 0; - array_73D150[3].v = 1; - - + unsigned int uStartX, uEndX, + uStartZ, uEndZ; + if (pIndoorCamera->sRotationY >= 0 && pIndoorCamera->sRotationY <= 1024) + { + uStartX = 0, uEndX = 128; + uStartZ = 0, uEndZ = 64 + 16; + } + else if (pIndoorCamera->sRotationY >= 512 && pIndoorCamera->sRotationY <= 1536) + { + uStartX = 0, uEndX = 64 + 16; + uStartZ = 0, uEndZ = 128; + } + else if (pIndoorCamera->sRotationY >= 1536 || pIndoorCamera->sRotationY <= 512) + { + uStartX = 64 - 16, uEndX = 128; + uStartZ = 0, uEndZ = 128; + } + else + { + uStartX = 0, uEndX = 128; + uStartZ = 64 - 16, uEndZ = 128; + } +// uStartX = 0, uEndX = 128; +// uStartZ = 0, uEndZ = 128; + static RenderVertexSoft pTerrainVertices[128 * 128]; + for (unsigned int z = uStartZ; z < uEndZ; ++z) + { + for (unsigned int x = uStartX; x < uEndX; ++x) + { + pTerrainVertices[z * 128 + x].vWorldPosition.x = (-64 + (signed)x) * 512; + pTerrainVertices[z * 128 + x].vWorldPosition.y = (64 - (signed)z) * 512; + pTerrainVertices[z * 128 + x].vWorldPosition.z = 32 * pOutdoor->pTerrain.pHeightmap[z * 128 + x]; + pIndoorCameraD3D = pGame->pIndoorCameraD3D; + pIndoorCameraD3D->ViewTransform(&pTerrainVertices[z * 128 + x], 1); + pIndoorCameraD3D->Project(&pTerrainVertices[z * 128 + x], 1, 0); + } + } + for (unsigned int z = uStartZ; z < uEndZ - 1; ++z) + { + for (unsigned int x = uStartX; x < uEndX - 1; ++x) + { + v8 = &array_77EC08[pOutdoorCamera->numStru148s]; + v8->flags = 0; + v8->field_32 = 0; + //unsigned int uTileID = pOutdoor->pTerrain.pTilemap[z * 128 + x]; + //struct TileDesc *pTile = pOutdoor->pTerrain->pTileTable->GetTileById(uTileID); + v8->uTileBitmapID = pOutdoor->DoGetTileTexture(x, z); + v6 = v8->uTileBitmapID; + v8->pTexture = (Texture *)&pBitmaps_LOD->pHardwareTextures[v6]; + if (v8->uTileBitmapID == 0xFFFF) + continue; + v8->sTextureDeltaU = 0; + v8->sTextureDeltaV = 0; + memcpy(array_73D150 + 0, &pTerrainVertices[z * 128 + x], sizeof(RenderVertexSoft)); + array_73D150[0].u = 0; + array_73D150[0].v = 0; + memcpy(array_73D150 + 1, &pTerrainVertices[z * 128 + x + 1], sizeof(RenderVertexSoft)); + array_73D150[1].u = 1; + array_73D150[1].v = 0; + memcpy(array_73D150 + 2, &pTerrainVertices[(z + 1) * 128 + x + 1], sizeof(RenderVertexSoft)); + array_73D150[2].u = 1; + array_73D150[2].v = 1; + memcpy(array_73D150 + 3, &pTerrainVertices[(z + 1) * 128 + x], sizeof(RenderVertexSoft)); + array_73D150[3].u = 0; + array_73D150[3].v = 1; v55 = 0; v54 = false; v58 = 0; - if (v58 == 4) // if all y == first y; primitive in xz plane v8->field_32 |= 0x0001; - v8->pODMFace = nullptr; v8->uNumVertices = 4; v8->field_59 = 5; - v8->field_58 = 0; - ++pOutdoorCamera->numStru148s; ++pOutdoorCamera->field_44; - - - - v8->uBModelID = 0; - v8->uBModelFaceID = 0; - v31 = (8 * (0 | (0 << 6))); - v8->field_50 = v31 | 6; - - for (unsigned int k = 0; k < 4; ++k) - { - memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft)); - array_50AC10[k].flt_20 = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097); - } - - - pRenderer->DrawTerrainPolygon(v8, pBitmaps_LOD->pHardwareTextures[v6]); - + v8->uBModelID = 0; + v8->uBModelFaceID = 0; + v31 = (8 * (0 | (0 << 6))); + v8->field_50 = v31 | 6; + for (unsigned int k = 0; k < 4; ++k) + { + memcpy(&array_50AC10[k], &array_73D150[k], sizeof(struct RenderVertexSoft)); + array_50AC10[k].flt_20 = 1.0 / (array_73D150[k].vWorldViewPosition.x + 0.0000001000000011686097); + } + pRenderer->DrawTerrainPolygon(v8, pBitmaps_LOD->pHardwareTextures[v6]); --pOutdoorCamera->numStru148s; --pOutdoorCamera->field_44; - - } - - } + } + } +} //----- (0048034E) -------------------------------------------------------- void Render::DrawTerrainD3D(int a1, int a2, int a3)