2008-12-15 13 views
1

Je suis en train de suivre les instructions de cette page:
http://www.opengl.org/resources/faq/technical/color.htm
en ce qui concerne le rendu des primitives avec une couleur uniqueOpenGL: couleur inexacte?

J'ai vérifié le nombre de bits pour chaque couleur et le résultat a été 8 pour chacun.
Lorsque vous appelez:

glColor3ui(0x80000000, 0, 0xFF000000); 

et en relisant le pixel avec glReadPixels() Je reçois la couleur: 0xFFFE007F
qui corresponts à R=0x7F, G=0, B=0xFE
Les deux bits inférieurs de rouge et bleu sont fausses.

Pourquoi est-ce?
J'utilise une toute nouvelle carte nVidia sur un ordinateur portable Dell avec les pilotes les plus récents

Répondre

1

Avez-vous fait cela aussi?

In either event, you'll need to ensure that any state that could 
affect the final color has been disabled. The following code will 
accomplish this: 

glDisable (GL_BLEND); glDisable (GL_DITHER); 
glDisable (GL_FOG); glDisable (GL_LIGHTING); 
glDisable (GL_TEXTURE_1D); glDisable (GL_TEXTURE_2D); 
glDisable (GL_TEXTURE_3D); glShadeModel (GL_FLAT); 

Vérifiez également si votre tampon glReadPixels a 24/32 bits.

3

Il s'avère que la FAQ a une erreur.

Les documentation of glColor stipule que: « composantes de couleur d'entiers non signés, lorsque cela est spécifié, sont linéairement mis en correspondance avec des valeurs en virgule flottante de telle sorte que les plus grande valeur représentable cartes à 1,0 (intensité maximale), et 0 cartes à 0,0 (zéro intensité)."
Cela suggère en fait que pour obtenir pleine intensité blanche que je devrais appeler:

glColor3ui(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); 

et non

glColor3ui(0xFF000000, 0xFF000000, 0xFF000000); 

comme la FAQ suggère.
Et cela explique pourquoi 0xFF000000 mappé à 254.

J'ai déposé un rapport de bogue au peuple soi-disant maintenant la FAQ