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) --------------------------------------------------------