[ Java JOGL 프로그래밍 ] 기본 라이브러리 설치 및 오류 해결, 기본 초기화 과정 - 1 - Whitmem
[ Java JOGL 프로그래밍 ] 기본 라이브러리 설치 및 오류 해결, 기본 초기화 과정 - 1
Graphic Development
2024-08-17 04:51 게시 faa3ecd06ca44b6775ea

0
0
66
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
자바 언어에서 OpenGL을 사용하기 위해서는 Wrapper 해주는 라이브러리의 사용이 필요하다. 대표적으로 LWJGL 또는 JOGL를 사용해야 하는데, 나는 JOGL을 사용하기로 결정하였다. JOGL 를 내려받기 위해서는 JOGL 개발자 저장소에 방문해야 한다. https://jogamp.org/deployment/archive/ 에 방문하면, 아카이브 파일들을 열람할 수 있는데, 난 최신 버전 2.5.0 버전으로 진행하였다.
이 디렉터리 내부에 fat jar로 내려받아서 한 번에 작업을 진행하였다. fat jar은 모든 라이브러리 jar 데이터 및 구성요소를 꽉 채워놓은 jar 파일로 용량이 큰 파일을 의미한다. 즉 이 파일에는 필요 없는 구성 요소도 모두 포함되어 있기에 프로덕션에서는 필요한 라이브러리만 넣는 것을 권장한다.
이렇게 내려받은 jar 은 프로젝트의 ClassPath에 포함한다.
이제 기존대로 JFrame 을 생성해서 해당 ContentPanel 내에 GLCanvas 객체를 새로 만들어 넣어주면 된다. canvas 내에 GLEventListener 을 추가할 수 있는데, GLEventListener 을 implements 하는 클래스는 다음과 같다.
class GLEvent implements GLEventListener{ @Override public void init(GLAutoDrawable drawable) { } @Override public void dispose(GLAutoDrawable drawable) { } @Override public void display(GLAutoDrawable drawable) { } @Override public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { } }
display 가 렌더링될 때의 콜백 함수인 것으로 보인다. display 는 항상 콜백되는 것은 아니고 그래픽 뷰포트의 변화가 있을때만 다시 렌더링되는 것으로 보인다. 이렇게 만들어진 GLEvent 는 GLCanvas 를 만들고 이 Canvas 에 이벤트로 등록해야 한다.
GLCapabilities capabilities = new GLCapabilities(null); GLCanvas canvas = new GLCanvas(capabilities); canvas.addGLEventListener(new GLEvent());
이렇게 만들어진 canvas 는 JFrame 등에 구성요소로 추가해야한다.
JFrame frame = new JFrame("Example Project"); frame.setSize(500,500); frame.add(canvas); ... 생략
다음 display 렌더 영역에서 GL2 클래스를 가져와 그림을 그리면 된다.
@Override public void display(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); gl.glClearColor(0, 0, 255, 1); gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glColor3f(1.0f, 1.0f, 1.0f); gl.glBegin(GL2.GL_TRIANGLES); gl.glVertex2f(-0.6f, -0.4f); gl.glVertex2f(0.6f, -0.4f); gl.glVertex2f(0.0f, 0.6f); gl.glEnd(); }
직교사영 및 뷰포트 조절
reshape 에서 화면 사이즈가 변경되는 경우 위치 등을 받아올 수 있다.
gl.glOrthogl.glViewport를 사용해서 NDC 로 변환을 위한 투영 클립 범위와 뷰포트 크기를 조절해야한다. glOrtho 에서 입력 받은 left x, right x, top y, bottom y, near, far 값을 최대 클립크기로 NDC로 정규화된다. 이후 뷰포트 영역 공간으로 이동되고 화면상에 렌더링된다. 아직 틀린 부분이 많을 수 있는데 계속 공부하면서 정리를 해 봐야겠다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.