如何只给定一个 vector 来创建坐标系? (左手、右手、本地或不同空间)
我正在寻找只给定一个 vector 的局部坐标系统算法:
原因:
1) Z可能是表面法线,那么X和Y vector 就是切线和副切线 vector
2) 另一个原因是光线追踪:对光源进行采样。给定一个交点,从该点构建局部坐标系,然后追踪光线到光的形状。
Vector3 Z = {0.0f, 0.0f, 1.0f}; // given
// fill x and y
CreateXHandedCoordinateSystem(Vector3* X, Vector3* Y, const Vector3& Z) {
// implementation goes here..
// evaluate algorithm
// calculate X
// Y = cross(X, Z) or something ..
}
最佳答案
您可以使用双叉积技巧。
- 使用您的 vector (我们称之为本地 X)获取任意向上 vector (通常是世界向上 vector )并计算叉积。这将是您本地的 Z。
- 取局部 X 和局部 Z 并计算叉积,这将是局部 Y
关于c++ - 如何从一个 vector 计算坐标系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757842/