我试图让α越大,像素距离光源越远。给定世界坐标(统一)与当前像素在GLSL中呈现的距离?
如何计算我的光源(u_lightSourcePosition)和正在渲染的像素之间的距离?
我试着这样做:
float distance_from_point_to_pixel = distance(gl_FragCoord,v_lightSourcePosition)
,但没有奏效。
顶点着色器
attribute vec3 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
varying vec4 v_color;
varying vec2 v_texCoord0;
varying vec2 v_lightSourcePosition;
uniform mat4 u_projTrans;
uniform vec2 u_lightSourcePosition;
void main() {
vec4 position = u_projTrans * vec4(a_position, 1.0);
gl_Position = position;
v_color = a_color;
v_texCoord0 = a_texCoord0;
v_lightSourcePosition = u_lightSourcePosition ;
}
片段着色器
varying vec4 v_color;
varying vec2 v_texCoord0;
varying vec2 v_lightSourcePosition;
uniform sampler2D u_sampler2D;
void main() {
vec4 color = texture2D(u_sampler2D, v_texCoord0) * v_color;
float lightRadius = 400.0;
float distance_from_point_to_pixel = distance(gl_FragCoord,v_lightSourcePosition);
color.a = distance_from_point_to_pixel/lightRadius;
gl_FragColor = color;
}
'length(current - uniform_point)'?请添加着色器,否则我们只能猜测... – BDL
对不起,第一次发布。我添加了着色器和一些更多信息。 – alawiii521
很可能你的观点不在同一个空间。 'gl_FragCoord'是NDC,它可能不是计算距离的最佳空间。很可能你必须分割你的变换,并将包含世界空间位置的变化传递给片段着色器。顺便说一句:你为什么要在变化中复制制服而不是在片段着色器中访问制服? – BDL