/ / JOGL-Anzeigefunktion wurde zweimal aufgerufen - Java, Frame, Jogl

Die JOGL-Anzeigefunktion wurde zweimal aufgerufen - Java, Frame, Jogl

Ich bin sehr neu bei JOGL, daher bitte das Noobness der Frage verzeihen.

Ich versuche, ein Stück Spielzeugcode für die Ausgabe zu schreibenein einzelnes Quadrat mit GLCanvas, das zufällig auf der Leinwand positioniert wird. Die Anzeigefunktion scheint jedoch zweimal aufgerufen zu werden (daher erscheinen zwei Quadrate statt eines). Hier "s der Code. Wo bin ich falsch gegangen?

RandomPoint-Klasse:

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;


public class RandomPoints extends Frame implements GLEventListener{

/**
*
*/
private static final long serialVersionUID = 1L;
public int HEIGHT;
public int WIDTH;
private GLCanvas canvas;
//private Animator animator;
public RandomPoints(){
HEIGHT = 300;
WIDTH = 300;
GLProfile profile = GLProfile.getDefault();
GLCapabilities cap = new GLCapabilities(profile);
canvas = new GLCanvas(cap);
add(canvas, BorderLayout.CENTER);
canvas.addGLEventListener(this);
System.out.println("Probe");
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
//animator.stop();
System.exit(0);
}
});
}

@Override
public void display(GLAutoDrawable arg0) {
//TODO Auto-generated method stub
GL2 gl = arg0.getGL().getGL2();
float red = (float) Math.random();
float blue = (float) Math.random();
float green = (float) Math.random();
int x = (int)(Math.random()*WIDTH);
int y = (int)(Math.random()*HEIGHT);
gl.glColor3f(red, green, blue);
gl.glBegin(GL2.GL_POLYGON);
gl.glVertex2i(x, y);
gl.glVertex2i(x+10, y);
gl.glVertex2i(x+10, y+10);
gl.glVertex2i(x, y+10);
gl.glEnd();
System.out.println(x+" "+y+" "+red+" "+green+" "+blue);



}

@Override
public void dispose(GLAutoDrawable arg0) {
// TODO Auto-generated method stub

}

@Override
public void init(GLAutoDrawable arg0) {
// TODO Auto-generated method stub
GL2 gl = arg0.getGL().getGL2();
gl.glColor3f(0.0f, 0.0f, 0.0f);
gl.glClearColor(1, 1, 1, 0);
gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
//animator = new Animator(canvas);
//animator.start();
}

@Override
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
// TODO Auto-generated method stub
WIDTH = arg3; HEIGHT = arg4;
GL2 gl = arg0.getGL().getGL2();
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0, WIDTH, 0, HEIGHT, -1, 1);
}

}

GLTest-Klasse (Treiber)

public class GLTest {
public static void main(String args[]){
RandomPoints point = new RandomPoints();
point.setSize(300,300);
point.setVisible(true);
}
}

Danke im Voraus!

Antworten:

0 für die Antwort № 1

Ich habe gerade Ihren Code getestet und sehe nur ein Quadrat. Es ist jedoch besser, den Farbpuffer auch in der Methode display () zu löschen Hier. Wenn Sie Ihre Zeichnung wirklich animieren möchten, sollten Sie einen Animator verwenden. Bitte stellen Sie Ihre Fragen zu JOGL auf offizielles Forum Wenn Sie genauere und schnellere Antworten erhalten möchten, kommen nur sehr wenige Betreuer hierher.