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