Three.js 在WebGL着色器中使用normalize()失败

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

您好,我正在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 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)