Domanda

devo la vista per mostrare la strada poligono (un rettangolo 3.f * 100.f) con un punto di fuga per una strada essere a 3/4 dell'altezza della finestra e il bordo strada più vicina come lato inferiore di una finestra. Vedere Crazy Taxi gioco per un esempio di quello che voglio fare.

sto utilizzando iPhone SDK 3.1.2 di default modello di progetto OpenGL ES.

configurazione che la matrice di proiezione come segue:

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

Poi uso glRotatef per regolare per la modalità orizzontale e la macchina fotografica di impostazione.

glMatrixMode(GL_MODELVIEW);

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

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

La mia strada striscia poligono triangolo è così:

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

E io non riesco a trovare i giusti parametri per gluLookAt. Il mio punto di fuga è sempre al centro dello schermo.

È stato utile?

Soluzione

Si vuole fare questo in vero 3D? fondamentalmente il tuo look al punto è il centro dello schermo. Che cosa si vuole che sia è un quarto dello schermo sotto l'orizzonte.

È possibile lavorare fuori invertendo una posizione finale da proiezione e da vista (essenzialmente unprojecting).

Supponendo che i tratti di schermo da -1.0f a 1.0f in xe -1.0f a 1.0f in y poi si desidera l'orizzonte per andare a (0.0f, 0.5f). Ciò significa che è necessario guardare in basso per trimestre dello schermo (vale a dire -0.5f). Per un dato z (ti scelto casualmente 0.5f). Quindi, se prendiamo la vostra vista, come hai già definito e una matrice "identità" così come il vostro matrice di "proiezione" si può quindi passare questo attraverso gluUnproject come segue:

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

È quindi possibile collegare i valori di occhio di nuovo in gluLookAt e si sarà ora guardando un punto sotto la superficie della strada.

Sono sicuro che ci sono una miriade di altri modi di farlo, ma che si dovrebbe lavorare ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top