2011-06-27 18 views
0

私は、3D位置とRGB値の両方を持つファイルから読み込んでいるポイントが大です。私はJava + Android + OpenGL(ES)でこれらをレンダリングしようとしています。OpenGL ES:頂点/カラーバッファ/ポインタ

私は頂点バッファを作成し、カラーバッファ:

private FloatBuffer vertexBuffer, colorBuffer; 

ピン私の頂点をバッファに:私のドロー(GL10のGL)

ByteBuffer vbb = ByteBuffer.allocateDirect(lasVertices.length * 4); 
vbb.order(ByteOrder.nativeOrder()); 
vertexBuffer = vbb.asFloatBuffer(); 
vertexBuffer.put(lasVertices); 
vertexBuffer.position(0); 

とIn:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer); 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
gl.glPointSize(3); 
gl.glDrawArrays(GL10.GL_POINTS, 0, 100); 
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 

画面上に100点の小さなサンプルを描きますが、色はありません。

lasColors[i*3] = array[i].red; 
lasColors[i*3+1] = array[i].green; 
lasColors[i*3+2] = array[i].blue; 

しかし、どのようにレンダリングすることができます一意の値を頂点の位置と歩調を合わせて:私は、次のようなコードを実行している間、私は上記で作成したcolorBufferに色を固定しましたか?

私が位置して何をしたか試してみました:

gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer); 

...しかし、どんな結果を取得できませんでした:

vbb = ByteBuffer.allocateDirect(lasColors.length * 4); 
vbb.order(ByteOrder.nativeOrder()); 
colorBuffer = vbb.asFloatBuffer(); 
colorBuffer.put(lasColors); 
colorBuffer.position(0); 

と私のドロー機能にこれを示します。

ありがとうございました!

答えて

1

頂点配列と一緒にカラー配列を有効にして、それが機能するかどうか試してみてください。

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 
gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer); 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
gl.glPointSize(3); 
gl.glDrawArrays(GL10.GL_POINTS, 0, 100); 
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
+0

私は試してみました(そしてそれも無効にしました)。しかし、幸運はありません:( – RedLeader

+0

ええ、あなたはポイントが現れていると言いましたか?それらはすべて同じ色ですか?そうなら、どのような色ですか? – theisenp

+0

私はちょっと掘りました。 [documentation](http://www.opengl.org/sdk/docs/man/xhtml/glColorPointer.xml)に従ってglEnableClientState()行を含める必要があります。また、RGBA値をただ3つの値を使用すると、過去に[others](http://www.machwerx.com/2009/01/26/glcolorpointer-size-must-be-4/)の問題が発生しました。 – theisenp