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