Jogl을 Applet에 담는 법
아주 크지 않은 프로그램을 배포하는데에는 아직도 Applet 이 가장 흔하고 손쉬운 방법이다.
오늘의 강좌에서는 jogl을 애플랫에 담는 방법을 설명하려 한다. 가장 간단한 jogl프로그램을 보기로 들어 짧은 코드로 설명할까 한다.
여기 Jogl로 원 하나를 그리는간단한 Applet이 있다. 이 원을 그리는 Jogl을 Applet에 담는 방법을 설명한다. Applet 의 으뜸 프로그램, <JoglApplet> 클래스는 아래와 같다.
- import java.awt.*;
- import java.applet.Applet;
- import net.java.games.jogl.*;
- @SuppressWarnings("serial")
- public class JoglApplet extends Applet {
- static int WIDTH = 300, HEIGHT = 300 ;
-
- public void init() {
- GLCapabilities glc = new GLCapabilities();
- GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(glc);
- // add(canvas, BorderLayout.CENTER);
- add(canvas);
- JoglDisplay listener = new JoglDisplay(WIDTH, HEIGHT );
- canvas.addGLEventListener(listener);
- setSize(WIDTH, HEIGHT);
- canvas.setSize(WIDTH, HEIGHT);
- }
- }
|
Application의 Frame의 생성자 부분에서 하던 일을 Applet 의 init() 함수안에서 수행한다. 즉 Jogl Canvas GLCanvas를 생성하여 (13째줄) 애플랫에 부착한다 (15째줄).
16째줄 listener 객체의 원형 클래스 JoglDisplay는 Application 때와 달리 인수를 받게 정의한다. 이는 GLCanvas 의 크기를 그리기에 사용하는 변수로 전달하기 위해서 그렇게 설계한 것이다. 아래에서 보듯이 이 클래스의 생성자는 정수(int) 인수 둘을 받아 들인다. 이 들 인자는 Applet 의 너비와 높이다. 아래에 GLEventListener의 자식 클래스인 <JoglDisplay>를 나열한다. 짧은 코드임에도 둘을 갈라 놓는 것은 여기에도 init 함수가 있어 혼돈을 일으킬 수도 있기 때문이다. 물론 인수가 있고 없고로 둘은 구별이 되기는 한다.
- import net.java.games.jogl.*;
- public class JoglDisplay implements GLEventListener {
-
- int w, h;
-
- public JoglDisplay(int w1, int h1) {w= w1; h = h1;}
- public void init(GLDrawable gld) {
- GL gl = gld.getGL();
- GLU glu = gld.getGLU();
- gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- gl.glMatrixMode(GL.GL_PROJECTION);
- gl.glLoadIdentity();
- glu.gluOrtho2D(0, w, 0, h);
- }
- public void display(GLDrawable drawable) {
- GL gl = drawable.getGL();
- gl.glClear(GL.GL_COLOR_BUFFER_BIT);
- drawCircle(w/2, h/2, 100.0d , gl);
- }
- public void reshape(GLDrawable gld, int x, int y,
- int width, int height) {
- }
- public void displayChanged(GLDrawable arg0, boolean arg1, boolean arg2) {
- }
-
- protected void drawCircle(double x, double y, double r, GL gl) {
- double del= Math.PI/100;
- gl.glBegin (GL.GL_LINE_LOOP);
- for (int i = 0; i<200; i++)
- gl.glVertex2d(x+r*Math.cos(del*i), x+r*Math.sin(del*i));
- gl.glEnd ();
- }
- }
|
27~33째 줄 까지 Jogl로 원을 그리는 코드이다. 이 프로그램을 컴파일하고 실행시켜보면 아래와 같은 그림을 얻는다.