【问题标题】:Calculating object rotation based on plane normal基于平面法线计算对象旋转
【发布时间】:2020-08-02 03:36:48
【问题描述】:

我目前正在使用单纯形噪声和行进立方体算法处理程序生成的地形。我已经完成了创建地面网格的过程,植物等不同的实体将位于该地面网格上。然而,渲染的模型将始终指向上方,而不是它们所在的三角形面所指向的方向。这使它们进入看起来不太好的地面。我已经计算了每个三角形的法线,所以我想知道如何将三角形面的法线转换为模型的 3D XYZ 旋转。

下图显示了我目前的问题:

裁剪的植物模型

【问题讨论】:

  • 您是否尝试过从每个法线构造一个旋转矩阵?
  • 您需要 XYZ 旋转角度还是对旋转矩阵满意?
  • @Joni 旋转矩阵会很好,但我对 XYZ 旋转角度也很好。

标签: java 3d rotation lwjgl


【解决方案1】:

只需取向上向量与平面法线的叉积。这将为您提供旋转轴。然后用平面法线取向上向量的点积,这将为您提供旋转角度的余弦。所以你有:

Axis = normalize(cross(up, normal))

Angle = acos(dot(up, normal))

然后你可以从轴和角度构造一个四元数或旋转矩阵。

见: https://en.m.wikipedia.org/wiki/Rodrigues%27_rotation_formula

https://en.m.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle

https://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2014-10-04
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多