Opengl LibGDX着色器坐标系?
我正在使用LibGDX编写一个二维照明系统,但在使用着色器时遇到了困难 之前,我在Slick2D中编写了一个照明系统,它工作得非常好,但是该库中着色器中坐标的工作方式似乎与LibGDX非常不同 我必须编写这个Java函数来将坐标从“世界坐标”更改为着色器中可用的任何坐标。我通过分析不同坐标的输出来实现这一点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
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着色器中的工作方式相同
谢谢,
杰克