2010-11-13 6 views
4

Je pense que c'est une question extrêmement stupide et débutant, mais je suis un débutant dans les graphiques et OpenGL. Ayant dessiné une sphère et mis une source de lumière à proximité, ayant également une lumière ambiante spécifiée, j'ai commencé à expérimenter avec des valeurs lumineuses et matérielles et j'en suis arrivé à une conclusion surprenante: les couleurs que nous spécifions avec glColor* n'ont aucune importance. Au lieu de cela, l'équivalent est le composant ambiant du matériau. Cette conclusion est-elle correcte? Merciquestion d'éclairage OpenGL de base

Répondre

5

Si l'éclairage est activé, au lieu de la couleur de sommet, la couleur du matériau(bien, les couleurs - il existe plusieurs d'entre eux pour différents types de réponse à la lumière) est utilisé. Les couleurs des matériaux sont spécifiées par les fonctions glMaterial*.

Si vous souhaitez réutiliser votre code, vous pouvez utiliser glEnable(GL_COLOR_MATERIAL) et glColorMaterial(GL_AMBIENT_AND_DIFFUSE) pour que vos anciens appels glColor* soient automatiquement mappés à la couleur du matériau.

(Et s'il vous plaît passer à Shaders aussi vite que possible - l'approche des shaders est à la fois plus facile et plus puissant)

+0

J'ai tellement entendu parler de ces shaders, mais je ne sais pas ce qu'ils sont. Je suppose que je devrais juste être patient jusqu'à ce que j'arrive aux chapitres appropriés du livre rouge :) Merci pour la réponse –

+0

Le Redbook est aussi démodé que le rendu entier de fonction fixe dont nous discutons. Vous pouvez le lire pour une théorie et c'est tout. Pour les tutoriels de shader, google pour Lighthouse3D. :) Jetez aussi un coup d'œil sur les documents de référence OpenGL 2.1 ou OpenGL 3 sur opengl.org/documentation/specs/ - ils sont assez gros, mais un aperçu vous donnera une bonne idée du fonctionnement d'OGL. – Kos

+0

@Kos: Si le livre rouge est obsolète, quel livre recommanderiez-vous? Une documentation n'est pas un livre, c'est une bonne chose, mais les débutants ont du mal à utiliser la documentation directement –

3

Je suppose que vous n'utilisez pas encore de fragment shader. De glprogramming.com:

vertex color = 
    the material emission at that vertex + 
    the global ambient light scaled by the materials ambient 
    property at that vertex + 
    the ambient, diffuse, and specular contributions from all the 
    light sources, properly attenuated 

Alors oui, la couleur du sommet n'est pas utilisé.

Edit: Vous pouvez également rechercher l'équation de la foudre GL dans la spécification GL (vous en avez un à proximité, avez-vous ^^?)