2009-05-20 12 views
2

Fondamentalement, j'ai une matrice de couleur définie en tant que telle:Comment puis-je appliquer une matrice de transformation de couleur à une texture dans OpenGL

struct ColourXForm 
{ 
    float4 mul; 
    float4 add; 

    float4 Transform(float4 colour) 
    { 
     return float4(
     colour.x * mul.x + add.x, 
     colour.y * mul.y + add.y, 
     colour.z * mul.z + add.z, 
     colour.w * mul.w + add.w); 
    } 
}

Ce que je veux faire est d'appliquer la fonction « Transformer » pour chaque pixel dans la texture comme il est rendu sur l'écran. Je ne peux pas réellement modifier la texture car des matrices de transformation de couleurs différentes peuvent être appliquées à la même image plusieurs fois dans un cadre (et je ne sais pas ce qui sera appliqué jusqu'à ce qu'il soit temps de rendre la texture), et je peux t utilisez les shaders non plus.

Existe-t-il un moyen de le faire compte tenu de ces exigences? (ma seule idée à ce jour est multi-texturing, mais je n'arrive pas à comprendre comment l'appliquer)

Aussi, je suis nouveau sur OpenGL, donc il serait utile de poster du code aussi, ou pointez-moi à un tutoriel ou même les fonctions/paramètres requis.

Merci

Edit: Encore une chose que je dois mentionner, est que la texture contient alpha prémultipliés, si le mélange est configuré comme glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

Répondre

2

Si ce n'est pas des shaders (demande folle que, devoirs ou plate-forme non-PC?) Alors vous pourriez probablement mettre en place en utilisant des étapes de texture ou quelque chose. Votre fonction est assez simple (tex * a + b) donc ça devrait être faisable, même si ce n'est pas très amusant. :-P

+0

Connaissez-vous des didacticiels pour implémenter des étapes de texture, ou au moins quelques-unes des fonctions requises que je pourrais rechercher? –

+1

Non, ça fait longtemps que je n'ai pas multitâtu l'ancien. Je pense que glTexEnv est la fonction correcte à utiliser. – Macke

+0

+1 Marcus a raison à ce sujet. Cochez cette case http://www.google.se/search?hl=sv&rlz=1G1GGLQ_SVSE328&q=gltexenv+site%3Agamedev.net&btnG=S%C3%B6k&meta= – ralphtheninja

1

Si vous utilisez une version récente assez OpenGl , vous pouvez bien sûr utiliser la programmation des shaders utilisateur pour cela. Si vous ne voulez pas utiliser cela, mais que vous utilisez OpenGL 2.0 ou une version ultérieure, vous pouvez utiliser la fonction glMatrixMode() pour définir la matrice de couleurs d'OpenGL comme correspondant à la transformation souhaitée.

+0

Je ne suis pas autorisé à utiliser des shaders (demande externe, ne peux pas négocier), et bien que cette chose de matrice de couleur OpenGL ait exactement ce dont j'avais besoin, elle ne semble pas être supportée par ma plateforme cible . Merci quand même. D'autres idées? –

+0

+1 ici aussi :) glMatrixMode() est une très bonne solution. glMatrixMode (GL_TEXTURE); glLoadMatrix (..); La matrice chargée est un 4x4, c'est exactement ce dont vous avez besoin et vous avez déjà toutes les informations pour la matrice. – ralphtheninja

Questions connexes