블로그 이미지
박공명

카테고리

분류 전체보기 (99)
된장 (7)
Dev (60)
꼐..꼐임 (6)
식탐 (18)
우리 (0)
Etc (8)
개인자료 (0)
Total
Today
Yesterday


얼마전에 Real 3D lib를 사용한 2D 이미지 처리방법을 포스팅 했는데

OpenGL을 공부하느라 3D 이미지 처리방법 포스팅까지 간격이 좀 길었다.

게임 화면부터 공개를 해야할듯 ㅋ ㅋ



뭐 이렇다.

왜 두개냐.. 3D가 원래 이렇다. 양옆이 되던 위아래가 되던 번갈아서 나오던

3D는 양안용 이미지 2개를 모두 가지고 있어야 성립된다.

사실 Real 3D library가 하는일도 이렇게 형식에 마추어 나누어진 화면을

하나로 그리고 양쪽 눈에 맞게 보여주는 역활이다.

열심히 포스팅을 하고있지만 실제 추가되는 처리는 얼마 없다는 것이지.

사실 OpenGL 공부하고 만드는데 3일걸리고 3D로 전환하는데 20분 걸렸다.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

OpenGL 강의물도 아니고 내가 전문가도 아닐터이니

3D로 전환하는 핵심부분만 간단히 정리하자.

1. library 선언

2. 전체화면을 반반 나누어 View port를 만든다.

3. 각각 View port의 카메라 x좌표 간격을 조절한다. (여기에서 화면 밖으로 튀어나오거나 들어가게하는걸 조절하게된다.)

    private void setLeftEnv(GL10 gl) {
        gl.glViewport(0, 0, (int) mWidth / 2, (int) mHeight);
 
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        GLU.gluLookAt(gl, mEyeDistance, 0.0f, 4.5f, mFocusPoint[0], mFocusPoint[1], mFocusPoint[2], 0.0f, 1.0f, 0.0f);
    }
    private void setRightEnv(GL10 gl) {
        gl.glViewport((int) mWidth / 2, 0, (int) mWidth / 2, (int) mHeight);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        GLU.gluLookAt(gl, - mEyeDistance, 0.0f, 4.5f, mFocusPoint[0], mFocusPoint[1], mFocusPoint[2], 0.0f, 1.0f, 0.0f);
    }



4. 둘다 그린다.

if(mIs3D) {
   setLeftEnv(gl);
   root.draw(gl);
   objectRoot.draw(gl);
   setRightNomalEnv(gl);
   root.draw(gl);
   setRightEnv(gl);
   objectRoot.draw(gl);
  } else {
   setFullEnv(gl);
   root.draw(gl);
   objectRoot.draw(gl);
  }



끝.

object만드는 노가다를 해보니 역시 게임엔진이란게 있어야한다는걸 알았다 ㅠ_ㅠ

gamebryo 사용했을때는 대충 그리면 끝났던것을.........

Posted by 박공명
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함