3 GLEventListener를 구현 한 다음 SceneRenderer 클래스가 있습니다. 내가 버퍼를 만들고 버퍼에 포인터를 저장하고 데이터로 버퍼를 채우는 과정을 이해할 수 있다고 생각한다.JOGL/OpenGL VBO - 버텍스를 렌더링하는 방법은 무엇입니까?
나는 투쟁이 display() 방법입니다. 나는 인터넷에서 발견 된 모든 것들의 거의 모든 조합을 시도해 봤지만 나는 아직도 그릴 수 없다. 누군가 버퍼링 된 데이터로 가득 채워져 지금 무엇을해야하는지 설명해 주시겠습니까?
1. 쉐이더
쉐이더 GPU에서 실행되는 프로그램은 다음과 같습니다
package cz.pscheidl.gui;
import javax.media.opengl.*;
import javax.media.opengl.glu.GLU;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
public class SceneRenderer implements GLEventListener {
private IntBuffer buffers = IntBuffer.allocate(2);
private float[] square = {
-1.0f, -1.0f,
1.0f, -1.0f,
1.0f, 1.0f,
1.0f, 1.0f,
-1.0f, 1.0f,
-1.0f, -1.0f,
};
private float[] colorData = {
255, 0, 0,
255, 255, 0,
0, 255, 0,
0, 255, 0,
0, 0, 255,
255, 0, 0
};
FloatBuffer vertexFB = FloatBuffer.wrap(square);
FloatBuffer colorFB = FloatBuffer.wrap(colorData);
GLU glu = new GLU();
@Override
public void init(GLAutoDrawable glAutoDrawable) {
GL3 gl = glAutoDrawable.getGL().getGL3();
gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glClearDepthf(10.0f);
gl.glClearColor(0.8f, 0.6f, 0.8f, 1.0f);
gl.glDepthFunc(GL2.GL_LEQUAL);
gl.glGenBuffers(2, buffers);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, buffers.get(0));
gl.glBufferData(GL2.GL_ARRAY_BUFFER, 4 * 6 * 2, vertexFB, GL3.GL_STATIC_DRAW);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, buffers.get(1));
gl.glBufferData(GL2.GL_ARRAY_BUFFER, 4 * 6 * 3, colorFB, GL2.GL_STREAM_DRAW);
}
@Override
public void dispose(GLAutoDrawable glAutoDrawable) {
}
@Override
public void display(GLAutoDrawable glAutoDrawable) {
GL3 gl = glAutoDrawable.getGL().getGL3();
gl.glClear(GL3.GL_DEPTH_BUFFER_BIT | GL3.GL_COLOR_BUFFER_BIT);
gl.glBindBuffer(GL3.GL_ARRAY_BUFFER, buffers.get(0));
//After binding the buffer, now WHAT ?
}
@Override
public void reshape(GLAutoDrawable glAutoDrawable, int i, int i2, int i3, int i4) {
GL3 gl = glAutoDrawable.getGL().getGL3();
glu.gluPerspective(80.0f, 1920.0f/1080.0f, 0.1f, 100f);
}
}
다음과 같은 몇 가지 일반적인 설명이 필요하다고 생각합니다. 바인딩은 다음 번에 그릴 때 사용할 객체를 OpenGL에 알려주고 OpenGL에 실제로 그려야한다고 말한 다음 OpenGL에서 드로잉을 완료하고 프레임을 표시 할 때까지 기다려야합니다. 화면에. 바인딩이 덮여있다면 http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml을 사용하여 그릴 수 있으며 마무리 방법을 보려면 몇 가지 기본 JOGL 자습서를 찾아야합니다. 라는 swapBuffers 또는 뭔가) 프레임을 그리기. –