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