Hallo Leute!
Das ist mein erster Beitrag also erstmal ein freundliches hallo an alle
Also ich habe folgende Frage:
Ich habe ein Programm gemacht, welches das Mandelbrot-Fraktal auf ein JPanel zeichnet, was auch wunderbar funktioniert. Nur ist das ganze ziemlich langsam und ich wollte das mit JOGL beschleunigen. Zu Testzwecken habe ich zunächst erstmal versucht, ein rotes Rechteck auf das Panel zu zeichnen. Leider sehe ich aber nur die weiße Hintergrundfarbe.
Gedacht ist das ganze so:
Ich leite mir eine eigene Panelklasse von JPanel ab, die den GLEventListener implementiert. Diese abgeleitete Klasse wird dann dem Hauptfenster hinzugefügt.
Hier ist noch der Code:
So das wäre es glaub ich. Etwas auskommentierten Code hab ich entfernt. Also der geht gar nicht in die Methoden init und display rein. Da scheint wohl irgendwas mit dem EventListener noch nicht zu stimmen. In einer Version, in der ich das Rechteck direkt auf dem Frame zeichne ohne das Panel geht alles wunderbar.
Also wenn jemand eine Idee hätte, wäre das super
MfG Der Hausgeist
Das ist mein erster Beitrag also erstmal ein freundliches hallo an alle
Also ich habe folgende Frage:
Ich habe ein Programm gemacht, welches das Mandelbrot-Fraktal auf ein JPanel zeichnet, was auch wunderbar funktioniert. Nur ist das ganze ziemlich langsam und ich wollte das mit JOGL beschleunigen. Zu Testzwecken habe ich zunächst erstmal versucht, ein rotes Rechteck auf das Panel zu zeichnen. Leider sehe ich aber nur die weiße Hintergrundfarbe.
Gedacht ist das ganze so:
Ich leite mir eine eigene Panelklasse von JPanel ab, die den GLEventListener implementiert. Diese abgeleitete Klasse wird dann dem Hauptfenster hinzugefügt.
Hier ist noch der Code:
Code:
//MandelPanel.java
import javax.swing.*;
import java.awt.*;
import javax.media.opengl.*;
import javax.media.opengl.glu.*;
/**
* Konstruktor
*/
public class MandelPanel extends JPanel implements GLEventListener{
static final long serialVersionUID = 2;
private GL gl;
//private GLU glu;
/**
* Initialisiert OpenGL
* @param arg
*/
public void init(GLAutoDrawable arg){
System.out.println("Initialisiere OpenGL...");
gl = arg.getGL();
//glu = new GLU();
gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glOrtho(0, 1024, 0, 768, -10, 10);
gl.glMatrixMode(GL.GL_MODELVIEW);
}
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4){
}
/**
* Wird aufgerufen, wenn die Auflösung geändert wird
*/
public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2){
}
/**
* Methode, in der Gerendert wird
*/
public void display(GLAutoDrawable arg0){
System.out.println("Zeichne...");
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glColor3f(1.0f, 0.0f, 0.0f);
gl.glRectf(0.0f, 0.0f, 500.0f, 500.0f);
}
/**
* Standardkonstruktor
*/
MandelPanel(){
super();
this.setLayout(null);
}
}
Code:
//MandelWindow.java
public class MandelWindow extends JFrame implements ActionListener, WindowListener{
static final long serialVersionUID = 2;
private Container cp = this.getContentPane();
private MandelPanel pGraphic = new MandelPanel();
private GLCapabilities glcaps = new GLCapabilities();
private GLCanvas canvas = new GLCanvas(glcaps);
/**
*Implementierung von WindowListener und ActionListener
*/
public void windowClosing(WindowEvent e){ System.exit(0); }
public void windowClosed(WindowEvent e){ /*Empty*/ }
public void windowDeiconified(WindowEvent e){ /*Empty*/ }
public void windowIconified(WindowEvent e){ /*Empty*/ }
public void windowActivated(WindowEvent e){ /*Empty*/ }
public void windowDeactivated(WindowEvent e){ /*Empty*/ }
public void windowOpened(WindowEvent e){ /*Empty*/ }
public void actionPerformed(ActionEvent e){
}
/**
* Konstruktor
*/
MandelWindow(){
super("Mandelbrot");
this.setLayout(null);
this.setResizable(false);
this.setSize(new Dimension(1152,864));
Init();
}
/**
* Initialisierung aller Komponenten des Fensters
*/
private void Init(){
cp.add(pGraphic);
pGraphic.setBounds(5, 5, 1024, 768);
pGraphic.setBackground(new Color(255,255,255));
cp.add(canvas);
canvas.addGLEventListener(pGraphic);
}
}
Code:
//MandelApplication.java
public class MandelApplication {
/**
* Programmstartpunkt
* @param args
*/
public static void main(String[] args) {
MandelWindow w1 = new MandelWindow();
w1.setVisible(true);
}
}
So das wäre es glaub ich. Etwas auskommentierten Code hab ich entfernt. Also der geht gar nicht in die Methoden init und display rein. Da scheint wohl irgendwas mit dem EventListener noch nicht zu stimmen. In einer Version, in der ich das Rechteck direkt auf dem Frame zeichne ohne das Panel geht alles wunderbar.
Also wenn jemand eine Idee hätte, wäre das super
MfG Der Hausgeist