Hallo,
nachdem ich jetzt schon den ganzen Tag probiere VBOs zum laufen zu kriegen und JOGL einfach nicht so will wie ich, dachte ich, ich frag mal die Experten
Ich habe ein kleines Java Programm geschrieben indem ich ein einzelnes Dreieck mit den Eckpunkten (0,0,0), (1,0,0) und (1,1,0) über ein VBO zeichnen will.
Innerhalb von init() schreibe ich die 3 Vertices für das Dreieck in einen FloatBuffer und erstelle mir danach mein VBO. In display() möchte ich dann dieses Dreieck zeichnen.
Allerdings sehe ich nur schwarz. Wenn ich das Dreieck ohne VBOs zeichne (auskommentierte Zeilen) füllt es wie gewollt die rechte untere Hälfte meines Fensters.
Irgendwie scheine ich blind zu sein und sehe den Fehler nicht :bahnhof:
nachdem ich jetzt schon den ganzen Tag probiere VBOs zum laufen zu kriegen und JOGL einfach nicht so will wie ich, dachte ich, ich frag mal die Experten
Ich habe ein kleines Java Programm geschrieben indem ich ein einzelnes Dreieck mit den Eckpunkten (0,0,0), (1,0,0) und (1,1,0) über ein VBO zeichnen will.
Java:
import java.awt.BorderLayout;
import java.nio.FloatBuffer;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLJPanel;
import javax.swing.JFrame;
import com.sun.opengl.util.BufferUtil;
public class Main extends JFrame implements GLEventListener {
private GLJPanel glPanel;
private FloatBuffer vertices;
private int[] vertexName;
public Main() {
setSize(500, 500);
setLayout(new BorderLayout());
glPanel = new GLJPanel();
glPanel.addGLEventListener(this);
add(glPanel, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glColor3d(1.0, 0.6, 0.2);
// gl.glBegin(GL.GL_TRIANGLES);
// gl.glVertex3d(0.0, 0.0, 0.0);
// gl.glVertex3d(1.0, 0.0, 0.0);
// gl.glVertex3d(1.0, 1.0, 0.0);
// gl.glEnd();
gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, vertexName[0]);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
gl.glDrawArrays(GL.GL_TRIANGLES, 0, 3);
gl.glFlush();
}
@Override
public void displayChanged(GLAutoDrawable drawable, boolean arg1, boolean arg2) {}
@Override
public void init(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glShadeModel(GL.GL_FLAT);
vertices = BufferUtil.newFloatBuffer(9);
vertices.put(0.0f);
vertices.put(0.0f);
vertices.put(0.0f);
vertices.put(1.0f);
vertices.put(0.0f);
vertices.put(0.0f);
vertices.put(1.0f);
vertices.put(1.0f);
vertices.put(0.0f);
vertexName = new int[1];
gl.glGenBuffersARB(1, vertexName, 0);
gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, vertexName[0]);
gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, 9 * BufferUtil.SIZEOF_FLOAT, vertices,
GL.GL_STATIC_DRAW_ARB);
}
@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
GL gl = drawable.getGL();
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0.0, 1.0, 0.0, 1.0, -0.5, 10.0);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
}
public static void main(String[] args) {
new Main();
}
}
Innerhalb von init() schreibe ich die 3 Vertices für das Dreieck in einen FloatBuffer und erstelle mir danach mein VBO. In display() möchte ich dann dieses Dreieck zeichnen.
Allerdings sehe ich nur schwarz. Wenn ich das Dreieck ohne VBOs zeichne (auskommentierte Zeilen) füllt es wie gewollt die rechte untere Hälfte meines Fensters.
Irgendwie scheine ich blind zu sein und sehe den Fehler nicht :bahnhof:
Zuletzt bearbeitet: