안드로이드 네이티브 관련 질문드립닌다.
글쓴이: lalupo20 / 작성시간: 월, 2021/01/11 - 4:03오후
온리 C++로 겜앱 하나 만들어보려고 하는데
예전에 오픈지엘 라이브러리 만들어둔게 있거든요.
이 라이브러리 소스,, 윈도우에서도 써봤고, 안드로이드 자바로도 만들어서 써봤는데
잘 돌아갔던건데
이거 다시 써보는데 작동을 안하더라구요.
안 그려지는건지 시점때문에 안보이는건지는 잘 모르겠는데
안드로이드 오픈지엘 관련 부분 내부 소스가 변경된건가요?
근데 변경이 되더라도, 기존 어플들 잘 돌아가려면 호환이 되게 바뀌지 않았을까요?
왜 안돌아가는 것일까요...
관련 정보 아시는 분 계시면 답글 좀 부탁드립니다 ㅠㅠ;
의심되는 부분은
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glDepthMask(GL_TRUE);
이부분이랑
glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLfloat ratio = (GLfloat)((GLfloat)width * 1.0f) / ((GLfloat)height * 1.0f); glFrustumf(-ratio, ratio, -1.0f, 1.0f, 1.5f, 1000.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, 0, 200, //eyeXYZ 0.0f, 0.0f, 0.0f, //centerXYZ 0.0f, 1.0f, 0.0f);
이부분에 문제가 있는것 같은데
좀 봐주실 수 있을까요?
void GLObject::draw() { glPushMatrix(); if (_isVisible) { if (transparent()) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glEnable(GL_CULL_FACE); if (mode == GL_TEXTURE_MODE) { glEnable(GL_TEXTURE_2D); } if (gradation()) { glShadeModel(GL_SMOOTH); } else { glShadeModel(GL_FLAT); } glEnableClientState(GL_VERTEX_ARRAY); if (pickMode) glColor4f(colors[0], colors[1], colors[2], colors[3]); if (vertex != NULL) glVertexPointer(3, GL_FLOAT, 0, vertex); glEnableClientState(GL_NORMAL_ARRAY); if (normal != NULL) glNormalPointer(GL_FLOAT, 0, normal); switch (mode) { case GLObject::GL_COLOR_MODE: if (!pickMode) { if (colors != NULL) { glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_FLOAT, 0, colors); } } break; case GLObject::GL_TEXTURE_MODE: glEnableClientState(GL_COLOR_ARRAY); if (!pickMode) { glEnableClientState(GL_COLOR_ARRAY); if (colors != NULL) glColorPointer(4, GL_FLOAT, 0, colors); } glBindTexture(GL_TEXTURE_2D, texture[0]); glEnableClientState(GL_TEXTURE_COORD_ARRAY); if (texCoord != NULL) glTexCoordPointer(2, GL_FLOAT, 0, texCoord); break; } motion(); if (indices != NULL) glDrawElements(GL_TRIANGLE_STRIP, indiceLength, GL_UNSIGNED_SHORT, indices); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); if (transparent()) { glDisable(GL_BLEND); } // if (mode == GL_TEXTURE_MODE) { glDisable(GL_TEXTURE_2D); } glDisable(GL_CULL_FACE); } glPopMatrix(); }
함수 하나 추가 합니다.
Forums:
아 추가로 gluLookAt 함수는 안드로이드 내부에서 지원하지 않아서 인터넷에서 주워왔습니다.
이 부분이 문제일까요?
문제해결
glFrustumf함수와 gluLookAt 함수 문제였습니다.
glFrustumf의 far 값과 gluLookAt함수의 eyeZ 값은 동일하거나 far 값이 더 커야 합니다.
댓글 달기