Mercurial > mm7
comparison Render.cpp @ 1999:079f2abf54e4
DrawIndoorSky() fix
author | Ritor1 |
---|---|
date | Tue, 05 Nov 2013 12:58:19 +0600 |
parents | 157fd2831567 |
children | 2e6c63bdcfa9 bb1e7b0780d8 |
comparison
equal
deleted
inserted
replaced
1998:1175adbf8c58 | 1999:079f2abf54e4 |
---|---|
4976 v5 = pOutdoor->max_terrain_dimming_level; | 4976 v5 = pOutdoor->max_terrain_dimming_level; |
4977 for (uint i = 0; i < uNumVertices; ++i) | 4977 for (uint i = 0; i < uNumVertices; ++i) |
4978 { | 4978 { |
4979 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX; | 4979 d3d_vertex_buffer[i].pos.x = array_507D30[i].vWorldViewProjX; |
4980 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY; | 4980 d3d_vertex_buffer[i].pos.y = array_507D30[i].vWorldViewProjY; |
4981 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / array_507D30[i].vWorldViewPosition.y; | 4981 d3d_vertex_buffer[i].pos.z = 1.0 - 1.0 / (array_507D30[i].vWorldViewPosition.x * 0.061758894); |
4982 d3d_vertex_buffer[i].rhw = array_507D30[i]._rhw; | 4982 d3d_vertex_buffer[i].rhw = array_507D30[i]._rhw; |
4983 d3d_vertex_buffer[i].diffuse = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8); | 4983 d3d_vertex_buffer[i].diffuse = 8 * v5 | ((8 * v5 | (v5 << 11)) << 8); |
4984 d3d_vertex_buffer[i].specular = 0; | 4984 d3d_vertex_buffer[i].specular = 0; |
4985 d3d_vertex_buffer[i].texcoord.x = array_507D30[i].u; | 4985 d3d_vertex_buffer[i].texcoord.x = array_507D30[i].u; |
4986 d3d_vertex_buffer[i].texcoord.y = array_507D30[i].v; | 4986 d3d_vertex_buffer[i].texcoord.y = array_507D30[i].v; |
5049 int v70; // [sp+144h] [bp-30h]@3 | 5049 int v70; // [sp+144h] [bp-30h]@3 |
5050 int X; // [sp+148h] [bp-2Ch]@9 | 5050 int X; // [sp+148h] [bp-2Ch]@9 |
5051 int v72; // [sp+14Ch] [bp-28h]@7 | 5051 int v72; // [sp+14Ch] [bp-28h]@7 |
5052 float v73; // [sp+150h] [bp-24h]@16 | 5052 float v73; // [sp+150h] [bp-24h]@16 |
5053 unsigned int v74; // [sp+154h] [bp-20h]@3 | 5053 unsigned int v74; // [sp+154h] [bp-20h]@3 |
5054 unsigned int v74_; // [sp+154h] [bp-20h]@3 | |
5054 RenderVertexSoft *v75; // [sp+158h] [bp-1Ch]@3 | 5055 RenderVertexSoft *v75; // [sp+158h] [bp-1Ch]@3 |
5055 float v76; // [sp+15Ch] [bp-18h]@9 | 5056 float v76; // [sp+15Ch] [bp-18h]@9 |
5056 int v77; // [sp+160h] [bp-14h]@9 | 5057 int v77; // [sp+160h] [bp-14h]@9 |
5057 int v78; // [sp+164h] [bp-10h]@7 | 5058 int v78; // [sp+164h] [bp-10h]@7 |
5058 void *v79; // [sp+168h] [bp-Ch]@9 | 5059 void *v79; // [sp+168h] [bp-Ch]@9 |
5083 - (double)pBLVRenderParams->fov_rad_fixpoint | 5084 - (double)pBLVRenderParams->fov_rad_fixpoint |
5084 / ((cos(v5) * 16192.0 + 0.0000001) | 5085 / ((cos(v5) * 16192.0 + 0.0000001) |
5085 * 65535.0) | 5086 * 65535.0) |
5086 * (sin(v5) * -16192.0 - (double)pGame->pIndoorCameraD3D->vPartyPos.z)); | 5087 * (sin(v5) * -16192.0 - (double)pGame->pIndoorCameraD3D->vPartyPos.z)); |
5087 | 5088 |
5089 stru_8019C8._48653D_frustum_blv(65536, 0, 0, 0, 65536, 0); | |
5088 pSkyPolygon.Create_48607B(&stru_8019C8); | 5090 pSkyPolygon.Create_48607B(&stru_8019C8); |
5089 pSkyPolygon.ptr_38->_48653D_frustum_blv(65536, 0, 0, 0, 65536, 0); | |
5090 pSkyPolygon.uTileBitmapID = pFace->uBitmapID; | 5091 pSkyPolygon.uTileBitmapID = pFace->uBitmapID; |
5091 | 5092 |
5092 pSkyPolygon.pTexture = pBitmaps_LOD->GetTexture(pSkyPolygon.uTileBitmapID); | 5093 pSkyPolygon.pTexture = pBitmaps_LOD->GetTexture(pSkyPolygon.uTileBitmapID); |
5093 if ( !pSkyPolygon.pTexture ) | 5094 if ( !pSkyPolygon.pTexture ) |
5094 return; | 5095 return; |
5111 v13 = pSkyPolygon.pTexture->uHeightMinus1; | 5112 v13 = pSkyPolygon.pTexture->uHeightMinus1; |
5112 //v67 = 1.0 / (double)pSkyPolygon.pTexture->uTextureWidth; | 5113 //v67 = 1.0 / (double)pSkyPolygon.pTexture->uTextureWidth; |
5113 v63 = 224 * pMiscTimer->uTotalGameTimeElapsed & v13; | 5114 v63 = 224 * pMiscTimer->uTotalGameTimeElapsed & v13; |
5114 v66 = 224 * pMiscTimer->uTotalGameTimeElapsed & v12; | 5115 v66 = 224 * pMiscTimer->uTotalGameTimeElapsed & v12; |
5115 v78 = 0; | 5116 v78 = 0; |
5116 v81 = 0; | 5117 //v81 = 0; |
5117 float v68 = 1.0 / (double)pSkyPolygon.pTexture->uTextureHeight; | 5118 float v68 = 1.0 / (double)pSkyPolygon.pTexture->uTextureHeight; |
5118 if ( (signed int)pSkyPolygon.uNumVertices <= 0 ) | 5119 if ( (signed int)pSkyPolygon.uNumVertices <= 0 ) |
5119 return; | 5120 return; |
5120 | 5121 |
5121 //v14 = (char *)&array_507D30[0].vWorldViewProjY; | |
5122 int _507D30_idx = 0; | 5122 int _507D30_idx = 0; |
5123 while ( 2 ) | 5123 for ( _507D30_idx; _507D30_idx < pSkyPolygon.uNumVertices; _507D30_idx++ ) |
5124 { | 5124 { |
5125 //v15 = (void *)(v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY)); | 5125 //v15 = (void *)(v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY)); |
5126 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_west_east * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16; | 5126 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_west_east * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16; |
5127 v74 = v77 + pSkyPolygon.ptr_38->angle_from_north; | 5127 v74 = v77 + pSkyPolygon.ptr_38->angle_from_north; |
5128 | 5128 |
5129 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_north_south * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16; | 5129 v77 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_north_south * (signed __int64)(v72 * (v70 - array_507D30[_507D30_idx].vWorldViewProjY))) >> 16; |
5130 v75 = (RenderVertexSoft *)(v77 + pSkyPolygon.ptr_38->angle_from_east); | 5130 v74_ = v77 + pSkyPolygon.ptr_38->angle_from_east; |
5131 | 5131 |
5132 v79 = (void *)(((unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY))) >> 16); | 5132 v79 = (void *)(((unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)v72 * (v70 - (int)array_507D30[_507D30_idx].vWorldViewProjY))) >> 16); |
5133 v17 = v72 * (pBLVRenderParams->uViewportCenterX - (int)array_507D30[_507D30_idx].vWorldViewProjX); | 5133 v17 = v72 * (pBLVRenderParams->uViewportCenterX - (int)array_507D30[_507D30_idx].vWorldViewProjX); |
5134 v18 = array_507D30[_507D30_idx].vWorldViewProjY - 1.0; | 5134 v18 = array_507D30[_507D30_idx].vWorldViewProjY - 1.0; |
5135 v19 = -pSkyPolygon.field_24; | 5135 v19 = -pSkyPolygon.field_24; |
5141 { | 5141 { |
5142 v79 = v20; | 5142 v79 = v20; |
5143 if ( !X ) | 5143 if ( !X ) |
5144 goto LABEL_14; | 5144 goto LABEL_14; |
5145 v21 = abs(v19 >> 14); | 5145 v21 = abs(v19 >> 14); |
5146 if ( v21 <= abs(X) ) | 5146 if ( v21 <= abs(X) )//0x800 <= 0x28652 |
5147 break; | 5147 break; |
5148 if ( SLODWORD(v76) <= (signed int)pViewport->uViewportTL_Y ) | 5148 if ( SLODWORD(v76) <= (signed int)pViewport->uViewportTL_Y ) |
5149 break; | 5149 break; |
5150 v19 = v77; | 5150 v19 = v77; |
5151 v20 = v79; | 5151 v20 = v79; |
5161 { | 5161 { |
5162 LODWORD(v23) = v77 << 16; | 5162 LODWORD(v23) = v77 << 16; |
5163 HIDWORD(v23) = v77 >> 16;//v23 = 0xfffffe0000000000 | 5163 HIDWORD(v23) = v77 >> 16;//v23 = 0xfffffe0000000000 |
5164 v79 = (void *)(v23 / X);//X = FFFF9014(-28652) | 5164 v79 = (void *)(v23 / X);//X = FFFF9014(-28652) |
5165 v77 = v17; | 5165 v77 = v17; |
5166 LODWORD(v76) = v74 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_west * (signed __int64)v17) >> 16); | 5166 signed __int64 s = v74 + ((pSkyPolygon.ptr_38->angle_from_west * (signed __int64)v17) >> 16);// s = 0xFFFFFFFF FFFF3EE6 |
5167 LODWORD(v80) = v66 + ((signed int)((unsigned __int64)(SLODWORD(v76) * v23 / X) >> 16) >> 4); | 5167 LODWORD(v80) = v66 + ((signed int)((unsigned __int64)(SLODWORD(s) * (v23 / X)) >> 16) >> 4); |
5168 //v24 = (double)SLODWORD(v80) * 0.000015259022; | |
5169 array_507D30[_507D30_idx].u = ((double)SLODWORD(v80) * 0.000015259022) * (1.0 / (double)pSkyPolygon.pTexture->uTextureWidth); | 5168 array_507D30[_507D30_idx].u = ((double)SLODWORD(v80) * 0.000015259022) * (1.0 / (double)pSkyPolygon.pTexture->uTextureWidth); |
5170 | 5169 |
5171 v75 = (RenderVertexSoft *)((char *)v75 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_south * (signed __int64)v17) >> 16)); | 5170 signed __int64 s2 = (signed __int64)(v74_ + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_south * (signed __int64)v17) >> 16)); |
5172 LODWORD(v80) = v63 + ((signed int)((unsigned __int64)((signed int)v75 * v23 / X) >> 16) >> 4); | 5171 LODWORD(v80) = v63 + ((signed int)((unsigned __int64)(SLODWORD(s2) * (v23 / X)) >> 16) >> 4); |
5173 array_507D30[_507D30_idx].v = ((double)SLODWORD(v80) * 0.000015259022) * v68; | 5172 array_507D30[_507D30_idx].v = ((double)SLODWORD(v80) * 0.000015259022) * v68; |
5174 | 5173 |
5175 v77 = (unsigned __int64)(SLODWORD(v76) * v23 / X) >> 16; | 5174 v77 = (unsigned __int64)(SLODWORD(s) * (v23 / X)) >> 16; |
5176 LODWORD(v73) = (unsigned __int64)((signed int)v75 * v23 / X) >> 16; | 5175 LODWORD(v73) = (unsigned __int64)(SLODWORD(s2) * (v23 / X)) >> 16; |
5177 //v14 += 48; | |
5178 v81 = (char *)v81 + 1; | |
5179 //v26 = __OFSUB__((int)v81, pSkyPolygon.uNumVertices); | |
5180 //v25 = (signed int)((char *)v81 - pSkyPolygon.uNumVertices) < 0; | |
5181 array_507D30[_507D30_idx]._rhw = 65536.0 / (double)(signed int)v79; | 5176 array_507D30[_507D30_idx]._rhw = 65536.0 / (double)(signed int)v79; |
5182 _507D30_idx++; | 5177 |
5183 if ( (int)v81 >= pSkyPolygon.uNumVertices ) | 5178 //if ( (int)v81 >= pSkyPolygon.uNumVertices ) |
5184 { | 5179 //{ |
5185 pRenderer->DrawIndoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, | 5180 // pRenderer->DrawIndoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, |
5186 pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); | 5181 // pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); |
5187 return; | 5182 // return; |
5188 } | 5183 //} |
5189 continue; | 5184 continue; |
5190 } | 5185 } |
5191 break; | 5186 break; |
5192 } | 5187 } |
5193 | 5188 if ( _507D30_idx >= pSkyPolygon.uNumVertices ) |
5189 { | |
5190 pRenderer->DrawIndoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, | |
5191 pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); | |
5192 return; | |
5193 } | |
5194 LODWORD(v73) = 0; | 5194 LODWORD(v73) = 0; |
5195 v80 = v76; | 5195 v80 = v76; |
5196 if ( (signed int)pSkyPolygon.uNumVertices > 0 ) | 5196 if ( (signed int)pSkyPolygon.uNumVertices > 0 ) |
5197 { | 5197 { |
5198 v28 = (double)SLODWORD(v76); | 5198 v28 = (double)SLODWORD(v76); |