2017-04-14 3 views
-1

J'ai un projecteur dans mon projet OpenGL, la lumière brille actuellement sur l'axe -z comme un plafonnier, vers le sol, qui est juste un grand quad. J'ai actuellement un cube à l'origine de la lumière, qui suit la lumière autour, donc je peux voir exactement où la lumière est à tout moment. Mon problème est qu'il y a un autre projecteur plus lumineux qui suit la lumière principale, il commence à l'origine, ou au coin inférieur gauche du plancher.Lumière fantôme suivant la lumière principale au point d'origine

Je voudrais supprimer cette lumière blanche, car je ne sais pas quelle est la cause, ou comment l'enlever.

J'ai essayé de jouer avec certaines variables et de voir leur impact, mais j'ai eu peu ou pas de succès.

Toute aide serait grandement appréciée.

L'erreur:

The error

//ceiling light 
GLfloat Light_Ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
GLfloat Light_Diffuse[] = { 0.0f, 0.0f, 0.0f, 1.0f }; 
GLfloat Light_Position[] = { Sun.X, Sun.Y, Sun.Z, 1.0f }; 
GLfloat Spot_Direction[] = { 0.0f, 0.0f, -1.0f }; 

//ambient 
GLfloat Light_Ambient1[] = { 0.4f, 0.4f, 0.4f, 1.0f }; 
GLfloat Light_Diffuse1[] = { 1.0f, 1.0f, 1.0f, 0.0f }; 
GLfloat Light_Position1[] = { Sun.X, Sun.Y, Sun.Z, 1.0f }; 

//ceiling light 
glLightfv(GL_LIGHT0, GL_AMBIENT, Light_Ambient); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, Light_Diffuse); 
glLightfv(GL_LIGHT0, GL_POSITION, Light_Position); 
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 55); 
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, Spot_Direction); 
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 5); 
glEnable(GL_LIGHT0); 

//ambient 
glLightfv(GL_LIGHT1, GL_AMBIENT, Light_Ambient1); 
glLightfv(GL_LIGHT1, GL_DIFFUSE, Light_Diffuse1); 
glLightfv(GL_LIGHT1, GL_POSITION, Light_Position1); 
glEnable(GL_LIGHT1); 
+0

que voulez-vous dire? – StrayProg

+0

oh, désolé, je vais l'ajouter maintenant – StrayProg

+1

@ chbchb55 un peu difficile de montrer un problème lié aux graphiques, sans une image n'est ce pas? – Vallentin

Répondre

0

J'ai changé certaines choses et je semble avoir résolu.

//ceiling light 
GLfloat Light_Ambient[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
GLfloat Light_Diffuse[] = { 0.0f, 0.0f, 0.0f, 1.0f }; 
GLfloat Light_Position[] = { Sun.X, Sun.Y, Sun.Z, 1.0f }; 
GLfloat Spot_Direction[] = { 0.0f, 0.0f, -1.0f }; 

//ambient 
GLfloat Light_Ambient1[] = { 0.6f, 0.6f, 0.6f, 1.0f }; 
GLfloat Light_Diffuse1[] = { 1.0f, 1.0f, 1.0f, 0.0f }; 
GLfloat Light_Position1[] = { 0, 0, 0, 0.0f }; 

//ceiling light 
glLightfv(GL_LIGHT0, GL_AMBIENT, Light_Ambient); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, Light_Diffuse); 
glLightfv(GL_LIGHT0, GL_POSITION, Light_Position); 
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 55); 
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, Spot_Direction); 
glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 20); 
glEnable(GL_LIGHT0); 

//ambient 
glLightfv(GL_LIGHT1, GL_AMBIENT, Light_Ambient1); 
glLightfv(GL_LIGHT1, GL_DIFFUSE, Light_Diffuse1); 
glLightfv(GL_LIGHT1, GL_POSITION, Light_Position1); 
glEnable(GL_LIGHT1); 

MISE À JOUR:

Je retourne à modifier ce mois plus tard, simplement parce que je pense que cette réponse peut aider beaucoup de gens avec OpenGL et cette confusion avec des lumières. Si vos lumières sont cassées (comme les miennes étaient), il y a de bonnes chances qu'il n'y ait aucun problème avec vos lumières, mais comment vous rendre le monde. Il vaut la peine de se rappeler que opengl ressemble un peu à ceci:

https://imgur.com/a/saYxy

Ce que je fait faire mal, comme vous pouvez le voir à ma question initiale, j'étais convaincu que le Z était le Y et le Y était la Z, et vice versa, cela a brisé tous mes calculs d'éclairage à l'époque. Si vos lumières ressemblent à la mienne, il y a de fortes chances que vous confondiez votre axe, ce n'est pas si difficile à faire lorsque vous passez de 2d à 3D opengl.

+0

Je suis revenu à la version précédente avec le code et j'ai ajouté votre nouvelle modification dans une mise à jour. Comme vous l'avez mentionné, le code dans la réponse peut aider quelqu'un à l'avenir. Si vous pensez que le code n'ajoute aucune valeur à la réponse, veuillez revenir à la version avec juste le texte. – adiga