Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

13.06.2011, 16:39

GLSL: Texture color und glColor verbinden

Hi hab ein Problem mit GLSL
Ich will das sich die Farbe von der Texture von der glColor(gl_Color) anhängt.
Wie wenn ich eine komplett weisse Textur hab und dann glColor(255,0,0,255) einsetze, dann wird die ganze Texture Rot.

So das Problem ist jetzt aber wenn ich ein PostProcess-Shader einsetze dann arbeitet der nur mit den Texturen Eingenschaften.
Aber nicht mit den gl_Color.
Dachte mir das Problem so zu lösen.
Die Transparenz mit glColor kann ich somit jetzt bestimmen,
aber die Textur ist immer noch weiss.

Hier ein Blur Effect
Vertex:

C-/C++-Quelltext

1
2
3
4
5
void main(void){
        gl_Position = ftransform();
        gl_TexCoord[0] = gl_MultiTexCoord0;
        gl_FrontColor = gl_Color;
        }

Fragment

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
uniform sampler2D uTexture;
        uniform float textureWidth;
        uniform float textureHeight;
        uniform float radius;
        
        const int gaussRadius = 11;
        const float gaussFilter[gaussRadius] = float[gaussRadius](
            0.0402,0.0623,0.0877,
            0.1120,0.1297,0.1362,
            0.1297,0.1120,0.0877,
            0.0623,0.0402
        );
        
        void main() {
            vec2 uShift = vec2(textureWidth,textureHeight);
            vec2 texCoord = gl_TexCoord[0].xy - float(int(gaussRadius/2)) * uShift;
            vec3 color = vec3(0.0, 0.0, 0.0); 
            for (int i = 0; i < gaussRadius; ++i) { 
                color += (gaussFilter[i]+(radius/100.0)) * texture2D(uTexture, texCoord).rgb;
                texCoord += uShift;
            }
            gl_FragColor = vec4(color,1.0);
            gl_FragColor = min(gl_FragColor,gl_Color);
        }

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

13.06.2011, 17:20

Ich denk mal du willst kein min() sondern ein gl_FragColor = vec4(color, 1.0) * gl_Color.

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

3

13.06.2011, 17:27

ahh klingt logisch
aber leide immer noch weiss

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

13.06.2011, 17:31

Vermutlich weil du deine Farbe nicht richtig normierst!? Ich vermute mal eigentlich sollte das so aussehen:

HLSL-Quelltext

1
color += gaussFilter[i] * texture2D(uTexture, texCoord).rgb;

Ich hoff auch mal textureWidth und textureHeight sind eigentlich 1.0f/Width bzw. 1.0f/Height!?

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

5

14.06.2011, 12:23

hab den Fehler gefunden es wurden die falschen Farben übergeben

das mit
gl_FragColor = vec4(color, 1.0) * gl_Color.
war richtig, funkt jetzt alles , thx

Werbeanzeige