2010-12-16 13 views
1

私はJOGL OpenGLの問題がありますが、私はVertex Arraysを使用しようとしていますが、glArrayElementを使用するときはいつでも(注:glDrawElementsはどちらも動作しません)、ポイント0 、0,0。重要なコード。私は、ウィンドウが初期化され、再形状関数が指定されていると仮定しています。JOGL glArrayElement point 0,0,0

... 
public void display(GLDrawable glDrawable) { 
final GL gl = glDrawable.getGL(); 
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 
gl.glLoadIdentity(); 
gl.glTranslatef(0, 0, -6); 
gl.glBegin(GL.GL_TRIANGLES); 
    gl.glColor3f(1.0f, 0.0f, 0.0f); 
    gl.glArrayElement(4); 
    /*gl.glArrayElement(5); // These are what I'm trying to use, but they seem to return the point 0,0,0. 
    gl.glArrayElement(6); 
    gl.glArrayElement(5); 
    gl.glArrayElement(6); 
    gl.glArrayElement(7);*/ 
    //gl.glVertex3f(1, 1, -1); // Replaced with uncommented glArrayElement above. 
    gl.glColor3f(0.0f, 1.0f, 0.0f); 
    gl.glVertex3f(-1, 1, -1); 
    gl.glVertex3f(1, -1, -1); 
    gl.glColor3f(0.0f, 0.0f, 1.0f); 
    gl.glVertex3f(-1, 1, -1); 
    gl.glVertex3f(1, -1, -1); 
    gl.glVertex3f(-1, -1, -1); 
gl.glEnd(); 
} 
... 
protected final static float[] mesh = {1,1,1, -1,1,1, 1,-1,1, -1,-1,1, 

1,1,-1, -1,1,-1, 1,-1,-1, -1,-1,-1}; 
protected static ByteBuffer stdMesh; 
... 
public void init(GLDrawable glDrawable) { 
final GL gl = glDrawable.getGL(); 
gl.glShadeModel(GL.GL_SMOOTH); 
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
gl.glClearDepth(1.0f); 
gl.glEnable(GL.GL_DEPTH_TEST); 
gl.glDepthFunc(GL.GL_LEQUAL); 
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); 
gl.glEnableClientState(GL.GL_VERTEX_ARRAY); 
stdMesh = ByteBuffer.allocateDirect(mesh.length * 4); 
stdMesh.asFloatBuffer().put(mesh); 
gl.glVertexPointer(3, GL.GL_FLOAT, 0, stdMesh); 
} 
... 

他の初期化機能/描画機能がありますか?それとも別の問題ですか? 何か助けていただければ幸いです。

答えて

0

バッファに配列値を正しく挿入する必要があります。あなたがやっているやり方は、新しいFloatBufferを返しますが、結果を保存する代わりに破棄しています。

代わりの

... 
protected static ByteBuffer stdMesh; 
... 
stdMesh = ByteBuffer.allocateDirect(mesh.length * 4); 
stdMesh.asFloatBuffer().put(mesh); 
... 

... 
protected static FloatBuffer stdMesh; 
... 
stdMesh = BufferUtil.newFloatBuffer(mesh.length * 3); 
for (int i = 0; i < mesh.length; i++){ 
    stdMesh.put(mesh[i]); 
} 
stdMesh.flip(); 
... 

を行い、それを使用する前に、バッファにflip()を呼び出すようにしてください。