使用GLM加载obj文件

时间:2012-04-22 10:09:31

标签: c++ opengl glsl

我在使用GLM库

从obj文件加载纹理坐标时遇到一些困难

使用OpenGL 3.3

http://www.cs.manchester.ac.uk/ugt/COMP37111/glm/glm.h http://www.cs.manchester.ac.uk/ugt/COMP37111/glm/glm.c

我认为obj文件与纹理坐标具有相同数量的索引(无重复)顶点,然后“GLMtriangle:Struct”将包含索引texturecoord数组的顶点“GLuint tindices [3]” “texcoords”。然而,我发现的例子没有相同数量的纹理坐标到顶点。

使用上述理解,我尝试通过循环遍历每个GLMtriangle并将索引纹理坐标添加到数组中,将所有纹理坐标放入数组中。给我一个每个顶点的纹理坐标。

基于C ++的伪代码。

for (the number of GLMtriangles)

    t= (the GLMtriangle index ) 

    //vertex0
    rawTextCoords[t] = GLMmodel->texcoords [GLMtriangle.tindices[0]];
    rawTextCoords[t+1] = GLMmodel->texcoords [GLMtriangle.tindices[0]+1];
    //vertex1
    rawTextCoords[t+2] = GLMmodel->texcoords [GLMtriangle.tindices[1]];
    rawTextCoords[t+3] = GLMmodel->texcoords [GLMtriangle.tindices[1]+1];
    //vertex2 
    rawTextCoords[t+4] = GLMmodel->texcoords [GLMtriangle.tindices[2]];
    rawTextCoords[t+5] = GLMmodel->texcoords [GLMtriangle.tindices[2]+1];
od

这是我目前的输出。

glm problem

1 个答案:

答案 0 :(得分:2)

您的样本伪代码至少看起来很合理。

狂野猜测:您没有将正确的值传递给glTexCoordPointer()(或glVertexAttribPointer())。如果键入太快,很容易导致sizetype值错误。从您的伪代码size需要为2。