Derelict Assimp not loading mesh properly? (Maybe index buffer)

Bennet via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Mar 7 13:19:45 PST 2015


On Saturday, 7 March 2015 at 13:11:22 UTC, Rene Zwanenburg wrote:
> On Friday, 6 March 2015 at 02:41:19 UTC, Bennet wrote:
>> I wrote a custom OBJ file importer which worked fairly well 
>> however was not robust enough to support everything. I've 
>> decided to give AssImp a shot. I followed some tutorials and 
>> have set up my code to read in the vertices, tex coords, 
>> normals, and indices of an OBJ cube model that I have had 
>> success loading with my custom importer. The cube model's 
>> faces do not render properly, instead only rendering a few 
>> tri's of the cube. The way AssImp handles the data is 
>> obviously a bit different than my solution because the 
>> normals, positions/vertices, tex coords, and indices do not 
>> match my custom solution. I would very much appreciate some 
>> insight into why I'm having issues as all of the tutorials 
>> I've found have matched my approach. If a picture of the 
>> faulty rendered cube would be helpful I can work on getting a 
>> screenshot up. Thank you.
>> My Asset importing class is at:
>> http://codebin.org/view/4d2ec4d3
>> The rest of my code is at (Mesh Class is in source/graphics):
>> https://github.com/BennetLeff/PhySim
>
> There are some issues with your loadMesh code:
>
>     numVerts = mesh.mNumFaces * 3;
>
> The number of vertices is independent if the number of faces. 
> What you're calculating here is the number of indices, which is 
> indeed guaranteed to be three times the number of faces since 
> you're asking for triangulation when loading the scene. The 
> number of vertices is simply:
>     mesh.mNumVertices
> And this value should be used as size for the vertex, normal, 
> and texture coordinate arrays.
>
> Then you'll need two separate loops to load the vertices and 
> indices. Loading the vertices is simply looping through all 
> vertex arrays of the source mesh and copying them to your 
> vertex arrays.
>
> To load the indices you need to loop through all faces in the 
> source mesh, and then add the face indices to your index 
> buffer. Something like this:
> foreach(faceIndex; 0 .. mash.mNumFaces)
> {
>   auto face = mesh.mFaces[faceIndex];
>   foreach(i; 0 .. 3)
>     indices[faceIndex*3 + i] = face.mIndices[i];
> }

I've made that edit but I'm getting lots of "nan" in my array of 
vertices, textures coordinates and normals. Here's a screenshot: 
http://imgur.com/lXDxFJM


More information about the Digitalmars-d-learn mailing list