Projection은 3D World Space상에 있는 Objects를 2D 화면상에 "투영" 하는 것.
3D Vertex -> [Projection Matrix -> ModelView Matrix] -> 2D Vertex
로 변환되는 과정이다.
3차원이 2차원으로 변환되면서, x, y, z 성분 중 z 성분이 사라지게 되는데,
(여기서 말하는 z 성분이란, Viewer의 Front Vector를 기저로 하는 벡터)
"엄밀히 말하면 사라지는 것"이 아니라, Depth 라는 값으로 변환되는 것.
OpenGL에서는 어느 픽셀의 Depth값을 읽어 낼 수 있는 함수가 있다.
float depth;
glReadPixels( 픽셀위치X, 픽셀위치Y,
1, 1,
GL_DEPTH_CONPONENT, GL_FLOAT,
&depth);
를 사용하면,
화면상의 X,Y 픽셀의 Depth를 얻을 수 있다.
만약 아무것도 렌더링 되지 않은 곳의 Depth를 얻으려고 한다면, float depth는 1이 된다.
이제 이것으로, 화면상의 2차원 좌표( 대개는 마우스의 위치에 대한 )를 이용하여,
3D Space 상의 한 점을 얻을 수 있는 모든 정보를 갖게된 셈이다.
double x, y, z;
gluUnProjectect( 픽셀위치X, 필셀위치Y, XY픽셀의depth,
뷰행렬, 프로젝션행렬, 뷰포트,
&x, &y, &z);
마지막 3개의 매개변수에 3D 상의 한 점이 담기게된다.
뷰행렬을 얻는 방법은,
double view[16];
glGetDoublev(GL_MODELVIEW_MATRIX, view);
프로젝션 행렬은
double proj[16];
glGetDoublev(GL_PROJECTION_MATRIX, proj);
뷰포트는
int vp[4];
glGetIntegerv(GL_VIEWPORT, vp);
이다.
'Computer > JOGL' 카테고리의 다른 글
JOGL - Applet based Omnidirectional Panorama (0) | 2010.10.16 |
---|---|
Geometry (0) | 2007.08.15 |
11. Java Web Start (0) | 2007.08.06 |
glut (0) | 2007.08.06 |
10. GLSL -- Texture (0) | 2007.08.03 |