This looks to me like the texture coordinates for each triangle in the model are identical.
Looking at your code I think your vertex buffer is in the format of 40 bytes per vertex, each value is a GLFloat
of two bytes, 3 for position, 3 for normal, 2 for texture coordinates, and 2 for a second set of texture coordinates.
I ran the app, with a breakpoint after it populates the data in the UtilityMesh
object. Looking it a dump of the data in the debugger, there is a definite pattern that repeats every 40 bytes. The first 24 bytes for position and normals vary as expected. The last eight bytes are always 0, which I think correspond to the unused second set of texture coordinates. The problem is that the eight bytes corresponding to the primary texture coordinates cycles through three values.
00000000 00000000
0000003d 0000803d
00000000 0000803d
So I think your program is just fine, it's just getting bad data. Check your conversion process.