【发布时间】:2021-05-11 08:39:22
【问题描述】:
有一个问题,我似乎无法解决.. 我有一个片段着色器:
precision mediump float;
uniform vec3 u_AmbientColor;
uniform vec3 u_LightPos;
uniform float u_Attenuation_Constant;
uniform float u_Attenuation_Linear;
uniform float u_Attenuation_Quadradic;
uniform vec3 u_LightColor;
varying vec3 v_Normal;
varying vec3 v_fragPos;
vec4 fix(vec3 v);
void main() {
vec3 color = vec3(1.0,1.0,1.0);
vec3 vectorToLight = u_LightPos - v_fragPos;
float distance = length(vectorToLight);
vec3 direction = vectorToLight / distance;
float attenuation = 1.0/(u_Attenuation_Constant +
u_Attenuation_Linear * distance + u_Attenuation_Quadradic * distance * distance);
vec3 diffuse = u_LightColor * attenuation * max(normalize(v_Normal) * direction,0.0);
vec3 d = u_AmbientColor + diffuse;
gl_FragColor = fix(color * d);
}
vec4 fix(vec3 v){
float r = min(1.0,max(0.0,v.r));
float g = min(1.0,max(0.0,v.g));
float b = min(1.0,max(0.0,v.b));
return vec4(r,g,b,1.0);
}
我一直在关注我在网上找到的一些教程, 无论如何,ambientColor 和 lightColor 制服是 (0.2,0.2,0.2) 和 (1.0,1.0,1.0) 分别。 v_Normal 在顶点着色器中使用 模型-视图矩阵的倒置转置矩阵。
v_fragPos 是位置与正常模型视图矩阵相乘的模型结果。
现在,我希望当我将灯光位置移近我渲染的立方体时,它只会显得更亮,但生成的图像会非常不同:
(小方块有一个指示灯位置) 现在,我只是不明白这怎么会发生? 我的意思是,我将每个颜色分量乘以相同的值.. 那么,它怎么看起来如此不同??
编辑:我注意到如果我将相机移到立方体前面,光线只是蓝色阴影..这是同样的问题,但也许这是我不知道的线索..
【问题讨论】:
-
它改变了立方体的外观,从蓝色变为黄色......但靠近时也是如此......
-
是的,我明白了.. 刚刚提到由于某种原因它有不同的结果..
标签: android opengl-es glsl shader lighting