Derelict Assimp not loading mesh properly? (Maybe index buffer)
Bennet via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Mar 7 14:01:25 PST 2015
On Saturday, 7 March 2015 at 21:19:47 UTC, Bennet wrote:
> 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
Update: I've gotten the vertices, normals an uvs to load into
arrays properly, now I just can't get the indices loaded. I'm
loading them in the manner you suggested but they only load up to
index 22 when there are 33 vertices. I imagine there should be
indices ranging from 0-33 loaded into the array not 0-22. However
there are 33 indices loaded.
More information about the Digitalmars-d-learn
mailing list