首页 > 解决方案 > 基于平面法线计算对象旋转

问题描述

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

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

裁剪的植物模型 在此处输入图像描述

标签: java3drotationlwjgl

解决方案


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

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


推荐阅读