Three.js 在WebGL着色器中使用normalize()失败
您好,我正在GLSL着色器中使用normalize()函数, 如果我提供了类似于vec3v2=normalize(vec3(1.0,2.0,0.0))的东西,这就行了 但是如果我使用vec3变量,它会失败。 GLSL代码失败:Three.js 在WebGL着色器中使用normalize()失败,three.js,webgl,glsles,Three.js,Webgl,Glsles,您好,我正在GLSL着色器中使用normalize()函数, 如果我提供了类似于vec3v2=normalize(vec3(1.0,2.0,0.0))的东西,这就行了 但是如果我使用vec3变量,它会失败。 GLSL代码失败: vec3 getPointOnSphereSurface(vec3 center, vec3 p2, float radius) { vec3 v = p2-center; //Then calculate the length: float
vec3 getPointOnSphereSurface(vec3 center, vec3 p2, float radius)
{
vec3 v = p2-center;
//Then calculate the length:
float mag = length(v);
vec3 v2 = normalize(vec3(v));
//Finally calculate the new vector, which is x2y2 + vxvy * (mag + distance).
v.x = (center.x + v2.x * (mag + radius));
v.y = (center.y + v2.y * (mag + radius));
v.z = (center.z + v2.z * (mag + radius));
return v;
}
提前感谢请提供失败的代码和相关的错误消息。你好,Brendan,感谢快速恢复,并用代码更新!你说它失败是什么意思?还要注意,您的var
mag
始终为1。这就是normalize()
所做的。还要注意的是,如果变量已经是vec3类型的,则不需要在vec3中包装变量。i、 e.正常化(vec3(v));应该只是正常化(v);最后,尝试使用向量数学,最后3个计算可以替换为v=中心+v2*半径;您好,谢谢您的评论,这里是改进的代码。现在,如果我手动计算v的值,我的结果与上面的实现不同,上面的实现总是将v返回为(0.0,0.0,0.0)