2009-12-08 9 views
1

J'ai besoin de la vue pour montrer le polygone de la route (un rectangle 3.f * 100.f) avec un point de fuite pour une route étant à 3/4 de la hauteur de la fenêtre et le le bord de la route la plus proche en tant que côté inférieur d'une fenêtre. Voir Crazy Taxi game pour un exemple de ce que je souhaite faire. J'utilise le modèle de projet OpenGL ES d'iPhone SDK 3.1.2 par défaut.Comment configurer la caméra OpenGL pour un jeu de course

je configurer la matrice de projection comme suit:

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

Puis-je utiliser pour régler glRotatef pour le mode paysage et la caméra de configuration.

glMatrixMode(GL_MODELVIEW); 

glLoadIdentity(); Glaratef (-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 (angle de caméra), sin (angle de caméra));

Ma bande de triangle du polygone de route est comme ceci:

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

Et je n'arrive pas à trouver les bons paramètres pour gluLookAt. Mon point de fuite est toujours au centre de l'écran.

Répondre

2

Vous voulez faire cela en 3D authentique? fondamentalement, votre point de vue est le centre de l'écran. Ce que vous voulez qu'il soit, c'est un quart de l'écran au-dessous de l'horizon.

Vous pouvez vous en sortir en inversant une position finale par projection et par vue (essentiellement sans projeter).

En supposant que l'écran s'étire de -1.0f à 1.0f en x et de -1.0f à 1.0f en y, vous voulez que l'horizon passe à (0.0f, 0.5f). Cela signifie que vous devez regarder vers le bas par quart de l'écran (c'est-à-dire -0.5f). Pour un z donné (nous choisirons au hasard 0.5f). Donc, si nous prenons votre point de vue que vous avez déjà défini et une matrice « identité » ainsi que votre matrice « de projection », vous pouvez alors passer cela par gluUnproject comme suit:

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

Vous pouvez brancher vos valeurs yeux retournez dans GluLookAt et vous allez maintenant regarder un point en dessous de la surface de la route.

Je suis sûr qu'il existe une myriade d'autres façons de le faire, mais que l'on devrait travailler ...

Questions connexes