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

BennetD via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Mar 10 04:39:22 PDT 2015


On Monday, 9 March 2015 at 14:25:54 UTC, Michael Robertson 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
>
> 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];
> 			
> 		}

My code roughly matches yours at this point however I get a weird 
bug with only my cube model where the top face and one of the 
side tri's are not rendered. However it seems to work fine with a 
model of a pitcher and a model of a monkey.


More information about the Digitalmars-d-learn mailing list