2016-04-10 34 views
0

私がobjローダーを書いて、次しまっ:enter image description hereCとロードOBJファイルとバグ++とOpenGL

それは黄色のワシですが、あなたが見るように、それは翼にその足から行くいくつかの追加の三角形があります。私は使用されるコード:

{.... 
    glBindBuffer(GL_ARRAY_BUFFER,vbo); 
    glBufferData(GL_ARRAY_BUFFER,sizeof(data),data,GL_STATIC_DRAW); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER,numOfIndices*sizeof(GLuint),indices,GL_STATIC_DRAW); 
} 

void Mesh::draw() 
{ 

    glEnableVertexAttribArray(0); 
    glBindBuffer(GL_ARRAY_BUFFER,vbo); 
    glVertexAttribPointer(
      0,     // attribute 0. No particular reason for 0, but must match the layout in the shader. 
      3,     // size 
      GL_FLOAT,   // type 
      GL_FALSE,   // normalized? 
      0,     // stride 
      (void*)0   // array buffer offset 
     ); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibo); 
    glDrawElements(GL_TRIANGLES,numOfIndices,GL_UNSIGNED_INT,(void*)0 ); 
    glDisableVertexAttribArray(0); 
} 

データ頂点とインデックスの配列である場合は、インデックスの配列です。

データとインデックスをobj形式で取り込んで保存し、3Dエディタで結果ファイルを開くと、eagleはうまく見えます。これらの追加の三角形はありません(データとインデックスの両方がうまくいくことを意味します)。

コードを修正してワシを正常に見せようと時間を費やしましたが、今はアイデアが足りなくなりました。だから、もしあなたが私と一緒にイーグル普通のものを共有する方法を知っていればお願いします。問題は、ここでローダにある([]データから、[]を指数)ローダからのデータの中からなされるOBJモデルenter image description here

+2

レンダリングでエラーが発生していますか?*読み込み中ではありませんか?読み込まれたメッシュデータを見るにはデバッガを使いますが、それは正しいか?もちろん、それを印刷することもできます。 –

+0

私はあなたの意見を見て、私は同じ考えを持っていました。それらをテストするために、データとインデックスをobjに変換し、上記のように3Dエディタで通常のモデルを得ま​​した。ロードがテストされ、うまくいきます –

答えて

0

最後に見つかった溶液の画面であると思う人のため

objでのインデックス作成。書式は1(0ではなく)から始まり、頂点をGL_ARRAY_BUFFERにロードすると、頂点#1は頂点#0になり、インデックス全体がブレークします。

したがって、インデックスのすべての値を1減らしてから、頂点#1を指すインデックスは頂点#0を指し、インデックスは正しくなります。

関連する問題