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

Michael Robertson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Mar 9 07:25:53 PDT 2015


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

Imagine a square mesh made up of two triangles, the un-indexed 
version has 6 vertices, but the indexed version that you would be 
using has 4 vertices because a side is shared by the two 
triangles (which is managed by the index array). This is why you 
can't assume each face has 3 vertices.

I have been trying to learn opengl and D recently together and 
this is the simple code I have been using to load models from 
assimp.

for(int i = 0; i < mesh.mNumVertices; i++)
		{
			aiVector3D vert = mesh.mVertices[i];
			verts ~= vec3(vert.x, vert.y, vert.z);

			aiVector3D uvw = mesh.mTextureCoords[0][i];
			uvs ~= vec2(uvw.x, uvw.y);
		
			aiVector3D n = mesh.mNormals[i];
			normals ~= vec3(n.x, n.y, n.z);
		}

		
		for(int i = 0; i < mesh.mNumFaces; i++)
		{
			const aiFace face = mesh.mFaces[i];
			
			indices ~= face.mIndices[0];
			indices ~= face.mIndices[1];
			indices ~= face.mIndices[2];
			
		}


More information about the Digitalmars-d-learn mailing list