void CModelExporter::ExportMeshVertex(IGameNode* /*pNode*/, IGameMesh* pMesh, IGameMaterial* pMat, size_t uMatID, BOOL bMultiMat) { pMesh->SetUseWeightedNormals(); pMesh->InitializeData(); Tab<FaceEx*> faceTab; CollectMeshFaces(faceTab, pMesh, uMatID, bMultiMat); size_t uFaceCount = faceTab.Count(); size_t uVertexCount = uFaceCount * 3; m_serializer << uVertexCount; BOOL bDiffusemap = GetTextureMap(pMat, ID_DI) == NULL ? FALSE : TRUE; BOOL bNormalmap = GetTextureMap(pMat, ID_BU) == NULL ? FALSE : TRUE; BOOL bSpecularmap = GetTextureMap(pMat, ID_SS) == NULL ? FALSE : TRUE; BOOL bLightmap = GetTextureMap(pMat, ID_AM) == NULL ? FALSE : TRUE; float centerX = 0; float centerY = 0; float centerZ = 0; for(size_t i = 0; i < uFaceCount; ++i) { FaceEx* pFace = faceTab[i]; for(int j = 0; j < 3; ++j) { DWORD mapIndex[3]; Point3 ptUV; int indexUV = pFace->texCoord[j]; int nChannel = 0; if(bDiffusemap || bNormalmap || bSpecularmap) { IGameTextureMap* pMap = GetTextureMap(pMat, ID_DI); nChannel = pMap->GetMapChannel(); } else if(bLightmap) { IGameTextureMap* pMap = GetTextureMap(pMat, ID_AM); nChannel = pMap->GetMapChannel(); } if(pMesh->GetMapFaceIndex(nChannel, pFace->meshFaceIndex, mapIndex)) ptUV = pMesh->GetMapVertex(nChannel, mapIndex[j]); else ptUV = pMesh->GetMapVertex(nChannel, indexUV); int indexPos = pFace->vert[j]; Point3 pos = pMesh->GetVertex(indexPos); m_serializer << pos.x << pos.y << pos.z; m_serializer << ptUV.x << ptUV.y; centerX += pos.x; centerY += pos.y; centerZ += pos.z; } } if (uFaceCount > 0) { centerX /= (uFaceCount * 3); centerY /= (uFaceCount * 3); centerZ /= (uFaceCount * 3); m_serializer << centerX << centerY << centerZ; } }
bool CModelExporter::ExportNode( IGameNode* pNode ) { IGameMesh* pMesh = (IGameMesh*)pNode->GetIGameObject(); IGameMaterial* pRootMat = pNode->GetNodeMaterial(); pMesh->SetUseWeightedNormals(); pMesh->InitializeData(); int uFaceCount = pMesh->GetNumberOfFaces(); for(int i = 0; i < uFaceCount; ++i) { FaceEx* pFace = pMesh->GetFace(i); for(int j = 0; j < 3; ++j) { DWORD mapIndex[3]; Point3 ptUV; int indexUV = pFace->texCoord[j]; IGameTextureMap* pMap = GetTextureMap(pRootMat, ID_DI); int nChannel = pMap->GetMapChannel(); if(pMesh->GetMapFaceIndex(nChannel, pFace->meshFaceIndex, mapIndex)) ptUV = pMesh->GetMapVertex(nChannel, mapIndex[j]); else ptUV = pMesh->GetMapVertex(nChannel, indexUV); int indexPos = pFace->vert[j]; Point3 pos = pMesh->GetVertex(indexPos); } } return true; }