관리 메뉴

지구별에서 - Things Old and New

Jogl을 Applet에 담는 법 본문

IT/JOGL(Java OpenGL)

Jogl을 Applet에 담는 법

샛솔 2005. 12. 3. 03:13
 

Jogl을 Applet에 담는 법

아주 크지 않은 프로그램을 배포하는데에는 아직도 Applet 이 가장 흔하고 손쉬운 방법이다.

오늘의 강좌에서는 jogl을 애플랫에 담는 방법을 설명하려 한다.  가장 간단한 jogl프로그램을 보기로 들어 짧은 코드로  설명할까 한다.

여기 Jogl로 원 하나를 그리는간단한 Applet이 있다.  이 원을 그리는 Jogl을 Applet에 담는 방법을 설명한다.  Applet 의 으뜸 프로그램,  <JoglApplet> 클래스는 아래와 같다.

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

 Application의 Frame의 생성자 부분에서 하던 일을 Applet 의 init() 함수안에서 수행한다.  즉 Jogl Canvas GLCanvas를 생성하여 (13째줄) 애플랫에 부착한다 (15째줄).

16째줄 listener 객체의 원형 클래스 JoglDisplay는 Application 때와 달리 인수를 받게 정의한다. 이는 GLCanvas 의 크기를 그리기에 사용하는 변수로 전달하기 위해서 그렇게 설계한 것이다. 아래에서 보듯이 이 클래스의 생성자는  정수(int) 인수 둘을 받아 들인다. 이 들 인자는 Applet 의 너비와 높이다. 아래에 GLEventListener의 자식 클래스인 <JoglDisplay>를 나열한다.  짧은 코드임에도 둘을 갈라 놓는 것은 여기에도 init 함수가 있어 혼돈을 일으킬 수도 있기 때문이다. 물론 인수가 있고 없고로 둘은 구별이 되기는 한다.

  1. import net.java.games.jogl.*;
  2. public class JoglDisplay implements GLEventListener  {
  3.         
  4.         int w, h;
  5.         
  6.         public JoglDisplay(int w1, int h1) {w= w1; h = h1;}
  7.         public void init(GLDrawable gld) {
  8.                 GL gl = gld.getGL();
  9.                 GLU glu = gld.getGLU();
  10.                 gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  11.                 gl.glMatrixMode(GL.GL_PROJECTION);
  12.                 gl.glLoadIdentity();
  13.                 glu.gluOrtho2D(0, w, 0, h);
  14.         }
  15.         public void display(GLDrawable drawable) {
  16.                 GL gl = drawable.getGL();
  17.                 gl.glClear(GL.GL_COLOR_BUFFER_BIT);
  18.         drawCircle(w/2, h/2, 100.0d , gl);
  19.                         }
  20.                 public void reshape(GLDrawable gld, int x, int y,
  21.                 int width, int height) {        
  22.                 }
  23.                 public void displayChanged(GLDrawable arg0, boolean arg1, boolean arg2) {
  24.                         }
  25.                 
  26.                 protected void drawCircle(double x, double y, double  r, GL gl) {
  27.                         double del= Math.PI/100;
  28.                         gl.glBegin (GL.GL_LINE_LOOP);
  29.                 for (int i = 0; i<200; i++)
  30.                         gl.glVertex2d(x+r*Math.cos(del*i), x+r*Math.sin(del*i));
  31.                 gl.glEnd ();
  32.             }
  33. }

27~33째 줄 까지 Jogl로 원을 그리는 코드이다.  이 프로그램을 컴파일하고 실행시켜보면 아래와 같은 그림을 얻는다.  

사용자 삽입 이미지

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

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