2009-05-20 5 views
2

Grundsätzlich eine Farbtransformationsmatrix anwenden, ich habe eine Farbmatrix bekommt als solche definiert:Wie kann ich auf eine Textur in 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); 
    } 
}

Was ich tun möchte, ist die Funktion ‚Transform‘ gelten jedes Pixel in der Textur, so wie es auf dem Bildschirm wiedergegeben wird. Ich kann die Textur nicht wirklich ändern, da verschiedene Farbtransformationsmatrizen mehrmals auf dasselbe Bild in einem Bild angewendet werden können (und ich weiß nicht, was angewendet wird, bis es Zeit ist, die Textur zu rendern), und ich kann ' t verwende auch Shader.

Gibt es einen Weg, dies angesichts dieser Anforderungen zu tun? (meine einzige Idee ist bis jetzt multi-texturing, aber kann nicht herausfinden, wie man es anwendet)

Auch ich bin zu OpenGL neu, also würde es nützlich sein, etwas Code als auch zu posten, oder mich zu zeigen zu einem Tutorial oder sogar den erforderlichen Funktionen/Parametern.

Dank

Edit: Noch eine Sache, die ich erwähnen sollte, ist, dass die Textur vormultipliziert Alpha enthält, so Blending ist Setup als glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

Antwort

2

Wenn nicht Shader (verrückte Nachfrage, Hausaufgaben oder Nicht-PC-Plattform?), Dann könnten Sie dies möglicherweise mit Textur-Stufen oder etwas einrichten. Deine Funktion ist ziemlich einfach (tex * a + b), also sollte es machbar sein, aber nicht sehr lustig. :-P

+0

Kennen Sie Tutorials zur Implementierung von Texturstufen oder zumindest einige Funktionen, nach denen ich suchen könnte? –

+1

Nein, es ist schon eine Ewigkeit her, dass ich auf die alte Art multitexturierte. Ich denke, dass glTexEnv die richtige Funktion ist. – Macke

+0

+1 Marcus hat recht damit. Überprüfen Sie diese http://www.google.se/search?hl=sv&rlz=1G1GGLQ_SVSE328&q=gltexenv+site%3Agamedev.net&btnG=S%C3%B6k&meta= – ralphtheninja

1

Wenn Sie eine aktuelle-genug-Version von OpenGL sind Natürlich könnte man dies auch mit Shader-Programmierung machen.

Wenn Sie das nicht verwenden möchten, aber OpenGL 2.0 oder höher verwenden, können Sie die OpenGL-Farbmatrix mit der Funktion glMatrixMode() auf etwas setzen, das Ihrer gewünschten Transformation entspricht.

+0

Ich darf keine Shader verwenden (externe Nachfrage, kann nicht verhandeln), und obwohl diese OpenGL-Farbmatrix-Sache genau das aussah, was ich brauchte, scheint sie von meiner Zielplattform nicht unterstützt zu werden . Danke trotzdem. Irgendwelche anderen Ideen? –

+0

+1 hier auch :) glMatrixMode() ist eine sehr gute Lösung. glMatrixMode (GL_TEXTURE); glLoadMatrix (..); Die geladene Matrix ist ein 4x4, das ist genau das, was Sie brauchen, und Sie haben bereits alle Informationen für die Matrix. – ralphtheninja