Question

Je travaille sur un moteur de jeu pour un mois, et j'ai fini les trucs OpenGL de base. Cependant, la seule chose que je ne peux pas se rendre au travail comme je l'attends à l'éclairage est. (Note: Ceci est la première fois que je sérieusement travaillé avec OpenGL)

Ce que je veux est proche de la simulation d'éclairage réaliste - où les surfaces en regard de la lumière sont allumées plus que ceux plus loin, etc .. La lumière de base doit 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.

Était-ce utile?

La solution

La première chose à faire est de vous assurer que vous avez glEnable(GL_LIGHTING); appelé à un moment donné. Passé, la première chose à vérifier est que vos Normales sont corrects. Pour l'éclairage au travail que vous aurez bien besoin d'avoir un ensemble normal pour tous les sommets que vous dessinez. Si vous avez déjà configuré votre Normales, vous devez vous assurer qu'ils sont tous de la longueur de l'unité. S'ils n'ont une longueur d'un, l'éclairage peut agir bizarrement. Si cela est tout comme il devrait être, vous devriez garder à l'esprit que lorsque vous définissez la position d'une lumière, elle est modifiée par la matrice actuelle comme modèle-vue, il était un sommet. Si aucune de ces choses sont pertinentes, je vais voir si je peux penser à quelque chose de plus.

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top