[NB]problem with keyLister & GLCanvas

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 !

Look at the sources in the jogl-demos workspace (on java.net) for examples of how to make key presses and mouse motion interoperate properly with OpenGL rendering.

ok ! :slight_smile: thx very lot