All pastes #966429 Raw Edit

Stuff

public cpp v1 · immutable
·published 2008-04-01 19:00 UTC
rendered paste body
#include <iostream>#include "CM2MeshFileLoader.h"namespace irr{namespace scene{CM2MeshFileLoader::CM2MeshFileLoader(IrrlichtDevice* device):Device(device){}CM2MeshFileLoader::~CM2MeshFileLoader(){}bool CM2MeshFileLoader::isALoadableFileExtension(const c8* filename)const{	return strstr(filename, ".m2")!=0;}//! creates/loads an animated mesh from the file.//! \return Pointer to the created mesh. Returns 0 if loading failed.//! If you no longer need the mesh, you should call IAnimatedMesh::drop().//! See IUnknown::drop() for more information.IAnimatedMesh* CM2MeshFileLoader::createMesh(io::IReadFile* file){ILogger* logger =Device->getLogger();logger->log("Trying to open file",file->getFileName(),ELL_INFORMATION);file->read(&header,sizeof(ModelHeader)); if (header.version[0] != 4 && header.version[1] != 1 && header.version[2] != 0 && header.version[3] != 0) {     logger->log("Something wrong!",ELL_ERROR);     return 0;     }     else logger->log(L"header okay",ELL_INFORMATION);//Name -> not very important I think, but save it nontheless;file->seek(header.nameOfs);    file->read(&M2MeshName[0],header.nameLength);logger->log("Mesh Name",M2MeshName.c_str(),ELL_INFORMATION);ModelVertex tempM2MVert;file->seek(header.ofsVertices);for(u32 i =0;i<header.nVertices;i++){    file->read(&tempM2MVert,sizeof(ModelVertex));    M2MVertices.push_back(tempM2MVert);}std::cout << "Read "<<M2MVertices.size()<<"/"<<header.nVertices<<" Vertices\n";ModelView tempM2MView;file->seek(header.ofsViews);for(u32 i =0;i<header.nViews;i++){    file->read(&tempM2MView,sizeof(ModelView));    M2MViews.push_back(tempM2MView);}std::cout << "Read "<<M2MViews.size()<<"/"<<header.nViews<<" Views\n";logger->log("Using View 0 for all further operations",ELL_INFORMATION);u16 tempM2Index;file->seek(M2MViews[0].ofsIndex);for(u32 i =0;i<M2MViews[0].nIndex;i++){    file->read(&tempM2Index,sizeof(u16));    M2MIndices.push_back(tempM2Index);}std::cout << "Read "<<M2MIndices.size()<<"/"<<M2MViews[0].nIndex<<" Indices\n";u16 tempM2Triangle;file->seek(M2MViews[0].ofsTris);for(u32 i =0;i<M2MViews[0].nTris;i++){    file->read(&tempM2Triangle,sizeof(u16));    M2MTriangles.push_back(tempM2Triangle);}std::cout << "Read "<<M2MTriangles.size()<<"/"<<M2MViews[0].nTris<<" Triangle Indices\n";//Now, M2MTriangles refers to M2MIndices and not to M2MVertices.//And M2MVertices are not usable like this. Thus we transformfor(u32 i=0;i<M2MVertices.size();i++){    M2Vertices.push_back(video::S3DVertex(M2MVertices[i].pos,M2MVertices[i].normal, video::SColor(255,100,100,100),M2MVertices[i].texcoords));}for(u32 i=0;i<M2MTriangles.size();i++){    M2Indices.push_back(M2MIndices[M2MTriangles[i]]);}	if (Mesh)		Mesh->drop();Mesh=new SMesh();SMeshBuffer* IMB = new SMeshBuffer;IMB->append(M2Vertices.const_pointer(),M2Vertices.size(),M2Indices.const_pointer(),M2Indices.size());//Device->getSceneManager()->getMeshManipulator()->recalculateNormals(IMB,false);IMB->recalculateBoundingBox();Mesh->addMeshBuffer(IMB);//IMesh* tangentMesh = Device->getSceneManager()->getMeshManipulator()->createMeshWithTangents(Mesh);aniMesh= new SAnimatedMesh();aniMesh->addMesh(Mesh);aniMesh->recalculateBoundingBox();return aniMesh;}}}