bool SGMExporter::GetMeshes(std::vector<Scene3DMesh*> &meshes, BinaryWriter *bw) { // get only mesh nodes std::vector<IGameNode*> meshNodes; for (int i = 0; i < scene ->GetTopLevelNodeCount(); i++) FilterMeshNodes(scene ->GetTopLevelNode(i), meshNodes); SetProgressSteps((int)meshNodes.size()); for (int i = 0; i < (int)meshNodes.size(); i++) { Scene3DMesh *mesh = ConvertMesh(meshNodes[i]); if (mesh != NULL) { GMatrix m = meshNodes[i]->GetWorldTM().Inverse(); mesh->m_worldInverseMatrix.a[0] = m.GetRow(0).x; mesh->m_worldInverseMatrix.a[1] = m.GetRow(0).y; mesh->m_worldInverseMatrix.a[2] = m.GetRow(0).z; mesh->m_worldInverseMatrix.a[3] = m.GetRow(0).w; mesh->m_worldInverseMatrix.a[4] = m.GetRow(1).x; mesh->m_worldInverseMatrix.a[5] = m.GetRow(1).y; mesh->m_worldInverseMatrix.a[6] = m.GetRow(1).z; mesh->m_worldInverseMatrix.a[7] = m.GetRow(1).w; mesh->m_worldInverseMatrix.a[8] = m.GetRow(2).x; mesh->m_worldInverseMatrix.a[9] = m.GetRow(2).y; mesh->m_worldInverseMatrix.a[10] = m.GetRow(2).z; mesh->m_worldInverseMatrix.a[11] = m.GetRow(2).w; mesh->m_worldInverseMatrix.a[12] = m.GetRow(3).x; mesh->m_worldInverseMatrix.a[13] = m.GetRow(3).y; mesh->m_worldInverseMatrix.a[14] = m.GetRow(3).z; mesh->m_worldInverseMatrix.a[15] = m.GetRow(3).w; meshesCount++; GeoSaver::SaveMesh(mesh, *bw); delete mesh; } //meshes.push_back(mesh); StepProgress(); } scene ->ReleaseIGame(); return true; }
void SGMExporter::SaveMatrix(BinaryWriter *bw, const GMatrix &m) { bw->Write(m.GetRow(0).x); bw->Write(m.GetRow(0).y); bw->Write(m.GetRow(0).z); bw->Write(m.GetRow(0).w); bw->Write(m.GetRow(1).x); bw->Write(m.GetRow(1).y); bw->Write(m.GetRow(1).z); bw->Write(m.GetRow(1).w); bw->Write(m.GetRow(2).x); bw->Write(m.GetRow(2).y); bw->Write(m.GetRow(2).z); bw->Write(m.GetRow(2).w); bw->Write(m.GetRow(3).x); bw->Write(m.GetRow(3).y); bw->Write(m.GetRow(3).z); bw->Write(m.GetRow(3).w); }
void SGMExporter::ExportMatrix(const GMatrix &m, BinaryWriter *fh) { fh ->Write(m.GetRow(0).x); fh ->Write(m.GetRow(0).y); fh ->Write(m.GetRow(0).z); fh ->Write(m.GetRow(0).w); fh ->Write(m.GetRow(1).x); fh ->Write(m.GetRow(1).y); fh ->Write(m.GetRow(1).z); fh ->Write(m.GetRow(1).w); fh ->Write(m.GetRow(2).x); fh ->Write(m.GetRow(2).y); fh ->Write(m.GetRow(2).z); fh ->Write(m.GetRow(2).w); fh ->Write(m.GetRow(3).x); fh ->Write(m.GetRow(3).y); fh ->Write(m.GetRow(3).z); fh ->Write(m.GetRow(3).w); }