如何从一个向量计算坐标系?
How to calculate coordinate system from one vector?
如何只给定一个向量来创建坐标系?
(左撇子、右撇子、本地或不同 space)
我正在搜索只给定一个向量计算局部坐标系算法:
原因:
1) 也许Z是曲面法线,那么X和Y向量就是切线和双切线向量
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 ..
}
就用坐标旋转的概念。
最初,你有一个向量(假设在 x 方向)
现在将该向量旋转 90 度,您将得到第二个轴(如果在 XY 平面中旋转 90 度,则为 y 轴)
同样在适当的平面内旋转得到第三轴。
假设给定向量的最小分量(绝对值)为Zz
。然后定义X
为(Zy, -Zx, 0)
,Y = (-Zx.Zz, -Zy.Zz, Zx²+Zy²)
.
如果最小分量不是 Zz
,请相应地调整公式。
请注意,这些向量未归一化,我没有查看惯用手。
您可以使用双叉积技巧。
- 取你的向量(我们称它为本地 X)取任意向上向量(通常是世界向上向量)并计算叉积。这将是您当地的 Z。
- 取局部 X 和局部 Z 并计算叉积,这将是局部 Y
如何只给定一个向量来创建坐标系? (左撇子、右撇子、本地或不同 space)
我正在搜索只给定一个向量计算局部坐标系算法:
原因:
1) 也许Z是曲面法线,那么X和Y向量就是切线和双切线向量
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 ..
}
就用坐标旋转的概念。
最初,你有一个向量(假设在 x 方向)
现在将该向量旋转 90 度,您将得到第二个轴(如果在 XY 平面中旋转 90 度,则为 y 轴)
同样在适当的平面内旋转得到第三轴。
假设给定向量的最小分量(绝对值)为Zz
。然后定义X
为(Zy, -Zx, 0)
,Y = (-Zx.Zz, -Zy.Zz, Zx²+Zy²)
.
如果最小分量不是 Zz
,请相应地调整公式。
请注意,这些向量未归一化,我没有查看惯用手。
您可以使用双叉积技巧。
- 取你的向量(我们称它为本地 X)取任意向上向量(通常是世界向上向量)并计算叉积。这将是您当地的 Z。
- 取局部 X 和局部 Z 并计算叉积,这将是局部 Y