Hello
I am NB with OpenGl & Jogl…I have a problems. i have do a classe implement with GLEventListener, KeyListener. In public void keyPressed(KeyEvent arg0) method, I change a attribut but this no change in display(GLDrawable arg0) method but the attribut is global ( public float[] pos ). If I push ‘d’ or ‘q’, this have no effect but another key print “yop”.
My source with problems : >
package TestOpen;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.nio.FloatBuffer;
import net.java.games.jogl.GL;
import net.java.games.jogl.GLDrawable;
import net.java.games.jogl.GLEventListener;
import net.java.games.jogl.GLU;
import net.java.games.jogl.util.BufferUtils;
public class MyGLEventListener implements GLEventListener, KeyListener {
private GL gl;
private GLU glu;
private double angle = 0;
private final double pi = Math.PI;
private float a = 0;
public float[] pos = new float[] { 0f, 0f, 0f, 0f, 0f, -1f, 0f, 1f, 0f };
public void init(GLDrawable arg0) {
gl = arg0.getGL();
glu = arg0.getGLU();
System.out.println("init");
gl = arg0.getGL();
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
}
public void display(GLDrawable arg0) {
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
float b = 0.5f;
FloatBuffer floatBuffer = BufferUtils.newFloatBuffer(3 * 5);
floatBuffer.put(new float[] {
0.25f, 0.25f, 0f,
0.75f, 0.25f, 0f,
0.95f, 0.50f, 0f,
0.75f, 0.75f, 0f,
0.25f, 0.75f, 0f,
});
gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, floatBuffer);
pos[0] = pos[0] + 0.0001f;
gl.glLoadIdentity();
glu.gluLookAt( pos[0], pos[1], pos[2], pos[3], pos[4], pos[5], pos[6], pos[7], pos[8]);
gl.glDrawArrays(GL.GL_POLYGON, 0, 5);
gl.glFlush();
}
public void reshape(GLDrawable arg0,int arg1,int arg2, int arg3,int arg4) {
System.out.println("reshape");
gl.glMatrixMode(GL.GL_MODELVIEW);
}
public void displayChanged(GLDrawable arg0, boolean arg1, boolean arg2) {
System.out.println("displayChanged");
}
public void keyPressed(KeyEvent arg0) {
switch (arg0.getKeyChar()) {
case 'q' : pos[0] = pos[0] + 0.0001f; break;
case 'd' : pos[0] = pos[0] - 0.0001f; break;
default : System.out.println("Yop");
}
}
public void keyReleased(KeyEvent arg0) { }
public void keyTyped(KeyEvent arg0) { }
}
And my main :
package TestOpen;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import net.java.games.jogl.Animator;
import net.java.games.jogl.GLCanvas;
import net.java.games.jogl.GLCapabilities;
import net.java.games.jogl.GLDrawableFactory;
public class MainFrame {
public static void main(String arg[]) {
Frame frame = new Frame();
frame.setSize(400, 300);
//frame.setBackground(Color.white);
GLCanvas canvas =
GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());
final Animator animator = new Animator(canvas);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
animator.stop();
System.exit(0);
}
});
canvas.addGLEventListener(new MyGLEventListener());
canvas.addKeyListener(new MyGLEventListener());
frame.add(canvas);
frame.show();
animator.start();
}
}
thx for all !