【问题标题】:drawing a model on a slope在斜坡上绘制模型
【发布时间】:2011-01-20 19:01:23
【问题描述】:

我的模型是轴对齐的。

我知道要在其上绘制它们的表面的法线;如何计算用于绘制垂直于表面的模型的旋转或旋转矩阵?

【问题讨论】:

  • 上下文是什么?你需要什么?您是否需要数学将模型的所有顶点转换到新位置,您是否只想在某些渲染管道中绘制它,您是否只想了解其背后的数学?你有什么问题?
  • 我想设置 GL 模型视图矩阵,以便我可以在脸上的 VBO 中绘制我的模型(我知道 xyz)并与法线共线

标签: opengl geometry


【解决方案1】:

好吧,如果 u 是单位向上向量,而 n 是单位表面法线,那么您需要一个旋转 u进入 n。 (这种旋转不是唯一的:您可以在它之前组成围绕 u 的任何旋转,以及在它之后围绕 n 的任何旋转。)

如何计算这种旋转?好吧,这取决于您正在使用什么框架或 API,以及如何表示旋转。一个体面的框架对此有一个 API 调用,例如在 Unity 3D 中有 Quaternion.FromToRotation

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

如果您使用的是 OpenGL,您现在可以致电 glRotate

如果你连那个都没有……好吧,你没有资格问这种基本问题!但是see Wikipedia 了解如何将轴-角度表示转换为矩阵表示。

【讨论】:

  • 在 XNA 中,您可以这样做sample。该示例还包含HTML-form 中的一小段文档
  • 我看到 XNA lacks an API call 用于计算两个向量之间的旋转。我没有留下深刻的印象!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多