2011-10-27 9 views
0

Androidでopenglを使用して単純な四角形を描画する際に問題があります。 これは私がやったことです。Androidで使用するためにsketchupで作成した3Dモデルをエクスポートする

私はスケッチで単純な矩形を描きました。 3dモデルのcollada .daeファイルを使用して結果をエクスポートしました。私は .dae(xml)ファイルの頂点データをコピーし、配列に入れました。ネイティブ フォーマットの配列をfloatバッファにコピーしました。私はその後、ストライプ モードを使用して三角形を描きました。結果はほぼ矩形です。各面に の三角形がありません。

コードの関連部分とその結果を示します。

public void draw(GL10 gl) { 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer); 
    // Enable color tracking 
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
    for (int i=0; i<108/4; i=i+4) { 
     myDrawColor(gl,i); 
     gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,i,4);// mode, first, count 
    } 
} 

結果はおそらく、(輸出の障害かもしれない)あなたの頂点リストで間違った順序であなたの頂点を持ってここに http://imgur.com/a/o3HTP

答えて

1

を示しています。これは私が間違った場所に頂点を持っていたとき、私の四肢から得たものです。あなたは、それらを外側から反時計回りに構築したいでしょう。また、三角形のストリップが頂点に問題を引き起こしている可能性もあります。この単純なアプリケーションでは、GL_QUADSを試すことができます。

0

コードが動作しています。 3つの問題がありました。

  1. DrawArraysは、頂点配列を順方向に処理します。すなわち、一度に1つの要素を配列から描画し、次の要素に移動します。あなたはそれを通して前後に飛び越えることはできません。
  2. .xmlファイルのオフセットリストを使用して、glDrawElementsで使用できる配列を作成しました。ここで、頂点リスト内でホッピングします。
  3. オフセットの符号なしを使用する必要があります。私は整数を使っていて、うまく動かなかった。

ここで結果として得られるコードが動作します。問題は私のものでした。 sketchupから生成された.xmlファイルではありません。

public void draw(GL10 gl) { 
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer); 
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorsBuffer); 
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
// Enable color tracking 
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
    gl.glDrawElements(GL10.GL_TRIANGLES, myoffsets.length, GL10.GL_UNSIGNED_SHORT, mIndicesBuffer); // mode, count, type, indices 
}