2011-06-04 3 views
0

La plupart de mon éclairage fonctionne comme je le souhaite, mais il me semble qu'il me manque complètement l'éclairage ambiant. C'est-à-dire que les côtés des choses loin du soleil sont complètement noirs (j'espérais 50% d'ambiant), alors que les côtés vers le soleil semblent allumés comme je m'y attendais.Pourquoi mon éclairage ambiant open gl fonctionne-t-il?

Voici mon code d'installation d'éclairage (sous la direction de l'original, voir note ci-dessous):

- (void) setupLighting 
{ 
    const float amb = 2.0; 
    const float LightAmbient[][4] = { { amb, amb, amb, 1.0f }, 
             { amb, amb, amb, 1.0f } 
            }; 
    const float LightDiffuse[] [4] = { { 1.0f, 1.0f, 1.0f, 1.0f }, 
             { 1.0f, 1.0f, 1.0f, 1.0f } 
            }; 
    const float LightPosition[][4] = { { 1.0f, 4.0f, 2.0f, 0.0f }, 
             { 0.0f, 10.0f, 0.0f, 1.0f } 
            }; 

    glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient[0]); 
    glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse[0]); 
    glLightfv(GL_LIGHT0, GL_POSITION, LightPosition[0]); 

    glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient[1]); 
    // etc., snip -- no LIGHT1 for this round 

    glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); 
    glEnable(GL_COLOR); 
    //glEnable(GL_COLOR_MATERIAL); 

    glEnable(GL_LIGHT0); 
    //glEnable(GL_LIGHT1); 
    glEnable(GL_LIGHTING); 
} 

(NOTE: LIGHT1 commenté pour l'instant - je suis juste essayer d'obtenir LIGHT0 faire ce que je veux.

Je ne sais pas si c'est important, mais je dessine des cubes unitaires à texture alignée et alignés à l'unité (à la MineCraft) en utilisant glDrawArrays(). Toutes mes normales semblent correctes; si je laisse l'éclairage éteint, tout est correctement tracé (tout simplement éclairé.)

Des indices?

Merci!

Modifier (capture d'écran Ajout.)

Here's a screenshot of the problem

Modifier Par commentaires, je me suis cogné des valeurs ambiantes jusqu'à 2,0, et il ressemble maintenant à ce que je pense à température ambiante d'environ 50% . Cela semble bizarre - je pensais que les valeurs d'éclairage étaient épinglées à [0, 1] ...? Quel concept fondamental de la lumière ambiante ne suis-je pas en train de creuser?

+0

si c'est le cas - la lumière fonctionne – Andrew

+0

Peut-être que je ne comprends pas, mais ils ne sont pas complètement noirs. Ils sont sombres, mais certainement pas noirs. – Bart

Répondre

2

Dans votre code, vous n'avez pas activé GL_COLOR_MATERIAL. Ainsi, si vous n'avez pas défini la couleur du matériau ambiant (en appelant glMaterial avec GL_AMBIENT), sa valeur par défaut est (0,2, 0,2, 0,2), ce qui devrait entraîner votre capture d'écran si elle est multipliée par (1,1,1) (la luminosité ambiante).

De même, il n'est pas nécessaire d'utiliser des valeurs de couleur supérieures à 1 car celles-ci sont de toute façon bloquées sur [0,1]. Avez-vous essayé d'augmenter votre lumière ambiante et de voir si cela affecte le résultat?

+0

Valeur ambiante globale multipliant tout le reste était le peu qui me manquait. Merci! – Olie