void L3DS::ReadMesh(const LChunk &parent) { unsigned short count, i; LVector4 p; LMatrix4 m; LVector2 t; p.w = 1.0f; LMesh mesh; mesh.SetName(m_objName); GotoChunk(parent); LChunk chunk = ReadChunk(); while (chunk.end <= parent.end) { switch (chunk.id) { case TRI_VERTEXLIST: count = ReadShort(); mesh.SetVertexArraySize(count); for (i=0; i < count; i++) { p.x = ReadFloat(); p.y = ReadFloat(); p.z = ReadFloat(); mesh.SetVertex(p, i); } break; case TRI_FACEMAPPING: count = ReadShort(); if (mesh.GetVertexCount() == 0) mesh.SetVertexArraySize(count); for (i=0; i < count; i++) { t.x = ReadFloat(); t.y = ReadFloat(); mesh.SetUV(t, i); } break; case TRI_FACELIST: ReadFaceList(chunk, mesh); break; case TRI_MATRIX: m._11 = ReadFloat(); m._12 = ReadFloat(); m._13 = ReadFloat(); m._21 = ReadFloat(); m._22 = ReadFloat(); m._23 = ReadFloat(); m._31 = ReadFloat(); m._32 = ReadFloat(); m._33 = ReadFloat(); m._41 = ReadFloat(); m._42 = ReadFloat(); m._43 = ReadFloat(); m._14 = 0.0f; m._24 = 0.0f; m._34 = 0.0f; m._44 = 1.0f; mesh.SetMatrix(m); break; default: break; } SkipChunk(chunk); if (chunk.end >= parent.end) break; chunk = ReadChunk(); } m_meshes.push_back(mesh); }
void L3DS::ReadMesh(const LChunk &parent) { //ErrorMsg("RND:: Ok, try load mesh...\n"); unsigned short count, i; LVector4 p; LMatrix4 m; LVector2 t; p.w = 1.0f; LMesh mesh; mesh.SetName(m_objName); GotoChunk(parent); LChunk chunk = ReadChunk(); while (chunk.end <= parent.end) { //ErrorMsg("RND:: Ochunk.end <= parent.end\n"); switch (chunk.id) { case TRI_VERTEXLIST: //ErrorMsg("RND:: case TRI_VERTEXLIST\n"); count = ReadShort(); mesh.SetVertexArraySize(count); for (i=0; i < count; i++) { p.x = ReadFloat(); p.y = ReadFloat(); p.z = ReadFloat(); mesh.SetVertex(p, i); } break; case TRI_FACEMAPPING: //ErrorMsg("RND:: case TRI_FACEMAPPING\n"); count = ReadShort(); // printf("RND:: ReadShort"); if (count == 0 ) break; if (mesh.GetVertexCount() == 0) mesh.SetVertexArraySize(count); printf("count: %d",count); for (i=0; i < count; i++) { t.x = ReadFloat(); t.y = ReadFloat(); mesh.SetUV(t, i); // printf("RND:: set: %f %f",t.x,t.y); } break; case TRI_FACELIST: //ErrorMsg("RND:: case TRI_FACELIST\n"); ReadFaceList(chunk, mesh); break; case TRI_MATRIX: //ErrorMsg("RND:: case TRI_MATRIX\n"); m._11 = ReadFloat(); m._12 = ReadFloat(); m._13 = ReadFloat(); m._21 = ReadFloat(); m._22 = ReadFloat(); m._23 = ReadFloat(); m._31 = ReadFloat(); m._32 = ReadFloat(); m._33 = ReadFloat(); m._41 = ReadFloat(); m._42 = ReadFloat(); m._43 = ReadFloat(); m._14 = 0.0f; m._24 = 0.0f; m._34 = 0.0f; m._44 = 1.0f; mesh.SetMatrix(m); break; default: break; } SkipChunk(chunk); if (chunk.end >= parent.end) break; chunk = ReadChunk(); } m_meshes.push_back(mesh); }