Pārlūkot izejas kodu

Fixes primitive assignment. AppMesh::primitives in this case is a purely collada/dts concept and is not indices or faces. Any mesh with more than 2^16 vertices should be split into multiple primitives to avoid indexing across a 16 bit boundary. Mesh division into primitives has not been implemented for assimp yet.

OTHGMars 6 gadi atpakaļ
vecāks
revīzija
71a5f9498b
1 mainītis faili ar 8 papildinājumiem un 9 dzēšanām
  1. 8 9
      Engine/source/ts/assimp/assimpAppMesh.cpp

+ 8 - 9
Engine/source/ts/assimp/assimpAppMesh.cpp

@@ -132,7 +132,7 @@ void AssimpAppMesh::lockMesh(F32 t, const MatrixF& objOffset)
    }
    }
 
 
    U32 numFaces = mMeshData->mNumFaces;
    U32 numFaces = mMeshData->mNumFaces;
-   primitives.reserve(numFaces);
+   //primitives.reserve(numFaces);
 
 
    //Fetch the number of indices
    //Fetch the number of indices
    U32 indicesCount = 0;
    U32 indicesCount = 0;
@@ -143,19 +143,18 @@ void AssimpAppMesh::lockMesh(F32 t, const MatrixF& objOffset)
 
 
    indices.reserve(indicesCount);
    indices.reserve(indicesCount);
 
 
+   // Create TSMesh primitive
+   primitives.increment();
+   TSDrawPrimitive& primitive = primitives.last();
+   primitive.start = 0;
+   primitive.matIndex = (TSDrawPrimitive::Triangles | TSDrawPrimitive::Indexed) | (S32)mMeshData->mMaterialIndex;
+   primitive.numElements = indicesCount;
+
    for ( U32 n = 0; n < mMeshData->mNumFaces; ++n)
    for ( U32 n = 0; n < mMeshData->mNumFaces; ++n)
    {
    {
       const struct aiFace* face = &mMeshData->mFaces[n];
       const struct aiFace* face = &mMeshData->mFaces[n];
       if ( face->mNumIndices == 3 )
       if ( face->mNumIndices == 3 )
       {
       {
-         // Create TSMesh primitive
-         primitives.increment();
-         TSDrawPrimitive& primitive = primitives.last();
-         primitive.start = indices.size();
-         primitive.matIndex = (TSDrawPrimitive::Triangles | TSDrawPrimitive::Indexed) | (S32)mMeshData->mMaterialIndex;
-         //primitive.numElements = face->mNumIndices;//3;
-         primitive.numElements = 3;
-
          if (Con::getBoolVariable("$Assimp::FlipNormals", true))
          if (Con::getBoolVariable("$Assimp::FlipNormals", true))
          {
          {
             U32 indexCount = face->mNumIndices;
             U32 indexCount = face->mNumIndices;