我有一个向上指向(0, 1, 0)
的方向向量(A)我希望能够在着色器中将其旋转到另一个方向,但只能在一个轴上旋转,在此case,Z轴。这可以使用向量(B)或标量来完成。
例如,如果没有旋转,矢量应指向顶部(0, 1, 0)
,但顺时针旋转90°,矢量应指向(1, 0, 0)
。
答案 0 :(得分:1)
如果旋转轴始终是z轴(0,0,1),并且向量A
到xy平面的投影应该在向量B
上,那么解决方案是:
vec3 A, B;
vec3 AB = vec3(length(A.xy) * normalize(B.xy), A.z);
一个更通用的解决方案,具有任意的,标准化的旋转轴R
将是:
vec3 A, B;
vec3 R; // rotation axis (normalized)
vec3 A_r = R * dot(A, R); // component of A, in the direction of R
vec3 A_prj = A - A_r; // component of A, in the rotation plane
vec3 B_r = R * dot(B, R); // component of B, in the direction of R
vec3 B_prj = B - B_r; // component of B, in the rotation plane
vec3 AB = length(A_prj) * normalize(B_prj) + A_r;