/ / JOGL функцію відображення викликали двічі - java, frame, jogl

Функцію відображення JOGL називають двічі - java, frame, jogl

Я дуже новачок у JOGL, тому прошу пробачити питання про нобізм.

Я намагаюся написати фрагмент коду іграшки для виведенняєдиний квадрат за допомогою GLCanvas, який розташований випадковим чином на полотні. Однак функція відображення, схоже, викликається двічі (а значить, з’являються два квадрати, а не один). Ось код. Де я помилився?

Клас RandomPoint:

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 (водій)

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

Спасибі заздалегідь!

Відповіді:

0 для відповіді № 1

Я тільки що перевірив ваш код, і я бачу лише один квадрат. Однак, було б краще очистити кольоровий буфер в методі display (). Ви також повинні подивитися на моєму прикладі тут. Якщо ви дійсно хочете оживити свій малюнок, вам слід скористатися аніматором. Будь ласка, розмістіть свої запитання щодо JOGL на ньому офіційний форум якщо ви хочете отримати більш точні та швидкі відповіді, оскільки сюди приїжджає лише дуже мало обслуговуючих осіб.