관리 메뉴

지구별에서 - Things Old and New

Jogl에서 MouseEvent 쓰는 법 본문

IT/JOGL(Java OpenGL)

Jogl에서 MouseEvent 쓰는 법

샛솔 2005. 12. 5. 07:21

Jogl에서 MouseEvent 쓰는 법

Jogl에 MouseEvent를 쓰는 법은 여느 Java Applet 이나 Application에서 MouseEvent 를 쓰는 것과 별반 다를 것이 없다.  여기서는 Mouse를 클릭하는 곳에 작은 네고꼴이 옮겨 지는 Applet을 만들어 설명할까한다.  먼저 GLCanvas를 생성하고 GLEventListener의 인터페이스를 부착시키고 하는 따위 기본인프라를 구축하는 JoglApplet 클래스를 작성하는 법은 12째 강좌에서 설명한 바 있다.  12 강좌의 애플랫클라스와 다른 점은 GLEventListener의 자식 클래스를 정의하는데  애플렛윈도우의 사이즈를 인수로 전달하였는데 여기서 그 쓸모가 없으므로 생략한다.  

그 대신 마우스 이벤트와 관련해서 여기서 정의된 (10, 16째줄) canvas를 인자로 전달해야 할 필요가 있다.  간단한 방법은  GLEventListener의 자식클래스 JoglDisplay 에 GLCanvas의 객체변수 하나를 정의하고 거기에 canvas 의 참조를 제 22째 줄 처럼 넘기는 것이다.    

  1. import java.applet.Applet;
  2. import java.awt.*;
  3. import net.java.games.jogl.*;
  4. @SuppressWarnings("serial")
  5. public class JoglApplet extends Applet {
  6.         static int WIDTH = 500,  HEIGHT = 300 ;
  7.         GLCanvas canvas;
  8.         JoglDisplay listener ;
  9.                 
  10.           public void init() {
  11.             GLCapabilities glc = new GLCapabilities();
  12.             canvas = GLDrawableFactory.getFactory().createGLCanvas(glc);
  13.             add(canvas, BorderLayout.CENTER);
  14.             listener = new JoglDisplay();
  15.                 canvas.addGLEventListener(listener);
  16.                 canvas.addMouseListener(listener);
  17.                 listener.glc = canvas;
  18.                 setSize(WIDTH, HEIGHT);
  19.                 canvas.setSize(WIDTH, HEIGHT);
  20.                 }
  21.         }

 아래에 GLEventListener의 자식클래스 JoglDisplay를 정의한 것이다.

 아래의 코드 중에서 54째 줄에서 56째 줄이 Jogl 과  MouseEvent를 통합하기 위해서 불가피하게 변환시키는 코드가 된다.  Jogl 은 자리표의 y의 증가 방향이 아래에서 위로 올라가는 방향이 되는데 MouseEvent 에 마우스 이벤트가 일어난 자리표는 위에서 아래로 가는 방향이 Y 값의 증가방향이 된다.  그래서 이 서로 반대되는 자리표읽기를 융합한 부분이다.  잘 음미해 두기를 권장한다.

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import net.java.games.jogl.*;
  4. public class JoglDisplay
  5. implements GLEventListener, MouseListener
  6. {
  7. int xPosition = 50;
  8. int yPosition = 50;
  9. GLCanvas glc;
  10. public void init(GLDrawable drawable) {
  11. GL gl = drawable.getGL();
  12. GLU glu = drawable.getGLU();
  13. gl.glClearColor(0.0f, 0.0f,0.0f, 0.0f);
  14. gl.glViewport(0, 0, 100, 100);
  15. gl.glMatrixMode(GL.GL_PROJECTION);
  16. gl.glLoadIdentity();
  17. glu.gluOrtho2D(0.0, 100.0, 0.0, 100.0);
  18. }
  19. public void display(GLDrawable drawable) {
  20. GL gl = drawable.getGL();
  21. gl.glClear(GL.GL_COLOR_BUFFER_BIT);
  22. gl.glPointSize(6.0f);
  23. gl.glColor3f(1, 1, 1);
  24. gl.glBegin(GL.GL_POINTS);
  25. gl.glVertex2i(xPosition, yPosition);
  26. gl.glEnd();
  27. }
  28. public void reshape(
  29. GLDrawable drawable,
  30. int x,
  31. int y,
  32. int width,
  33. int height
  34. ) {}
  35. public void displayChanged(
  36. GLDrawable drawable,
  37. boolean modeChanged,
  38. boolean deviceChanged
  39. ) {}
  40. public void mouseClicked(MouseEvent e) {
  41. double x = e.getX();
  42. double y = e.getY();
  43. Component c = e.getComponent();
  44. double width = c.getWidth();
  45. double height = c.getHeight();
  46. xPosition = (int) ((x / width) * 100);
  47. yPosition = ((int) ((y / height) * 100));
  48. yPosition = 100 - yPosition;
  49. glc.repaint();
  50. }
  51. public void mouseEntered(MouseEvent e) {}
  52. public void mouseExited(MouseEvent e) {}
  53. public void mousePressed(MouseEvent e) {}
  54. public void mouseReleased(MouseEvent e) {}
  55. }

 이 코드를 컴파일하고 실행시켜 보기 바란다.  여기를 열면 그 결과를 볼 수 있다. 마우스를 클릭해 보세요  작은 네모꼴이 마우스 클릭한 곳이 따라 온다.

'IT > JOGL(Java OpenGL)' 카테고리의 다른 글

왜 도둑질이 나쁜가?  (4) 2005.12.27
인터넷은 쓰레기인가?  (2) 2005.12.25
Jogl에서 KeyEvent 쓰는 법  (0) 2005.12.06
Jogl을 JApplet 에 담는 법  (0) 2005.12.04
Jogl을 Applet에 담는 법  (0) 2005.12.03
Swing 을 사용하는 Jogl 코드의 해설  (0) 2005.12.02
Jogl 과 Swing  (0) 2005.12.01
JOGL  (0) 2005.12.01
Comments