2011-11-15 15 views
0

DirecXでメッシュを使った作業はたくさんありましたが、OpenGL ESの三角形で起こっていることを頭で覆すことはできません。 私は古いプロジェクトで持っていたボックスのデータだけでなく、ウェブからいくつかのサンプルボックスを使ってみましたが、それらは常に間違っていて、しばしば見えません。AndroidでのOpenGL ESメッシュの問題

例を示します。

-25.0 -25.0 25.0 
25.0 -25.0 25.0 
-25.0 25.0 25.0 
25.0 25.0 25.0 

とインデックス(0から始まる)::私は1つ、それよりも画面の完全に異なるコーナーに直角ポイントだ三角形を取得

2 1 3 

Vertsにして

3 1 2 

私の理解に基づいて、それはshowiであってはならない現在の設定で頂点がCW順に表示されている場合は、三角形を使用します。 これらのvertsで起こっていることに関する手がかり???

ところで、ここに私の描画コードがあります:

gl.glFrontFace(GL10.GL_CCW); 
gl.glEnable(GL10.GL_CULL_FACE); 
gl.glCullFace(GL10.GL_BACK); 

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
//gl.glColor4f(1.0f,0.0f,1.0f,1.0f); 
gl.glDrawElements(GL10.GL_TRIANGLES, indexCount, GL10.GL_UNSIGNED_SHORT, indexBuffer); 
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glDisable(GL10.GL_CULL_FACE); 

編集:

3 1 2は、左上を指してコーナーを描画し、2 1 3は、右上に1つのポインティングを描画しますが、唯一の方最初にリストされたものが描かれます。 これは私がint型のバッファとしての私の短いバッファを初期化するので、それだった

{ 
public void initAndStuff(...) 
{ 
    try{ 
     // 
     ... 
     They get initialized up here... 
     This is also where the external data is fed in (but is erased below) 
     // 

     //////////////////////////////// 
     vertexBuffer.clear(); 
     indexBuffer.clear(); 

     vertexBuffer.put(-25.0f); 
     vertexBuffer.put(-25.0f); 
     vertexBuffer.put(25.0f); 

     vertexBuffer.put(25.0f); 
     vertexBuffer.put(-25.0f); 
     vertexBuffer.put(25.0f); 

     vertexBuffer.put(-25.0f); 
     vertexBuffer.put(25.0f); 
     vertexBuffer.put(25.0f); 

     vertexBuffer.put(25.0f); 
     vertexBuffer.put(25.0f); 
     vertexBuffer.put(25.0f); 


     indexBuffer.put(3); 
     indexBuffer.put(1); // points toward top left 
     indexBuffer.put(2); 
     indexBuffer.put(2); 
     indexBuffer.put(1); // points toward top right 
     indexBuffer.put(3); 


     indexIndex = 6; 
     ////////////////////////////////// 


     // wrap things up 
     vertexBuffer.position(0); 
     indexBuffer.position(0); 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     Toast.makeText(context,"exception in loadfile",Toast.LENGTH_LONG).show(); 
     return false; 
    } 
    return true; 
} 

public final void draw(GL10 gl) 
{ 
    gl.glFrontFace(GL10.GL_CCW); 
    gl.glEnable(GL10.GL_CULL_FACE); 
    gl.glCullFace(GL10.GL_BACK); 

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
    //gl.glColor4f(1.0f,0.0f,1.0f,1.0f); 
    gl.glDrawElements(GL10.GL_TRIANGLES, indexIndex, GL10.GL_UNSIGNED_SHORT, indexBuffer); 
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glDisable(GL10.GL_CULL_FACE); 

} 
} 
+0

'vertexBuffer'と' indexBuffer'にはどのようなデータが入っていますか?もちろん、それを推測することはできますが、正しいデータが含まれ、正しいタイプのものであることを確認することができます。そしてコードの残りの部分もまたインタラクティブになるかもしれません。 –

+0

私は実際にバッファーをチェックしており、正しいデータが記載された順序で含まれています。ここではすべてのコードを書いておきますが、ファイルからデータを読み込むために書いた大規模な手順では紛失するのは非常に簡単です(広範にテストしました)。私は手動でバッファにデータをロードしようとしましたが(別のファイルからではありません)、結果も同様に混乱します。 – user980058

+0

しかし、このケースでは、私が見ることができるコードが妥当であるように、未回答の質問に満足しなければならないかもしれません。問題を再現する最小の例で十分でしょう。 –

答えて

0

...とても奇妙なっています。

+0

私は実際にこれを推測していました初期化コード全体を見たかったのです。たぶん私はそれを言っていたはずです。 –

関連する問題