2009-12-08 4 views
1

뷰포트의 3/4 높이에있는 도로의 소실점이있는 도로 다각형 (직사각형 3.f * 100.f)을 표시하려면 뷰가 필요합니다. 가장 가까운 도로 가장자리는 뷰포트의 아래쪽면입니다. 내가하고 싶은 일의 예는 Crazy Taxi game을 참조하십시오.레이싱 게임용 OpenGL 카메라 설정 방법

iPhone SDK 3.1.2의 기본 OpenGL ES 프로젝트 템플릿을 사용하고 있습니다.

I 설치 투사 행렬은 다음과 같이

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustumf(-2.25f, 2.25f, -1.5f, 1.5f, 0.1f, 1000.0f); 

가 그럼 난 가로 모드 및 설정 카메라를 조정하는 glRotatef를 사용합니다.

glMatrixMode(GL_MODELVIEW); 

glLoadIdentity(); glRotatef (-90, 0.0f, 0.0f, 1.0f);

const float cameraAngle = 45.0f * M_PI/180.0f; gluLookAt (0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 100.0f, 0.0f, cos (cameraAngle), sin (cameraAngle));

내 도로 다각형 삼각형 스트립은 다음과 같이이다 :

static const GLfloat roadVertices[] = { 

-1.5f, 0.0f로, 0.0f로, 1.5F, 0.0f로, 0.0f로, -1.5f, 0.0f로, 100.0f , 1.5f, 0.0f, 100.0f, };

그리고 gluUookAt에 대한 올바른 매개 변수를 찾을 수없는 것 같습니다. 내 소실점은 항상 화면 중앙에 있습니다.

답변

2

정품 3D로이 작업을 원하십니까? 기본적으로 점의 모습은 화면의 중심입니다. 당신이 원하는 것은 수평선 아래 스크린의 4 분의 1입니다.

투영 및 뷰 (본질적으로 투영되지 않음)별로 최종 위치를 뒤집어서 처리 할 수 ​​있습니다.

x가 -1.0f에서 1.0f, y가 -1.0f에서 1.0f 인 화면을 가정하면 수평선을 (0.0f, 0.5f)로 지정해야합니다. 즉, 화면의 4 분의 1 (예 : -0.5f)을보아야합니다. 주어진 z에 대해 (우리는 무작위로 0.5f를 선택했습니다). 우리는 당신의 당신이 이미 정의한로보기와 "정체성"매트릭스뿐만 아니라 당신의 "투사"매트릭스는 다음 gluUnproject 통해 전달할 수를 가지고가는 경우에 따라서 다음과 같이

GLdouble eyeX, eyeY, eyeZ; 
gluUnproject(0.0f, -0.5f, 0.5f, identity, view, projection, &eyeX, &eyeY, &eyeZ); 

그런 다음 눈 값을 연결할 수 있습니다 gluLookAt로 돌아 가면 도로 표면 아래 지점을 볼 수 있습니다.

나는 그것을 할 수있는 무수한 다른 방법이있을 것이라고 확신하지만 그 중 하나는 작동해야합니다.