スケッチで作成された3DモデルをAndroid用にエクスポートする

私は単純な四角形を描画するためにアンドロイド上のOpenGLを使用して問題があります。 これは私がやったことです。

私はスケッチで単純な長方形を描きました。私は結果を使用してエクスポートしました 3Dモデルのcollada .daeファイル。私はその後、 .dae(xml)ファイルを作成し、配列に入れます。私はネイティブで配列をコピーした フォーマットをフロートバッファーに変換します。私はストライプを使って三角形を描きました モード。結果はほぼ矩形です。三角が欠けている 各表面。

ここにコードの関連部分と結果があります。

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
    }
}

the result is shown here http://imgur.com/a/o3HTP

0

2 答え

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

1
追加された

私はコードが動作している。 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
}
0
追加された