/ / JOGL डिस्प्ले फंक्शन को दो बार कहा जाता है - जावा, फ्रेम, जॉगल

जॉग डिस्प्ले फ़ंक्शन को दो बार - जावा, फ्रेम, जॉगल कहा जाता है

मैं JOGL के लिए बहुत नया हूं, इसलिए कृपया इस सवाल को क्षमा करें।

मैं आउटपुट के लिए खिलौना कोड का एक टुकड़ा लिखने की कोशिश कर रहा हूंGLCanvas का उपयोग करके एक एकल वर्ग, जो कैनवास पर यादृच्छिक रूप से तैनात है। हालाँकि, प्रदर्शन फ़ंक्शन को दो बार कहा जाता है (और इसलिए दो वर्ग दिखाई देते हैं, एक के बजाय)। यहाँ कोड है। मैं कहाँ गलत हो गया?

रैंडमप्वाइंट क्लास:

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

मैंने केवल आपके कोड का परीक्षण किया है और मुझे केवल एक वर्ग दिखाई देता है। हालाँकि, डिस्प्ले () विधि में रंग बफर को साफ़ करना बेहतर होगा। आपको मेरा उदाहरण देखना चाहिए। यहाँ। यदि आप वास्तव में अपने ड्राइंग को चेतन करना चाहते हैं, तो आपको एक एनिमेटर का उपयोग करना चाहिए। कृपया इसके बजाय JOGL के बारे में अपने प्रश्न पोस्ट करें आधिकारिक मंच यदि आप अधिक सटीक और तेज़ उत्तर प्राप्त करना चाहते हैं, तो केवल कुछ ही अनुचर यहाँ आते हैं।