Mercurial > mm7
diff mm7_1.cpp @ 1293:557c0c3cc314
m
author | Ritor1 |
---|---|
date | Mon, 17 Jun 2013 09:09:03 +0600 |
parents | 24bc24b64ec2 |
children | 6bbd50bda571 |
line wrap: on
line diff
--- a/mm7_1.cpp Fri Jun 14 16:06:30 2013 +0600 +++ b/mm7_1.cpp Mon Jun 17 09:09:03 2013 +0600 @@ -40,6 +40,7 @@ #include "TurnEngine.h" #include "texts.h" #include "UIHouses.h" +#include "mm7_data.h" #include "stru367.h" int __stdcall aWinProc(HWND hWnd, UINT Msg, WPARAM wParam, unsigned int lParam); @@ -1510,7 +1511,7 @@ //signed int v20; // edx@17 //signed int v21; // ebx@19 //signed int v22; // esi@20 - int v23; // edi@21 + //int v23; // edi@21 int v24; // eax@21 //int v25; // eax@22 int v26; // eax@22 @@ -1579,6 +1580,7 @@ //signed int iw; // [sp+24h] [bp-4h]@61 pFace = &pIndoor->pFaces[uFaceID]; + memset(&stru_50B700, 0, sizeof(stru367)); if ( pFace->pFacePlane.vNormal.x * (pIndoor->pVertices[pFace->pVertexIDs[0]].x - pBLVRenderParams->vPartyPos.x)//check the angle of the vector and the plane + pFace->pFacePlane.vNormal.y * (pIndoor->pVertices[pFace->pVertexIDs[0]].y - pBLVRenderParams->vPartyPos.y) @@ -1622,6 +1624,8 @@ //maybe for near clip plane current_vertices_flag = stru_50B700._view_transformed_xs[0] >= (signed int)0x80000u;//координата у первой вершины >= ближней границы + //if (pFace->uNumVertices >= 24 ) + //__debugbreak(); for ( uint i = 1; i <= pFace->uNumVertices; ++i) { next_vertices_flag = stru_50B700._view_transformed_xs[i] >= (signed int)0x80000u;//координата у i-ой вершины >= ближней границы @@ -1629,14 +1633,15 @@ { if ( stru_50B700._view_transformed_xs[i] >= (signed int)0x80000u )//если координата у thisa < ближней границы, a i-ой вершины >= ближней границы { - //t = (near_clip - v0.x)/(v1.x - v0.x) + //t = (near_clip - v0.x)/(v1.x - v0.x) t = (0x80000 - stru_50B700._view_transformed_xs[i - 1]) / (stru_50B700._view_transformed_xs[i] - stru_50B700._view_transformed_xs[i - 1]); //z = (v1.z - v0.z)*t + v0.z - stru_50B700._view_transformed_zs[i] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i] - stru_50B700._view_transformed_zs[i - 1]) + stru_50B700._view_transformed_zs[length_num_vertices] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i] - stru_50B700._view_transformed_zs[i - 1]) * t)) + stru_50B700._view_transformed_zs[i - 1]; //y = (v1.y -v0.y)*(near_clip - v0.x)/(v1.x - v0.x) - stru_50B700._view_transformed_ys[i] = (unsigned __int64)((stru_50B700._view_transformed_ys[i] - stru_50B700._view_transformed_ys[i - 1]) + stru_50B700._view_transformed_ys[length_num_vertices] = (unsigned __int64)((stru_50B700._view_transformed_ys[i] - stru_50B700._view_transformed_ys[i - 1]) * t) + stru_50B700._view_transformed_ys[i]; + stru_50B700._view_transformed_xs[length_num_vertices] = 0x80000u;//z координата новой точки = 8.0 //stru_50B700._view_transformed_ys[i] = stru_50B700.field_38[new_point]; //stru_50B700._view_transformed_zs[i] = stru_50B700.field_128[new_point]; } @@ -1644,40 +1649,39 @@ { t = (0x80000 - stru_50B700._view_transformed_xs[i]) / (stru_50B700._view_transformed_xs[i - 1] - stru_50B700._view_transformed_xs[i]); //z = (v0.z - v1.z)*(near_clip - v1.x)/(v0.x - v1.x) + v1.z - stru_50B700._view_transformed_zs[i] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i - 1] - stru_50B700._view_transformed_zs[i]) + stru_50B700._view_transformed_zs[length_num_vertices + 1] = ((unsigned __int64)((stru_50B700._view_transformed_zs[i - 1] - stru_50B700._view_transformed_zs[i]) * t)) + stru_50B700._view_transformed_zs[i]; //y = (v0.y - v1.y)*(near_clip - v1.x)/(v0.x - v1.x) - stru_50B700._view_transformed_ys[i] = (unsigned __int64)((stru_50B700._view_transformed_ys[i - 1] - stru_50B700._view_transformed_ys[i]) + stru_50B700._view_transformed_ys[length_num_vertices + 1] = (unsigned __int64)((stru_50B700._view_transformed_ys[i - 1] - stru_50B700._view_transformed_ys[i]) * t) + stru_50B700._view_transformed_ys[i]; + stru_50B700._view_transformed_xs[length_num_vertices + 1] = 0x80000u;//z координата новой точки = 8.0 //stru_50B700._view_transformed_ys[i] = stru_50B700.field_38[new_point]; //stru_50B700._view_transformed_zs[i] = stru_50B700.field_128[new_point]; } //stru_50B700.field_218[new_point] //stru_50B700._view_transformed_xs[i] = 0x80000u;//z координата новой точки = 8.0 - stru_50B700._view_transformed_xs[i] = 0x80000u;//z координата новой точки = 8.0 length_num_vertices++; //new_point++; } - /*if ( next_vertices_flag ) + if ( next_vertices_flag ) { //v20 = v79++; - stru_50B700.field_218[length_num_vertices] = stru_50B700._view_transformed_xs[i]; - stru_50B700.field_128[length_num_vertices] = stru_50B700._view_transformed_zs[i]; - stru_50B700.field_38[length_num_vertices] = stru_50B700._view_transformed_ys[i]; + //stru_50B700.field_38[length_num_vertices] = stru_50B700._view_transformed_ys[i]; + //stru_50B700.field_128[length_num_vertices] = stru_50B700._view_transformed_zs[i]; + //stru_50B700.field_218[length_num_vertices] = stru_50B700._view_transformed_xs[i]; length_num_vertices++; - }*/ + } /*else length_num_vertices++; stru_50B700.field_218[0] = stru_50B700._view_transformed_xs[i]; stru_50B700.field_128[0] = stru_50B700._view_transformed_zs[i]; stru_50B700.field_38[0] = stru_50B700._view_transformed_ys[i];*/ current_vertices_flag = next_vertices_flag;//i-ная передвигается вправо - length_num_vertices++; } //v21 = v79; - /*stru_50B700.field_218[length_num_vertices] = stru_50B700.field_218[0];//новые точки пересечения(t1, t2) по х - stru_50B700.field_128[length_num_vertices] = stru_50B700.field_128[0]; - stru_50B700.field_38[length_num_vertices] = stru_50B700.field_38[0];*/ + //stru_50B700.field_218[length_num_vertices] = stru_50B700.field_218[0];//новые точки пересечения(t1, t2) по х + //stru_50B700.field_128[length_num_vertices] = stru_50B700.field_128[0]; + //stru_50B700.field_38[length_num_vertices] = stru_50B700.field_38[0]; //maybe for far clip plane for ( uint i = 0; i < length_num_vertices; ++i ) @@ -1687,24 +1691,24 @@ //LODWORD(v28) = stru_50B700.field_128[i] << 16; //HIDWORD(v28) = stru_50B700.field_128[i] >> 16; v26 = stru_50B700._view_transformed_zs[i] / stru_50B700._view_transformed_xs[i]; - v23 = 0; + //v23 = 0; } else { - v23 = 0; + //v23 = 0; v24 = 0; if ( stru_50B700._view_transformed_zs[i] >= 0 ) { LOBYTE(v24) = stru_50B700._view_transformed_xs[i] >= 0; - v26 = ((v24 - 1) & 0xFF800000) + 0x400000; + v26 = ((v24 - 1) & 0xFF800000) + 0x400000;//((v24 - 1) & -127) + 64.0 } else { LOBYTE(v24) = stru_50B700._view_transformed_xs[i] >= 0; - v26 = ((v24 - 1) & 0x800000) - 0x400000; + v26 = ((v24 - 1) & 0x800000) - 0x400000;//((v24 - 1) & 128) - 64.0 } } - stru_50B700._xs3[i] = v26;//дальняя координата вершины от камеры + stru_50B700._xs3[i] = v26;//дальняя координата z вершины от камеры if ( abs(stru_50B700._view_transformed_ys[i]) <= abs(stru_50B700._view_transformed_xs[i]) ) { //LODWORD(v34) = stru_50B700.field_38[i] << 16; @@ -1714,22 +1718,23 @@ else { v30 = 0; - if ( stru_50B700._view_transformed_ys[i] >= v23 ) + if ( stru_50B700._view_transformed_ys[i] >= 0 ) { - LOBYTE(v30) = stru_50B700._view_transformed_xs[i] >= v23; + LOBYTE(v30) = stru_50B700._view_transformed_xs[i] >= 0; v32 = ((v30 - 1) & 0xFF800000) + 0x400000; } else { - LOBYTE(v30) = stru_50B700._view_transformed_xs[i] >= v23; + LOBYTE(v30) = stru_50B700._view_transformed_xs[i] >= 0; v32 = ((v30 - 1) & 0x800000) - 0x400000; } } - stru_50B700._ys2[i] = v32; - stru_50B700._xs3[i] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)stru_50B700._xs3[i]); - stru_50B700._xs3[i] = pBLVRenderParams->uViewportCenterX - stru_50B700._xs3[i]; - stru_50B700._ys2[i] = pBLVRenderParams->uViewportCenterY - (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) - * (signed __int64)stru_50B700._ys2[i]); + //stru_50B700._ys2[i] = v32; + stru_50B700._xs3[i] = pBLVRenderParams->uViewportCenterX -(unsigned __int64)(SHIWORD(pBLVRenderParams->field_40)//maybe screen space x + * (signed __int64)stru_50B700._xs3[i]); + //stru_50B700._xs3[i] = pBLVRenderParams->uViewportCenterX - stru_50B700._xs3[i]; + stru_50B700._ys2[i] = pBLVRenderParams->uViewportCenterY - (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40)//screen space y + * (signed __int64)v32); } for_x_num_vertices = 0;