2012-04-22 87 views
2

我有一些困難,使用GLM庫使用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文件紋理COORDS在裝入一個OBJ文件將具有相同數量的索引(無重複)vertexs作爲紋理COORDS的那麼「GLMtriangle:結構」將包含vertexs「GLuint tindices [3]」該索引texturecoord陣列「texcoords」。但是我發現的例子沒有與頂點相同數量的紋理座標。

使用上述認識我試圖通過每個GLMtriangle循環和添加索引的紋理COORDS到一個數組把所有紋理COORDS中的數組。給我一個每個頂點的紋理座標。

基於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

,你有沒有使用一個實際考慮[處理網呢?(http://assimp.sourceforge.net/)。 Open Asset將網格正確設置爲三角形,可以上傳和渲染。 – 2012-04-22 10:34:21

+0

我加載來自同一OBJ裝載機的vertexs和指數法,我不得不使用GLM OBJ裝載機分配 – Andrew 2012-04-22 10:41:52

+0

在我看來,'GLMmodel'表示數據相當原始。你不能使用頂點索引來查找tex座標。你需要tex索引('tindices')。 – 2012-04-22 10:51:01

回答

2

你的樣本僞代碼至少看起來聲音。

瘋狂的猜測:你沒有通過適當的值glTexCoordPointer()(或glVertexAttribPointer())。如果鍵入的速度過快,則很容易得到sizetype值錯誤。從你的僞size需要既然你已經使用網狀裝載機爲2

+0

IM幾乎是100%肯定,我的緩衝是好的我只是我vertexs後緩衝他們,你隨時隨地知道,有一個可行的sphere.obj?我使用的講座有一個不同數量的紋理座標到頂點看起來不對。 – Andrew 2012-04-22 14:58:12

+0

這非常好。面向索引到頂點和tex座標和什麼不是數組,甚至可能有三個以上的頂點;那麼你需要三角測量。 – 2012-04-22 19:12:24