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

equinox

Frischling

  • »equinox« ist der Autor dieses Themas

Beiträge: 56

Beruf: Student

  • Private Nachricht senden

1

27.04.2014, 22:27

[LibGDX] Probleme mit Fragment-Shader

Hallo liebe Mitforisten,

zurzeit entwickele ich ein kleines 2D-Beat-Em-Up im Little-Fighter Stil und wollte um die Grafik etwas zu verschönern Shader einbauen.
Nun ich habe keinerlei Erfahrung mit Shadern und bin daher auch sehr unerfahren, allerdings habe ich mit Google-Suche keinen Erfolg gehabt.
Problem:
Ich habe das Ziel dynamische Schatten zu implementieren, bin aber zurzeit an einem Schritt vorher um einfach mal ein Pseudo Dynamisches Licht zu erzeugen und verstehe nicht wie ich einen Uniform Vector2 übergeben kann.

Der Shader Code:

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifdef GL_ES
precision mediump float;
#endif

varying vec4 v_color;
varying vec2 v_texCoords;
varying vec4 v_position;

uniform sampler2D u_texture;
uniform vec2 u_light;

void main(){
    vec2 l = u_light;
    vec4 color = texture2D(u_texture, v_texCoords) * v_color;
    float h = v_texCoords.y - 200.;
        color.rgb =  vec3(color.rgb - smoothstep(0.4,0.6,distance(l, v_texCoords)));
    gl_FragColor = color;
}


Und der Aufruf:

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
Gdx.gl.glClearColor(0, 1, 1, 1);
            Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
            batch.setProjectionMatrix(camera.combined);
            batch.setShader(shader);
            batch.begin();
            shader.setUniformi(shader.getUniformLocation("u_light"), 80, 0);    

            //System.out.println(shader.getUniformLocation("u_light"));
            level.render(batch);
            RenderSystem.getInstance().render(batch);

            batch.end();


Desweiteren benutze ich zur darstellung von Spritesheets die Sprite-Klasse von LibGDX und dort habe ich einen den seltsamen Effekt, dass die Verfärbung des Shaders nicht auf Bildschirm Texturen bezieht, sondern relativ zu dem Ursprung des gesamten Spritesheets(also der Textur) gezeichnet wird.


Mit freundlichen Grüßen,

equinox

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »equinox« (27.04.2014, 22:34)


2

28.04.2014, 08:25

Zitat


dass die Verfärbung des Shaders nicht auf Bildschirm Texturen bezieht, sondern relativ zu dem Ursprung des gesamten Spritesheets(also der Textur) gezeichnet wird.

Schau dir nochmal den Ausdruck an: distance(l, v_texCoords))
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

equinox

Frischling

  • »equinox« ist der Autor dieses Themas

Beiträge: 56

Beruf: Student

  • Private Nachricht senden

3

28.04.2014, 12:23

Diesen Fehler habe ich nun behoben, war eigentlich ziemlich offensichtlich...

Werbeanzeige