我想知道3d矢量a
是否可以在a
跨越的平面和标准化矢量b
中旋转90度,比直接前进(伪GLSL样式) ):
a=normalize(a);
vec3 axis=cross(a,b);
c=rotate(identity,90,axis)*a;
答案 0 :(得分:0)
由于a和b跨越平面,因此它们不能共线。因此,b的一部分与a成直角。叫这个b'
na = norm(a)
b' = b - ( dot(a,b)/na ) * A / na
Arot = b' * na / norm(b')
这使得“朝向”旋转b。如果要“离开”旋转,请在最后一行中使用减号。这应该比任意轮换更少的指令。
如果a已经标准化,那么na==1
会进一步简化:
b' = b - dot(a,b)* A
Arot = b' / norm(b')