2011-01-28 2 views
0

Je suivais un tout ce que je fais lighting guide et mettre en place une source d'éclairage pour mon cube de rotation (spins par l'interaction de l'utilisateur sur 3 axes)iPhone OpenGL-ES: Arrêter la source de lumière en mouvement

Cependant, je peux Ne laissez pas la source de lumière rester dans la bonne position, il semble tourner avec le cube. Donc, si je fais tourner le cube, une partie est allumée et une partie ne l'est pas.

Je fais pas mal de manipulation de la matrice. J'ai essayé de réinitialiser la matrice, puis en appliquant la source de lumière, j'ai essayé glLoadIdentity() pour réinitialiser la vue.

Je ne peux pas sembler le garder immobile.

static const Vertex3D light0Position[] = {{0.0, 10.0, 10.0}}; 
glLightfv(GL_LIGHT0, GL_POSITION, (const GLfloat *)light0Position); 

// Calculate light vector so it points at the object 
static const Vertex3D objectPoint[] = {{8.0, 8.0, -4.0}}; 
const Vertex3D lightVector = Vector3DMakeWithStartAndEndPoints(light0Position[0], objectPoint[0]); 
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, (GLfloat *)&lightVector); 

Répondre

1

La position et la direction de projecteur que vous spécifiez OpenGL ES sont transformées par la matrice modelview en cours au moment de l'appel à glLightfv, et sont appliqués à un sommet après qu'il a été transformé par la matrice modelview à l'heure de l'appel à glDrawArrays/glDrawElements. Ni prend en compte l'état de la matrice de projection. Afin que nous comprenions comment vos transformations peuvent mal se passer, vous devez montrer exactement quand vous appliquez vos transformations objet/monde/caméra à la matrice modelview, et où la spécification et le dessin de la propriété de la lumière ont lieu pour ça.

+0

N'y a-t-il aucun moyen de le réinitialiser? Je devais faire tous les types de choses folles pour faire tourner le cube comme je le veux, mais j'ai besoin d'une lumière fixe – Burf2000

+0

Voulez-vous que votre source de lumière reste fixe par rapport à la caméra, ou à certaines coordonnées dans le monde que votre la caméra passe à travers? Comment créez-vous/mettez-vous à jour la matrice modelview maintenant, et à quelle fréquence mettez-vous à jour les propriétés de la lumière (une fois par image, ou seulement au début du temps)? – Pivot

+0

J'essayais de mettre à jour par image. Il n'y a pas d'appareil photo (par exemple, glLookAt). C'est juste un cube 3D rendu devant moi qui tourne en fonction de l'entrée de l'utilisateur. Il continue de tourner en utilisant glMultMatrixf. J'ai fondamentalement besoin qu'il brille sur le coin supérieur droit avant du cube, quelle que soit la rotation. – Burf2000

Questions connexes