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.