19,464
社区成员
发帖
与我相关
我的任务
分享
void C3DModleManager::CalculateRealCoord(t3DModel &TempModel, CS3dVector pos)
{
float g_max_x = -100000000;
float g_min_x = 100000000;
float g_max_y = -100000000;
float g_min_y = 100000000;
float g_max_z = -1000000000;
float g_min_z = 1000000000;
for (int i=0; i<TempModel.numOfObjects; i++)
{
float max_x = -10000000;
float min_x = 10000000;
float max_y = -10000000;
float min_y = 10000000;
float max_z = -10000000;
float min_z = 10000000;
for (int j=0; j<TempModel.pObject[i].numOfVerts; j++)
{
CVector3Simple EveryVert = TempModel.pObject[i].pVerts[j];
TempModel.pObject[i].pVertsGloabal[j].x = TempModel.pObject[i].pVerts[j].x + (pos.x-TempModel.m_Center.x);
TempModel.pObject[i].pVertsGloabal[j].y = TempModel.pObject[i].pVerts[j].y + (pos.y-TempModel.m_Center.y);
TempModel.pObject[i].pVertsGloabal[j].z = TempModel.pObject[i].pVerts[j].z + (pos.z-TempModel.m_Center.z);
EveryVert.x = TempModel.pObject[i].pVertsGloabal[j].x;
EveryVert.y = TempModel.pObject[i].pVertsGloabal[j].y;
EveryVert.z = TempModel.pObject[i].pVertsGloabal[j].z;
if(EveryVert.x>g_max_x)
g_max_x = EveryVert.x;
if(EveryVert.x<g_min_x)
g_min_x = EveryVert.x;
if(EveryVert.y>g_max_y)
g_max_y = EveryVert.y;
if(EveryVert.y<g_min_y)
g_min_y = EveryVert.y;
if(EveryVert.z>g_max_z)
g_max_z = EveryVert.z;
if(EveryVert.z<g_min_z)
g_min_z = EveryVert.z;
if(EveryVert.x>max_x)
max_x = EveryVert.x;
if(EveryVert.x<min_x)
min_x = EveryVert.x;
if(EveryVert.y>max_y)
max_y = EveryVert.y;
if(EveryVert.y<min_y)
min_y = EveryVert.y;
if(EveryVert.z>max_z)
max_z = EveryVert.z;
if(EveryVert.z<min_z)
min_z = EveryVert.z;
}
TempModel.pObject[i].m_BoundaryGlobal.maxx = max_x+1.0;
TempModel.pObject[i].m_BoundaryGlobal.maxy = max_y+1.0;
TempModel.pObject[i].m_BoundaryGlobal.maxz = max_z+1.0;
TempModel.pObject[i].m_BoundaryGlobal.minx = min_x-1.0;
TempModel.pObject[i].m_BoundaryGlobal.miny = min_y-1.0;
TempModel.pObject[i].m_BoundaryGlobal.minz = min_z-1.0;
}
TempModel.m_BoundaryGlobal.maxx = g_max_x;
TempModel.m_BoundaryGlobal.maxy = g_max_y;
TempModel.m_BoundaryGlobal.maxz = g_max_z;
TempModel.m_BoundaryGlobal.miny = g_min_y;
TempModel.m_BoundaryGlobal.minz = g_min_z;
}
my3DSCene.m_3DModle.CalculateRealCoord(my3DSCene.m_3DModle.m_ModelList[Index], my3DSCene.m_3DModle.m_ModelList[Index].m_Postion);
void C3DModleManager::CalculateScaleCoord(t3DModel &TempModel, int EditAxis, float fScale)
{
for (int i=0; i<TempModel.numOfObjects; i++)
{
for (int j=0; j<TempModel.pObject[i].numOfVerts; j++)
{
switch (EditAxis)
{
case 1:
TempModel.pObject[i].pVerts[j].x = TempModel.pObject[i].pVerts[j].x * fScale;
break;
case 2:
TempModel.pObject[i].pVerts[j].y = TempModel.pObject[i].pVerts[j].y * fScale;
break;
case 3:
TempModel.pObject[i].pVerts[j].z = TempModel.pObject[i].pVerts[j].z * fScale;
break;
case 0:
TempModel.pObject[i].pVerts[j].x = TempModel.pObject[i].pVerts[j].x * fScale;
TempModel.pObject[i].pVerts[j].y = TempModel.pObject[i].pVerts[j].y * fScale;
TempModel.pObject[i].pVerts[j].z = TempModel.pObject[i].pVerts[j].z * fScale;
break;
default:
break;
}
}
}
}