Frage

ich brauche die Ansicht, die die Straße Polygon zu zeigen (ein Rechteck 3.f 100.f *) mit einem Fluchtpunkt für eine Straße bei 3/4 der Höhe des Darstellungsfeldes ist, und die nächstgelegenen Straße Kante als untere Seite des Ansichtsfensters. Siehe Crazy Taxi Spiel für ein Beispiel von dem, was ich tun soll.

Ich bin mit iPhone SDK 3.1.2 Standard OpenGL ES Projektvorlage.

ich Setup die Projektionsmatrix wie folgt:

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

Dann benutze ich glRotatef für Landscape-Modus und Setup-Kamera einzustellen.

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));

Meine Straße Polygon Dreiecksstreifen ist wie folgt:

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

Und ich kann nicht scheinen, um die richtigen Parameter für gluLookAt zu finden. Mein Fluchtpunkt ist immer in der Mitte des Bildschirms.

War es hilfreich?

Lösung

Sie wollen, dass diese in echte 3D zu tun? im Grunde Ihr Blick auf Punkt ist die Mitte des Bildschirms. Was Sie wollen, dass es unter dem Horizont ist ein Viertel des Bildschirms sein.

Sie können es ausarbeiten, indem eine endgültige Position durch Projektion und Ansicht Umkehren (im Wesentlichen unprojecting).

Unter der Annahme, der Bildschirm erstreckt sich von -1.0f bis 1.0f in x und -1.0f zu 1.0f in y dann wollen Sie den Horizont (0.0f, 0.5f) zu gehen. Dies bedeutet, dass Sie durch Viertel des Bildschirms nach unten schauen müssen (dh -0.5f). Für eine gegebene z (wir wählten zufällig 0,5f). Wenn wir also Ihrer Ansicht nach nehmen, wie Sie bereits definiert und eine „Identität“ Matrix sowie Ihre „Projektion“ Matrix können Sie dann durch gluUnProject passieren dies wie folgt:

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

Sie können dann stecken Sie Ihre Augenwerte wieder in gluLookAt und Sie werden jetzt an einem Punkt unterhalb der Fahrbahnoberfläche suchen werden.

Ich bin sicher, es gibt unzählige andere Möglichkeiten, es zu tun, aber das soll man arbeiten ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top