|
jni-ndk.c는 java <-> c의 통신에 사용될 예정이라 OpenGL소스를 따로 빼내겠습니다.
GLGameRenderer.c
GLGameRenderer.h
두 파일을 만들고 jni폴더에 넣습니다.
jni-ndk.c
#include <jni.h> /** * Created by berabue on 12. 2. 23.. * berabue@gmail.com */ void Java_pe_berabue_opengl_GLView_nativeCreated(JNIEnv* env) { onSurfaceCreate(); } void Java_pe_berabue_opengl_GLView_nativeChanged(JNIEnv* env, jobject thiz, jint w, jint h) { onSurfaceChanged(w, h); } void Java_pe_berabue_opengl_GLView_nativeUpdateGame(JNIEnv* env) { updateGameLoop(); } void Java_pe_berabue_opengl_GLView_nativeOnTouchEvent(JNIEnv* env, jobject thiz, jint x, jint y, jint touchFlag) { onTouchEvent(x, y, touchFlag); }기존의 소스에서 OpenGL관련 헤더파일 두개와 색상과 관련되었던 소르를 제거하고
onSurfaceCreate, onSurfaceChanged, updateGameLoop, onTouchEvent 함수를 적어놓습니다.
GLGameRenderer.c
#include <GLES/gl.h> #include <GLES/glext.h> #include "GLGameRenderer.h" void onSurfaceCreate() { glClearColor(0.4f, 0.4f, 0.4f, 0.4f); } void onSurfaceChanged(int width, int height) { } void updateGameLoop() { glClear(GL_COLOR_BUFFER_BIT); } void onTouchEvent(int x, int y, int touchFlag) { }jni-ndk.c 에서 지웠던 헤더파일을 붙여넣고 함수를 작성해줍니다.
GLGameRenderer.h 파일에 함수원형을 적어주세요. ( 이부분은 앞으로 말하지 않겠습니다. )
onSurfaceChanged() 함수에 소스를 추가시키겠습니다.
void onSurfaceChanged(int width, int height) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrthof(0.0f, 480, 800, 0.0f, 1.0f, -1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glViewport(0, 0, width, height); }glMatrixMode(GL_PROJECTION);
이 명령뒤에 나오는 행렬과 관련된 것은 투영행렬에 영향을 줍니다.
glLoadIdentity();
행렬을 초기화시킵니다.
glOrthof(0.0f, 480, 800, 0.0f, 1.0f, -1.0f);
우리는 2D를 만들것이므로 직교투영으로 화면을 지정합니다. 개발자가 원하는 영역을 지정해줍니다.
glMatrixMode(GL_MODELVIEW);
이 명령뒤에 나오는 행렬과 관련된 것은 모델뷰행렬에 영향을 줍니다.
glLoadIdentity();
초기화.
glViewport(0, 0, width, height);
실제 기기에 보여질 화면영역을 지정해줍니다.
여기서 중요한것은 glOrthof()와 glViewport()인데요.
먼저 glOrthof()에 원하는 작업공간크기를 지정해줍니다.
"나는 480*800 화면을 기준으로 할꺼야." 그러면 위와같이 480, 800을 넣어주시면됩니다.
glViewport()에서는 실제 기기의 해상도를 입력해주면 모든 해상도에서 올바른 자리에 출력되는 이미지를 보실 수 있습니다.
1280*720 단말에서 돌린다면 480*800을 늘려서 1280*720해상도에 맞게 그리고 그보다 작다면 축소시켜서 그려줍니다.
이제 해상도 관련 세팅이 완료되었습니다.
|
'Android > OpenGL' 카테고리의 다른 글
[NDK-OpenGL_04] 쓰레드 생성 (0) | 2012.03.04 |
---|---|
[NDK-OpenGL_03] 텍스쳐 입히기 (5) | 2012.02.27 |
[NDK-OpenGL_01] 프로젝트 준비 (3) | 2012.02.26 |
[ Android OpenGL - 04 ] 기본 소스 정리 (0) | 2011.05.20 |
[ Android OpenGL ] OpenGL 함수 설명 (0) | 2011.04.25 |