LibGDX着色器坐标系?

时间:2015-02-06 05:13:03

标签: opengl libgdx glsl shader slick2d

我正在使用LibGDX编写2D照明系统,但我在着色器方面遇到了困难。

之前我曾在Slick2D中编写过一个非常好的照明系统,但是该库中着色器的坐标方式似乎与LibGDX非常不同。

我必须编写这个Java函数来改变世界坐标中的坐标'任何在着色器中工作的东西。我通过分析不同坐标的输出来做到这一点。

public static Vector2 screenToNDC(Vector2 screenCoords, Vector2 textureSize, Vector2 texturePosition)
{
return screenCoords.scl(new Vector2(1f / textureSize.x, 1f / textureSize.y)).sub(texturePosition.scl(new Vector2(1f / textureSize.x, 1f / textureSize.y)));
}

此功能可以很好地平移灯光位置。 这是我的着色器代码:

#ifdef GL_ES
precision mediump float;
#endif

varying vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
uniform mat4 u_projTrans;

uniform vec2 lightPos;
uniform vec3 lightCol;

//uniform float lightIntensity;

float dist(vec2 a, vec2 b) {
    return sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));
}

void main() {
    gl_FragColor = vec4(lightCol, 1.0 / dist(v_texCoords, lightPos));
}

目前,这将仅绘制带有完整alpha的浅色。经过调查,我发现这必须是因为dist函数返回的值非常小,1.0 / dist为正。如果我将dist(v_texCoords, lightPos)乘以像10这样的值,那么光线衰减就会按预期工作。

有没有办法简单地使坐标在LibGDX着色器中工作的方式与它们在Java或Slick2D着色器中的工作方式相同?

谢谢, 千斤顶

0 个答案:

没有答案