몇일전.. 안드로이드에서 OpenGL ES의 텍스쳐 맵핑을 살펴보고 실습을 해보면서.. 아무리 해도 텍스쳐가 맵핑되지 않았습니다.. 일단 OpenGL에서 텍스쳐맵핑을 위한 OpenGL의 API의 사용순서에 문제가 있겠거니.. 하며 문제를 파악해 나갔지만.. 도통 모르겠다 싶었구요.. 그러던중.. 문제를 해결.. ㅜㅜ
텍스쳐 맵핑을 하기위한 준비 과정으로 먼저 Bitmap 객체를 하나 생성해야 하는데.. 아래의 코드를 통해 Bitmap 객체를 생성했었습니다.
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.texture);
이 한줄로 비트맵을 포맷에 상관없이 읽을 수 있는 안드로이드의 API에 감탄을 했던것같은데.. 바로 문제는 여기에 있었습니다.. 이 코드를 아래 코드로 변경해야 텍스쳐가 맵핑됩니다.
Bitmap bitmap = null; InputStream is = context.getResources().openRawResource(R.drawable.texture); try { bitmap = BitmapFactory.decodeStream(is); } finally { try { is.close(); is = null; } catch(IOException e) { //. } }
감탄했던 단 한줄의 코드 대신.. 원시 데이터로써 비트맵을 읽어 스트림을 만들고 이 스트림을 통해 비트맵을 만드는 제법 복잡다단한 방법이 바로 옳바른 방법이였습니다.. 아래는 그토록 보고 싶어라 했던 텍스쳐가 맵핑된 화면 결과…
흠…. 답답했던 때가 언제었냐는듯.. 눈이 맑아집니다.. ㅎㅎ 만약 첫번째 방식으로 하여 텍스쳐맵핑이 않되시는 분이 계시다면 두번째 방법으로 접근해 보시기 바랍니다.
안녕하세요..
쓰신 글들을 보다가 궁금한점이 있어 이렇게 댓글로 남깁니다..
특히 OPENGL관련글도 엄청 잘 봤었는데요..
제가 안드로이드에서 OPENGL ES를 이용해서..
큐브8개로 정6면체의 3D의 큰 큐브형태를 구현 하고 싶습니다.
제가 텍스쳐를 입혀서 큐브하나를 그리고 중심점을 기준으로
회전 및 줌 인/아웃 기능은 구현했습니다.
하지만 제가 궁금한점이 여러개를 배치하고
여러개의 중심을 기준으로 회전 줌인/아웃을 하고싶은데 그부분에서 막히는것 같습니다.
제가 2개로 일단 구현해봤을때..
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glPushMatrix();
{
gl.glTranslatef(-0.5f, 0.0f, z); gl.glScalef(0.5f, 0.5f, 0.5f); gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f); //X
gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f); //Y
cube.draw(gl, filter);
}
gl.glPopMatrix();
gl.glPushMatrix();
{
gl.glTranslatef(0.0f, 0.0f, z);
gl.glScalef(0.5f, 0.5f, 0.5f);
gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f); //X
gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f); //Y
cube2.draw(gl, filter);
}
gl.glPopMatrix();
이렇게 했을경우 회전을 시킬경우 cube와 cube2가 동시에 자기 자리에서 돌더군요..
저는 cube와 cube2의 사이의 중심점을 기준으로
커다란 큐브 하나처럼 회전하고 싶습니다..
혹시나 해당 내용에 대해서 조언을 주실수 있으신지 궁금합니다..