Mesh MS3DImporter :: LoadObject() {
int loop = 0;
unsigned short numVertices = 0;
unsigned short numTriangles = 0;
unsigned short numGroups = 0;
unsigned short numMaterials = 0;
fread(&numVertices, sizeof(unsigned short), 1, file);
vertices = new MS3D_VERTEX_TYP[numVertices];
for(loop = 0; loop < numVertices; loop++) {
fread(&vertices[loop].flags, sizeof(BYTE), 1, file);
fread(vertices[loop].vertex, sizeof(float), 3, file);
fread(&vertices[loop].boneID, sizeof(char), 1, file);
fread(&vertices[loop].refCount, sizeof(BYTE), 1, file);
}
fread(&numTriangles, sizeof(unsigned short), 1, file);
triangles = new MS3D_TRIANGLE_TYP[numTriangles];
for(loop = 0; loop < numTriangles; loop++) {
fread(&triangles[loop].flags, sizeof(unsigned short), 1, file);
fread(triangles[loop].vertexIndices, sizeof(unsigned short), 3, file);
fread(triangles[loop].vertexNormals[0], sizeof(float), 3, file);
fread(triangles[loop].vertexNormals[1], sizeof(float), 3, file);
fread(triangles[loop].vertexNormals[2], sizeof(float), 3, file);
fread(triangles[loop].u, sizeof(float), 3, file);
fread(triangles[loop].v, sizeof(float), 3, file);
fread(&triangles[loop].smoothingGroup, sizeof(unsigned char), 1, file);
fread(&triangles[loop].groupIndex, sizeof(unsigned char), 1, file);
}
fread(&numGroups, sizeof(unsigned short), 1, file);
groups = new MS3D_GROUP_TYP[numGroups];
for(loop = 0; loop < numGroups; loop++) {
fread(&groups[loop].flags, sizeof(unsigned char), 1, file);
fread(groups[loop].name, sizeof(char), 32, file);
fread(&groups[loop].numTriangles, sizeof(unsigned short), 1, file);
groups[loop].triangleIndices = new unsigned short[groups[loop].numTriangles];
fread(groups[loop].triangleIndices, sizeof(unsigned short),
groups[loop].numTriangles, file);
fread(&groups[loop].materialIndex, sizeof(char), 1, file);
}
fread(&numMaterials, sizeof(unsigned short), 1, file);
materials = new MS3D_MATERIAL_TYP[numMaterials];
for(loop = 0; loop < numMaterials; loop++) {
fread(&materials[loop].name, sizeof(char), 32, file);
fread(&materials[loop].ambient, sizeof(float), 4, file);
fread(&materials[loop].diffuse, sizeof(float), 4, file);
fread(&materials[loop].specular, sizeof(float), 4, file);
fread(&materials[loop].emissive, sizeof(float), 4, file);
fread(&materials[loop].shininess, sizeof(float), 1, file);
fread(&materials[loop].transparency, sizeof(float), 1, file);
fread(&materials[loop].mode, sizeof(char), 1, file);
fread(&materials[loop].texture, sizeof(char), 128, file);
fread(&materials[loop].alphamap, sizeof(char), 128, file);
}
// Insert data to mesh
Mesh NewMesh(pTextureManager); // This is the mesh
FileInfo FInfo; // File info
int i = 0;
int j = 0;
int materialCount = numMaterials;
// First, insert the file data into the FInfo variable
FInfo.Materials = new Material[materialCount];
memset(FInfo.Materials, 0, sizeof(Material) * materialCount);
FInfo.NumOfObjects = numGroups;
FInfo.NumOfMaterials = materialCount;
for(loop = 0; loop < materialCount; loop++) {
if(materialCount > 0)
FInfo.Materials[loop].bHasTexture = true;
else
FInfo.Materials[loop].bHasTexture = false;
strcpy(FInfo.Materials[loop].TexFileName, materials[loop].texture);
FInfo.Materials[loop].TwoSidedMat = false;
FInfo.Materials[loop].UTile = 1;
FInfo.Materials[loop].VTile = 1;
}
for(i = 0; i < FInfo.NumOfObjects; i++) {
SubMesh NewSubMesh(pTextureManager, numVertices, numVertices,
numTriangles, numTriangles, numMaterials);
// Vertices & Faces
int counter = -1;
for(j = 0; j < groups[i].numTriangles; j++) {
int triangleIndex = groups[i].triangleIndices[j];
MS3D_TRIANGLE_TYP tri = triangles[triangleIndex];
for(loop = 0; loop < 3; loop++) {
int index = tri.vertexIndices[loop];
counter++;
NewSubMesh.MeshData.points[counter].x = vertices[index].vertex[0];
NewSubMesh.MeshData.points[counter].y = vertices[index].vertex[1];
NewSubMesh.MeshData.points[counter].z = vertices[index].vertex[2];
NewSubMesh.MeshData.points[counter].u = tri.u[loop];
NewSubMesh.MeshData.points[counter].v = tri.v[loop];
}
NewSubMesh.MeshData.the_faces[j].x = tri.vertexIndices[0];
NewSubMesh.MeshData.the_faces[j].y = tri.vertexIndices[1];
NewSubMesh.MeshData.the_faces[j].z = tri.vertexIndices[2];
NewSubMesh.MeshData.the_faces[j].tx = 0;
NewSubMesh.MeshData.the_faces[j].ty = 0;
NewSubMesh.MeshData.the_faces[j].tz = 0;
NewSubMesh.MeshData.the_faces[j].MatRef = (int)groups[i].materialIndex;
}
NewSubMesh.MeshData.bHasTexture = true;
NewSubMesh.MeshData.bHasTextureIndices = false;
NewSubMesh.MeshData.verts = counter;
NewSubMesh.MeshData.faces = groups[i].numTriangles;
NewSubMesh.MeshData.NumOfTexCoords = counter;
NewSubMesh.MeshData.NumOfTexFaces = 0;
NewSubMesh.FInfo.playerPosition.x = 0.0f;
NewSubMesh.FInfo.playerPosition.y = 0.0f;
NewSubMesh.FInfo.playerPosition.z = 0.0f;
NewSubMesh.FInfo.yOrient = 0.0f;
NewSubMesh.FInfo = FInfo;
NewSubMesh.CreateBoundingBox();
NewMesh.SubMeshList.push_back(NewSubMesh);
}
FInfo.playerPosition.x = 0.0f;
FInfo.playerPosition.y = 0.0f;
FInfo.playerPosition.z = 0.0f;
FInfo.yOrient = 0.0f;
NewMesh.FInfo = FInfo;
return NewMesh;
}
What am I doing wrong?
Thanks,
Etus
Problems with loading a MS3D model
Hi,
I''ve written a MS3D model importer based on NeHe''s tutorial, but I''m having some problems converting the data to my own structures. Here''s my code:
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement