在斜坡上绘制模型

时间:2011-01-19 20:39:18

标签: opengl geometry

我的模型是轴对齐的。

我知道我想要绘制它们的表面的法线;如何计算我应该用来垂直于曲面绘制模型的旋转或旋转矩阵?

1 个答案:

答案 0 :(得分:3)

好吧,如果 u 是单位向上矢量, n 是单位曲面法线,那么你想要一个转动 u 的旋转进入 n 。 (此旋转不是唯一的:您可以在它之前围绕 u 进行任何旋转,然后在 n 之后进行任何旋转。)

如何计算此轮换?嗯,这取决于您正在使用的框架或API,以及如何表示轮换。一个体面的框架有一个API调用,例如在Unity 3D中有Quaternion.FromToRotation

如果您没有API调用,那么您可以自己解决。 Any rotation can be represented in axis–angle form,说( a ,θ)。这里θ是矢量 u n 之间的角度(可以使用cosine rule计算: u · n = | u | | n |cosθ), a 是垂直于两个矢量的轴: a = u × n 。 (有两种特殊情况:当 = n 时,空转将会发生,如果 = - n 任何垂直于 u 的向量的任何半旋转都可以。)

如果您正在使用OpenGL,现在可以拨打glRotate

如果你甚至没有那个......好吧,你没有生意提出这样的基本问题!但see Wikipedia关于如何将轴角表示转换为矩阵表示。