2010-11-03 4 views
3

Je travaille sur un moteur de jeu depuis maintenant un mois, et j'ai terminé les éléments de base d'OpenGL. Cependant, la seule chose que je ne peux pas faire fonctionner comme je m'y attends est l'éclairage. (Note: C'est la première fois que je travaille sérieusement avec OpenGL)Problème Open GL Lighting

Ce que je veux, c'est une simulation d'éclairage proche de la réalité - où les surfaces face à la lumière sont plus éclairées que celles plus loin, etc. devrait avoir une position et une couleur. Voilà comment je pensais que ce pourrait être mis en œuvre:

float lightv[4]; // populated with (0.6, 0.6, 0.6, 1) 
float positionv[4]; // populated with (0, 10, 0, 1) 
int lightID = GL_LIGHT0; 
int attenuationType = GL_LINEAR_ATTENUATION; 
float attenuationValue = 1; 
glLightf(lightID, attenuationType, attenuationValue); 
glLightfv(lightID, GL_DIFFUSE, lightv); 
glLightfv(lightID, GL_POSITION, positionv); 
glEnable(lightID); 

Au lieu de faire ce que je pense à faire, il me donne éclairage s'il y avait une lumière où la caméra est! Chaque surface a le même éclairage!

Qu'est-ce que je fais mal?

Merci, je l'apprécie.

Répondre

2

La première chose à faire est de vous assurer que vous avez appelé glEnable(GL_LIGHTING); à un moment donné. Passé cela, la première chose à vérifier est que vos normales sont correctes. Pour que l'éclairage fonctionne correctement, vous devez avoir un jeu normal pour chaque sommet que vous dessinez. Si vous avez déjà défini vos normales, vous devez vous assurer qu'elles sont toutes de longueur unitaire. Si elles n'ont pas une longueur de un, l'éclairage peut agir bizarrement. Si tout est comme il se doit, vous devez garder à l'esprit que lorsque vous définissez la position d'une lumière, elle est modifiée par la matrice Modelview actuelle comme s'il s'agissait d'un vertex. Si aucune de ces choses n'est pertinente, je verrai si je peux penser à quelque chose de plus.

0

Définissez votre position de lumière après vous configurez votre transformée GL_MODELVIEW car elle est affectée par la matrice de transformation actuelle. Sinon, vous obtenez l'effet "phare" que vous avez découvert.

Questions connexes