2009-12-08 39 views
1

我需要該視圖來顯示道路多邊形(長方形3.f * 100.f),消失點爲視口的3/4高度處的消失點和最近的路邊作爲視口的底邊。請參閱Crazy Taxi game瞭解我想要做什麼的示例。如何爲賽車遊戲設置OpenGL相機

我正在使用iPhone SDK 3.1.2默認的OpenGL ES項目模板。

我建立投影矩陣,如下所示:

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, };

而我似乎無法找到gluLookAt的正確參數。我的消失點總是在屏幕的中心。

回答

2

你想在真正的3D中做到這一點?基本上你看點是屏幕的中心。你想要的是屏幕下方四分之一的屏幕。

您可以通過投影和視圖(基本上是未投影)反轉最終位置來解決問題。

假設屏幕從-1.0f到-1.0f在x和-1.0f到-1.0f在y中延伸,那麼你希望視界轉到(0.0f,0.5f)。這意味着你需要向下看屏幕的四分之一(即-0.5f)。對於給定的z(我們將隨機選擇0.5f)。所以,如果我們把你已經確定你的觀點和「身份」矩陣,以及你的「投影」矩陣,那麼你可以通過gluUnproject通過這個如下:

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

您可以再插上你的眼睛值回到gluLookAt中,你現在將看到路面下的一個點。

我敢肯定,有很多其他的方式來做到這一點,但應該工作...