2013-08-11 1 views
0

J'ai besoin de définir la couleur par type d'octet ou nombre entier, et non par valeurs flottantes. Comment puis-je affecter ce type dans gl_FragColor? En divisant la valeur par 256 ne me donne pas la précision voulue. Mon but principal est de connaître la valeur spécifique de chaque bit dans le tampon de couleur, si je dessine la ligne seulement avec la couleur spécifique. par exemple je veux que dans le tampon de couleur à la valeur rouge du pixel seulement 2 lsbits seront sur, quelle valeur de couleur devrais-je transférer à gl_FragColor? Si j'avais une option pour écrire des valeurs de type octet, j'écrirais la valeur 3 au composant rouge MerciAffectation de valeurs entières à la couleur dans les fenêtres ouvertes 2.0

+0

Si vous utilisez glVertexAttribPointer pour envoyer vos données, définissez le paramètre * normalisé * sur true et fournissez vos données sous int. – Kimi

Répondre

2

Autant que je sache, gl_FragColor doit toujours être en virgule flottante. Cependant, si vous savez que le tampon de couleur est de 8 bits par canal, il ne devrait pas être difficile de forcer ce que vous voulez. Vous pourriez envisager

gl_FragColor = vec4(floor(number)/255.0, 0, 0, 0); 

par exemple. Les versions les plus récentes de GLSL supportent les opérations au niveau du bit, mais je doute que GLES2 le fasse.

Si vous voulez attirer des bits spécifiques, peut-être ...

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE); 

...

gl_FragColor = vec4(pow(2.0, bitIndex)/255.0, 0, 0, 0); 

Je n'ai pas testé, mais ne vois aucune raison pourquoi il ne pouvait pas travailler en supposant que la géométrie ne se chevauche jamais (auquel cas le bit déborderait dans le suivant).

+0

Merci, je vais le vérifier – user893269

Questions connexes