Opengl LibGDX着色器坐标系?

Opengl LibGDX着色器坐标系?,opengl,libgdx,glsl,shader,slick2d,Opengl,Libgdx,Glsl,Shader,Slick2d,我正在使用LibGDX编写一个二维照明系统,但在使用着色器时遇到了困难 之前,我在Slick2D中编写了一个照明系统,它工作得非常好,但是该库中着色器中坐标的工作方式似乎与LibGDX非常不同 我必须编写这个Java函数来将坐标从“世界坐标”更改为着色器中可用的任何坐标。我通过分析不同坐标的输出来实现这一点 public static Vector2 screenToNDC(Vector2 screenCoords, Vector2 textureSize, Vector2 texturePos

我正在使用LibGDX编写一个二维照明系统,但在使用着色器时遇到了困难

之前,我在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或flick2d着色器中的工作方式相同

谢谢, 杰克