Mercurial > mm7
comparison Render.cpp @ 2120:3eab5530cc94
DrawOutdoorSkyD3D fix and cleaned
author | Ritor1 |
---|---|
date | Tue, 24 Dec 2013 22:41:25 +0600 |
parents | 014c672b6d87 |
children | 400f3db2e4e5 |
comparison
equal
deleted
inserted
replaced
2119:014c672b6d87 | 2120:3eab5530cc94 |
---|---|
9085 int v15; // eax@8 | 9085 int v15; // eax@8 |
9086 int v16; // eax@12 | 9086 int v16; // eax@12 |
9087 signed __int64 v17; // qtt@13 | 9087 signed __int64 v17; // qtt@13 |
9088 signed int v18; // ecx@13 | 9088 signed int v18; // ecx@13 |
9089 struct Polygon pSkyPolygon; // [sp+14h] [bp-150h]@1 | 9089 struct Polygon pSkyPolygon; // [sp+14h] [bp-150h]@1 |
9090 //double v26; // [sp+120h] [bp-44h]@4 | |
9091 int v30; // [sp+134h] [bp-30h]@1 | 9090 int v30; // [sp+134h] [bp-30h]@1 |
9092 int v32; // [sp+13Ch] [bp-28h]@6 | 9091 int v32; // [sp+13Ch] [bp-28h]@6 |
9093 int v33; // [sp+140h] [bp-24h]@2 | 9092 int v33; // [sp+140h] [bp-24h]@2 |
9094 signed __int64 v34; // [sp+144h] [bp-20h]@1 | 9093 signed __int64 v34; // [sp+144h] [bp-20h]@1 |
9095 int v35; // [sp+148h] [bp-1Ch]@4 | 9094 int v35; // [sp+148h] [bp-1Ch]@4 |
9096 int v36; // [sp+14Ch] [bp-18h]@2 | 9095 int v36; // [sp+14Ch] [bp-18h]@2 |
9097 int v37; // [sp+154h] [bp-10h]@8 | 9096 int v37; // [sp+154h] [bp-10h]@8 |
9098 int v38; // [sp+158h] [bp-Ch]@1 | 9097 int v38; // [sp+158h] [bp-Ch]@1 |
9099 int v39; // [sp+15Ch] [bp-8h]@4 | 9098 int v39; // [sp+15Ch] [bp-8h]@4 |
9100 int v40; // [sp+160h] [bp-4h]@7 | 9099 |
9101 | 9100 v30 = (signed __int64)((double)(pODMRenderParams->int_fov_rad * pGame->pIndoorCameraD3D->vPartyPos.z) |
9102 v30 = (signed __int64)((double)(pODMRenderParams->int_fov_rad * pGame->pIndoorCameraD3D->vPartyPos.z)//244 | |
9103 / ((double)pODMRenderParams->int_fov_rad + 8192.0) | 9101 / ((double)pODMRenderParams->int_fov_rad + 8192.0) |
9104 + (double)(pViewport->uScreenCenterY)); | 9102 + (double)(pViewport->uScreenCenterY)); |
9105 v34 = cos((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) * 0x2000;//(double)pODMRenderParams->shading_dist_mist, 8192 | 9103 v34 = cos((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) * 0x2000;//(double)pODMRenderParams->shading_dist_mist, 8192 |
9106 v38 = (signed __int64)((double)(pViewport->uScreenCenterY)//247 | 9104 v38 = (signed __int64)((double)(pViewport->uScreenCenterY) |
9107 - (double)pODMRenderParams->int_fov_rad | 9105 - (double)pODMRenderParams->int_fov_rad |
9108 / (v34 + 0.0000001) | 9106 / (v34 + 0.0000001) |
9109 * (sin((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) | 9107 * (sin((double)pGame->pIndoorCameraD3D->sRotationX * 0.0030664064) |
9110 * (double)-0x2000//(double)pODMRenderParams->shading_dist_mist | 9108 * (double)-0x2000//(double)pODMRenderParams->shading_dist_mist |
9111 - (double)pGame->pIndoorCameraD3D->vPartyPos.z)); | 9109 - (double)pGame->pIndoorCameraD3D->vPartyPos.z)); |
9116 if ( pSkyPolygon.pTexture ) | 9114 if ( pSkyPolygon.pTexture ) |
9117 { | 9115 { |
9118 pSkyPolygon.dimming_level = 0; | 9116 pSkyPolygon.dimming_level = 0; |
9119 pSkyPolygon.uNumVertices = 4; | 9117 pSkyPolygon.uNumVertices = 4; |
9120 //centering(центруем)----------------------------------------------------------------- | 9118 //centering(центруем)----------------------------------------------------------------- |
9121 pSkyPolygon.v_18.x = -stru_5C6E00->Sin(pGame->pIndoorCameraD3D->sRotationX + 16);//-3216 | 9119 pSkyPolygon.v_18.x = -stru_5C6E00->Sin(pGame->pIndoorCameraD3D->sRotationX + 16); |
9122 pSkyPolygon.v_18.y = 0; | 9120 pSkyPolygon.v_18.y = 0; |
9123 pSkyPolygon.v_18.z = -stru_5C6E00->Cos(pGame->pIndoorCameraD3D->sRotationX + 16);//-65457 | 9121 pSkyPolygon.v_18.z = -stru_5C6E00->Cos(pGame->pIndoorCameraD3D->sRotationX + 16); |
9124 | 9122 |
9125 //sky wiew position(положение неба на экране)------------------------------------------ | 9123 //sky wiew position(положение неба на экране)------------------------------------------ |
9126 // X | 9124 // X |
9127 // 0._____________________________.3 | 9125 // 0._____________________________.3 |
9128 // |8,8 468,8 | | 9126 // |8,8 468,8 | |
9147 | 9145 |
9148 pSkyPolygon.sTextureDeltaU = 224 * pMiscTimer->uTotalGameTimeElapsed;//7168 | 9146 pSkyPolygon.sTextureDeltaU = 224 * pMiscTimer->uTotalGameTimeElapsed;//7168 |
9149 pSkyPolygon.sTextureDeltaV = 224 * pMiscTimer->uTotalGameTimeElapsed;//7168 | 9147 pSkyPolygon.sTextureDeltaV = 224 * pMiscTimer->uTotalGameTimeElapsed;//7168 |
9150 | 9148 |
9151 pSkyPolygon.field_24 = 0x2000000u;//maybe attributes | 9149 pSkyPolygon.field_24 = 0x2000000u;//maybe attributes |
9152 v33 = 65536 / (signed int)(signed __int64)(((double)(pViewport->uViewportBR_X - pViewport->uViewportTL_X) / 2) / tan(0.6457717418670654) + 0.5);//214 | 9150 v33 = 65536 / (signed int)(signed __int64)(((double)(pViewport->uViewportBR_X - pViewport->uViewportTL_X) / 2) / tan(0.6457717418670654) + 0.5); |
9153 for ( uint i = 0; i < pSkyPolygon.uNumVertices; ++i ) | 9151 for ( uint i = 0; i < pSkyPolygon.uNumVertices; ++i ) |
9154 { | 9152 { |
9155 //rotate skydome(вращение купола неба)-------------------------------------- | 9153 //rotate skydome(вращение купола неба)-------------------------------------- |
9156 // В игре принята своя система измерения углов. Полный угол (180). Значению угла 0 соответствует | 9154 // В игре принята своя система измерения углов. Полный угол (180). Значению угла 0 соответствует |
9157 // направление на север и/или юг (либо на восток и/или запад), значению 65536 еденицам(0х10000) соответствует угол 90. | 9155 // направление на север и/или юг (либо на восток и/или запад), значению 65536 еденицам(0х10000) соответствует угол 90. |
9158 // две переменные хранят данные по углу обзора. field_14 по западу и востоку. field_20 по югу и северу | 9156 // две переменные хранят данные по углу обзора. field_14 по западу и востоку. field_20 по югу и северу |
9159 // от -25080 до 25080 | 9157 // от -25080 до 25080 |
9160 v39 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_west_east * (signed __int64)(v33 * (v30 - floor(array_50AC10[i].vWorldViewProjY + 0.5)))) >> 16;//0 | 9158 v39 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_west_east * (signed __int64)(v33 * (v30 - floor(array_50AC10[i].vWorldViewProjY + 0.5)))) >> 16; |
9161 v35 = v39 + pSkyPolygon.ptr_38->angle_from_north;//-45190 | 9159 v35 = v39 + pSkyPolygon.ptr_38->angle_from_north; |
9162 | 9160 |
9163 v39 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_north_south * (signed __int64)(v33 * (v30 - floor(array_50AC10[i].vWorldViewProjY + 0.f)))) >> 16;//0 | 9161 v39 = (unsigned __int64)(pSkyPolygon.ptr_38->viewing_angle_from_north_south * (signed __int64)(v33 * (v30 - floor(array_50AC10[i].vWorldViewProjY + 0.f)))) >> 16; |
9164 v36 = v39 + pSkyPolygon.ptr_38->angle_from_east;//47464 | 9162 v36 = v39 + pSkyPolygon.ptr_38->angle_from_east; |
9165 | 9163 |
9166 v38 = pSkyPolygon.v_18.z;//-65457 | 9164 v9 = (unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)(v33 * (v30 - floor(array_50AC10[i].vWorldViewProjY + 0.5)))) >> 16; |
9167 v9 = (unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)(v33 * (v30 - floor(array_50AC10[i].vWorldViewProjY + 0.5)))) >> 16;//-50444 | 9165 v10 = pSkyPolygon.v_18.x + v9; |
9168 v10 = pSkyPolygon.v_18.x + v9;//-53660 | |
9169 v39 = pSkyPolygon.v_18.x + v9;//-53660 | |
9170 if ( v10 > 0 ) | 9166 if ( v10 > 0 ) |
9171 { | |
9172 v10 = 0; | 9167 v10 = 0; |
9173 v39 = 0; | 9168 v13 = v33 * (pViewport->uScreenCenterX - (signed __int64)array_50AC10[i].vWorldViewProjX); |
9174 } | 9169 v34 = -pSkyPolygon.field_24; |
9175 v38 = v10;//-53660 | 9170 v32 = (signed __int64)array_50AC10[i].vWorldViewProjY - 1.0; |
9176 v13 = v33 * (pViewport->uScreenCenterX - (signed __int64)array_50AC10[i].vWorldViewProjX);//49220 | 9171 v14 = v33 * (v30 - v32); |
9177 v34 = -pSkyPolygon.field_24;//-33554432 | |
9178 v32 = (signed __int64)array_50AC10[i].vWorldViewProjX - 1.0;//7 | |
9179 v14 = v33 * (v30 - v32);//50718 | |
9180 while ( 1 ) | 9172 while ( 1 ) |
9181 { | 9173 { |
9182 v40 = v14;//50718 | 9174 if ( v10 ) |
9183 if ( !v10 ) | |
9184 goto LABEL_12; | |
9185 v37 = abs((int)v34 >> 14);//2048 | |
9186 v15 = abs(v10);//53660 | |
9187 if ( v37 <= v15 || v32 <= (signed int)pViewport->uViewportTL_Y ) | |
9188 { | 9175 { |
9189 if ( v39 <= 0 ) | 9176 v37 = abs((int)v34 >> 14); |
9190 break; | 9177 v15 = abs(v10); |
9178 if ( v37 <= v15 || v32 <= (signed int)pViewport->uViewportTL_Y ) | |
9179 { | |
9180 if ( v10 <= 0 ) | |
9181 break; | |
9182 } | |
9191 } | 9183 } |
9192 v14 = v40; | |
9193 LABEL_12: | |
9194 v37 = pSkyPolygon.v_18.z; | |
9195 v16 = (unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)v14) >> 16; | 9184 v16 = (unsigned __int64)(pSkyPolygon.v_18.z * (signed __int64)v14) >> 16; |
9196 --v32; | 9185 --v32; |
9197 v14 += v33; | 9186 v14 += v33; |
9198 v10 = pSkyPolygon.v_18.x + v16; | 9187 v10 = pSkyPolygon.v_18.x + v16; |
9199 v39 = pSkyPolygon.v_18.x + v16; | |
9200 v38 = pSkyPolygon.v_18.x + v16; | |
9201 } | 9188 } |
9202 LODWORD(v17) = LODWORD(v34) << 16; | 9189 LODWORD(v17) = LODWORD(v34) << 16; |
9203 HIDWORD(v17) = v34 >> 16;//-2199023255552 | 9190 HIDWORD(v17) = v34 >> 16; |
9204 //v40 = v17 / v38; | 9191 v18 = v17 / v10; |
9205 v18 = v17 / v38;//39869157 | |
9206 if ( v18 < 0 ) | 9192 if ( v18 < 0 ) |
9207 v18 = pODMRenderParams->shading_dist_mist; | 9193 v18 = pODMRenderParams->shading_dist_mist; |
9208 v37 = v35 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_west * (signed __int64)v13) >> 16);//-80838 | 9194 v37 = v35 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_west * (signed __int64)v13) >> 16); |
9209 v35 = 224 * pMiscTimer->uTotalGameTimeElapsed//-4328844 | 9195 v35 = 224 * pMiscTimer->uTotalGameTimeElapsed |
9210 + ((signed int)((unsigned __int64)(v37 * (signed __int64)v18) >> 16) >> 3); | 9196 + ((signed int)((unsigned __int64)(v37 * (signed __int64)v18) >> 16) >> 3); |
9211 array_50AC10[i].u = (double)v35 / ((double)pSkyPolygon.pTexture->uTextureWidth * 65536.0);//-0.12900960 | 9197 array_50AC10[i].u = (double)v35 / ((double)pSkyPolygon.pTexture->uTextureWidth * 65536.0); |
9212 | 9198 |
9213 v36 = v36 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_south * (signed __int64)v13) >> 16);//13524 | 9199 v36 = v36 + ((unsigned __int64)(pSkyPolygon.ptr_38->angle_from_south * (signed __int64)v13) >> 16); |
9214 v35 = 224 * pMiscTimer->uTotalGameTimeElapsed//2846856 | 9200 v35 = 224 * pMiscTimer->uTotalGameTimeElapsed |
9215 + ((signed int)((unsigned __int64)(v36 * (signed __int64)v18) >> 16) >> 3); | 9201 + ((signed int)((unsigned __int64)(v36 * (signed __int64)v18) >> 16) >> 3); |
9216 array_50AC10[i].v = (double)v35 / ((double)pSkyPolygon.pTexture->uTextureHeight * 65536.0);//0.084842920 | 9202 array_50AC10[i].v = (double)v35 / ((double)pSkyPolygon.pTexture->uTextureHeight * 65536.0); |
9217 | 9203 |
9218 array_50AC10[i].vWorldViewPosition.x = (double)0x2000;//pODMRenderParams->shading_dist_mist 8192 | 9204 array_50AC10[i].vWorldViewPosition.x = (double)0x2000;//pODMRenderParams->shading_dist_mist 8192 |
9219 array_50AC10[i]._rhw = 1.0 / (double)(v18 >> 16);//0.0016447369 | 9205 array_50AC10[i]._rhw = 1.0 / (double)(v18 >> 16); |
9220 } | 9206 } |
9221 pRenderer->DrawOutdoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); | 9207 pRenderer->DrawOutdoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); |
9222 array_50AC10[0].vWorldViewProjY = (double)v38; | 9208 array_50AC10[0].vWorldViewProjY = (double)v10; |
9223 array_50AC10[1].vWorldViewProjY = array_50AC10[1].vWorldViewProjY + 30.0; | 9209 array_50AC10[1].vWorldViewProjY = array_50AC10[1].vWorldViewProjY + 30.0; |
9224 array_50AC10[2].vWorldViewProjY = array_50AC10[2].vWorldViewProjY + 30.0; | 9210 array_50AC10[2].vWorldViewProjY = array_50AC10[2].vWorldViewProjY + 30.0; |
9225 array_50AC10[3].vWorldViewProjY = (double)v38; | 9211 array_50AC10[3].vWorldViewProjY = (double)v10; |
9226 pRenderer->DrawOutdoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); | 9212 pRenderer->DrawOutdoorSkyPolygon(pSkyPolygon.uNumVertices, &pSkyPolygon, pBitmaps_LOD->pHardwareTextures[(signed __int16)pSkyPolygon.uTileBitmapID]); |
9227 return; | 9213 return; |
9228 } | 9214 } |
9229 } | 9215 } |
9230 //----- (004226C2) -------------------------------------------------------- | 9216 //----- (004226C2) -------------------------------------------------------- |