私は OpenGL ES と OpenGL 全般についてかなり新しいと言って、これを前置きさせてください。
私たちの 3D 担当者が zBrush からエクスポートしたモデル オブジェクトがあります。.obj
ファイルには法線がありません。それがこの動作の原因だと思います。obj2openglを使用して.h
、頂点とテクスチャ座標を含むファイルを作成し、それらをインポートしてレンダリングしています。インポートは次のようになります。
glGenBuffers(1, &mushroomVertexBufferID);
glBindBuffer(GL_ARRAY_BUFFER, mushroomVertexBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(mushroom01b_LowVerts), mushroom01b_LowVerts, GL_STATIC_DRAW);
glGenBuffers(1, &mushroomTextureBufferID);
glBindBuffer(GL_ARRAY_BUFFER, mushroomTextureBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(mushroom01b_LowTexCoords), mushroom01b_LowTexCoords, GL_STATIC_DRAW);
オブジェクトを描画するときは、次のコードを使用します。
glBindBuffer(GL_ARRAY_BUFFER, mushroomVertexBufferID);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, NULL);
glBindBuffer(GL_ARRAY_BUFFER, mushroomTextureBufferID);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, NULL);
self.effect.texture2d0.name = _mushroomTextureInfo.name;
self.effect.texture2d0.target = _mushroomTextureInfo.target;
[self.effect prepareToDraw];
glDrawArrays(GL_TRIANGLES, 0, mushroom01b_LowNumVerts);
これは機能し、モデルを Blender で開き、法線を修正し、法線を含む OBJ として再エクスポートした (上記のコードを 3 番目の配列バッファーに追加した) 場合、かなり見栄えがします。しかし、zBrush からエクスポートした OBJ をまったく変更しないと、次のようになります。
これは、 で顔カリングを有効にした状態glEnable(GL_CULL_FACE);
です。有効にしないと、モデルが裏返しにレンダリングされているように見えます。
明らかに、zBrush のエクスポートが何らかの形で台無しになっています。私の質問は、それを修正する方法です。