views:

948

answers:

0

Hi,

Well Guess I could need some help here. I'm new to JOGL, and I am trying to draw on the 3d canvas perhaps just anything, but the point is to use mouse drag events. Any idea how am I be able to do that?

I try something as below but it did not worked out. And also in the below codes, I do not understand why the display() method is being invoked event before it was being called.

Thanks alot in advance..

package Testing.Drawing;

import java.awt.event.; import java.awt.; import javax.swing.JFrame; import javax.media.opengl.; import javax.media.opengl.glu.; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.*;

public class TestDraw2 extends JFrame implements GLEventListener, KeyListener,MouseListener, MouseMotionListener { private GLCapabilities caps; private GLCanvas canvas; private float rotAngle = 0f; private boolean rotate = false;

public TestDraw2() { super("TestDraw2");

caps = new GLCapabilities();
canvas = new GLCanvas(caps);
canvas.addGLEventListener(this);
canvas.addKeyListener(this);

// canvas.addMouseListener(this); //canvas.addMouseMotionListener(this);

setVisible(true);
//this.getContentPane().add(canvas);

} public void run() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(512, 512); setLocationRelativeTo(null); this.getContentPane().add(canvas); canvas.requestFocusInWindow();

} float mouse_x = 0.0f; float mouse_y = 0.0f;

public static void main(String[] args) { new TestDraw2().run(); } final double PI = Math.PI; final double PI_2 = PI / 2; final double sin(double i) { return Math.sin(i); } final double cos(double i) { return Math.cos(i); }

public void init(GLAutoDrawable drawable) { GL gl = drawable.getGL(); drawable.addKeyListener(this); drawable.addMouseListener(this); drawable.addMouseMotionListener(this); // float values[] = new float[2]; gl.glGetFloatv(GL.GL_LINE_WIDTH_GRANULARITY, values, 0); System.out.println("GL.GL_LINE_WIDTH_GRANULARITY value is " + values[0]); gl.glGetFloatv(GL.GL_LINE_WIDTH_RANGE, values, 0); System.out.println("GL.GL_LINE_WIDTH_RANGE values are " + values[0] + ", " + values[1]); gl.glEnable(GL.GL_LINE_SMOOTH); gl.glEnable(GL.GL_BLEND); gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); gl.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_DONT_CARE); gl.glLineWidth(1.5f); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); }

public void display(GLAutoDrawable drawable) { //draw(drawable); /*GL gl = drawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glColor3f(0.0f, 1.0f, 0.0f); gl.glPushMatrix(); gl.glRotatef(-rotAngle, 0.0f, 0.0f, 0.1f); gl.glBegin(GL.GL_LINES); gl.glVertex2f(-0.5f, 0.5f); gl.glVertex2f(0.5f, -0.5f); gl.glEnd(); gl.glPopMatrix(); gl.glColor3f(0.0f, 0.0f, 1.0f); gl.glPushMatrix(); gl.glRotatef(rotAngle, 0.0f, 0.0f, 0.1f); gl.glBegin(GL.GL_LINES); gl.glVertex2f(0.5f, 0.5f); gl.glVertex2f(-0.5f, -0.5f); gl.glEnd(); gl.glPopMatrix(); gl.glFlush(); if (rotate) rotAngle += 1f; if (rotAngle >= 360f) rotAngle = 0f;*/

 GL gl = drawable.getGL();

    //gl.glClear(GL.GL_COLOR_BUFFER_BIT);
    gl.glColor3f(0.0f, 1.0f, 0.0f);
    gl.glPushMatrix();
    //gl.glRotatef(-rotAngle, 0.0f, 0.0f, 0.1f)
    gl.glTranslatef(mouse_x, mouse_y,0.1f);
   // gl.glRasterPos2f(mouse_x, mouse_y);
    //gl.glDrawPixels(gl.GL_CURRENT_RASTER_POSITION);

    gl.glBegin(GL.GL_POINTS);
    System.out.println("start values of x,y are: "+mouse_x+", "+mouse_y);
    gl.glVertex2f(mouse_x, mouse_y);
    //gl.glVertex2f(0.5f, -0.5f);
    gl.glEnd();

    gl.glPopMatrix();
    gl.glFlush();

}

public void draw(){

  canvas.display();

} public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { GL gl = drawable.getGL(); GLU glu = new GLU(); gl.glViewport(0, 0, w, h); gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); if (w <= h) // glu.gluOrtho2D(-1.0, 1.0, -1.0 * (float) h / (float) w, // 1.0 * (float) h / (float) w); else glu.gluOrtho2D(-1.0 * (float) w / (float) h, // 1.0 * (float) w / (float) h, -1.0, 1.0); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); }

public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { }

public void keyTyped(KeyEvent key) { }

public void keyPressed(KeyEvent key) { switch (key.getKeyCode()) { case KeyEvent.VK_ESCAPE: System.exit(0); case KeyEvent.VK_R: rotate = !rotate;

    canvas.display();
  default:
    break;
}

}

public void keyReleased(KeyEvent key) { } ////////////////////////////////////////////////////////////////////// // Mouse events

// Do-nothing methods, but required nonetheless
public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}

public void mouseClicked(MouseEvent e) {
}

// Mouse event called when mouse button is pressed and moved
public void mouseDragged(MouseEvent e) {

 // float x = e.getX();
 // float y = e.getY();

  // Button 1 pressed
  if ((e.getModifiers() & e.BUTTON1_MASK) != 0){
      mouse_x = e.getX();
      mouse_y = e.getY();
      draw();

  }

  /*  if ((e.getModifiers() & e.BUTTON1_MASK) != 0) {
    camera_yaw += angle_sensitivity * (double) (mouse_x - x);
    if (camera_yaw > PI) {
      camera_yaw -= 2.0 * PI;
    } else if (camera_yaw < -PI) {
      camera_yaw += 2.0 * PI;
    }
    camera_pitch += angle_sensitivity * (double) (y - mouse_y);
    if (camera_pitch > PI_2) {
      camera_pitch = PI_2;
    } else if (camera_pitch < -PI_2) {
      camera_pitch = -PI_2;
    }
  }*/

  // Button 2 pressed: change position
  /*if ((e.getModifiers() & e.BUTTON2_MASK) != 0) {
    camera_x += dist_sensitivity * (double) (y - mouse_y)
                * cos (camera_yaw) * cos (camera_pitch);
    camera_y += dist_sensitivity * (double) (y - mouse_y)
                * sin (camera_yaw) * cos (camera_pitch);
    camera_z += dist_sensitivity * (double) (y - mouse_y)
                * sin (camera_pitch);
  }/*

  // Button 3 pressed: rotate scene
 /* if ((e.getModifiers() & e.BUTTON3_MASK) != 0) {
    scene_yaw += angle_sensitivity * (double) (x - mouse_x);
    if (scene_yaw > PI) {
      scene_yaw -= 2.0 * PI;
    } else if (scene_yaw < -PI) {
      scene_yaw += 2.0 * PI;
    }
    scene_pitch += angle_sensitivity * (double) (y - mouse_y);
    if (scene_pitch > PI) {
      scene_pitch -= 2.0 * PI;
    } else if (scene_pitch < -PI) {
      scene_pitch += 2.0 * PI;
    }
  }*/
}

// Passive motion callback to capture mouse movements while buttons
// are not pressed
public void mouseMoved(MouseEvent e) {
  // Update mouse position
//  mouse_x = e.getX();
  //mouse_y = e.getY();
}

}