2013-04-18 3 views
1

OpenGl 및 C++로 기본 게임을 만들고 플레이어가 화면 가장자리에 도달하면 더 이상 이동할 수 없도록하려고합니다. 화면 가장자리가 어디에서 작동하는지 문제가 있습니다. 창문은 일반적으로 1에서 -1 사이의 시스템을 가지고 있지만, 광산은 0.63에서 -0.63 정도 인 것 같습니다. 플레이어는 x, y, z 위치가있는 상자에 화면으로 표시되지만 2D 공간에서만 움직입니다.OpenGl 좌표계가 -1에서 1이 아닙니다.

경계가 홀수 값이 아닌 -1과 1 사이가되도록 변경하고 싶습니다.

어떻게하면됩니까?

코드가 http://pastebin.com/jxd5YhHa에 업로드되었습니다. 당신이 당신의 투영 행렬을 변경 동적으로하지 않을 경우

+0

보기 절두체는 어떻게 생겼습니까? –

+0

나는 45도 각도로 1에서 1000 사이 인 것으로 추측한다. (gluPerspective (45.0, (float) WIDTH/(float) HEIGHT, 1, 1000)) – user2296321

+1

가능한 [OpenGL에서 창의 크기 설정] /stackoverflow.com/questions/16090612/setting-the-size-of-a-window-in-opengl) – datenwolf

답변

0

, 할 수있는 가장 쉬운 방법은

glScalef를 호출하는 것입니다 (.63f, .63f, 1);

귀하의 프로젝션 매트릭스에.

그런 다음이 값에 따라 이동을 제한 할 수 있습니다.

세계 공간 좌표를 계산하려면 언제든지 gluUnProject를 사용해야합니다. 는 'X'를하고 'y'를 가정하면 세계 공간과 같이 좌표를 찾을 수 있습니다 (값이 당신이 gluPerspective을 통과) 각각 창문의 폭과 높이를 다음과 같습니다

double world_llx,world_lly,world_llz; 
//world coordinates of lower left corner of window 
gluUnProject(0, 0, 0, view_mat, proj_mat, viewport,&world_llx,&world_lly,&world_llz); 
//world coordinate of upper right corner of window 
double world_urx,world_ury,world_urz; 
gluUnProject(x,y,0,view_mat,proj_mat,viewport,&world_urx,&world_ury,&world_urz); 

view_mat이보기 행렬이다. proj_mat는 여러분의 투영 행렬입니다. GL_MODELVIEW_MATRIX 및 GL_PROJECTION_MATRIX와 함께 glGetDouble *을 사용하여이 두 가지를 모두 얻을 수 있습니다.

뷰포트 매개 변수의 크기는 윈도우 크기와 같을 수 있습니다. 어떤 경우 이건 glViewport로 설정 한 것입니다.

여기에 XZ 평면이 z == 0 인 것으로 가정합니다.

+0

그런 종류의 작업은 별개로, 화면의 경계를 정확하게 알기위한 0.63의 추측이었습니다. 언제든지? – user2296321

+0

@ user2296321 편집을 참조하십시오. 그것은 당신이해야 할 일에 꽤 가깝습니다. – Aeluned

+0

뷰포트가 현재 정의되어 있지 않습니다. 어떻게해야합니까? – user2296321

관련 문제