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