2010-12-16 5 views
1

저는 OpenGL에서 JOGL 문제가 있습니다. 꼭 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()를 호출해야합니다 마십시오.