java - 基于平面法线计算对象旋转
问题描述
我目前正在使用单纯形噪声和行进立方体算法处理程序生成的地形。我已经完成了创建地面网格的过程,植物等不同的实体将位于该地面网格上。然而,渲染的模型将始终指向上方,而不是它们所在的三角形面所指向的方向。这使它们进入看起来不太好的地面。我已经计算了每个三角形的法线,所以我想知道如何将三角形面的法线转换为模型的 3D XYZ 旋转。
下图显示了我当前的问题:
解决方案
只需取向上向量与平面法线的叉积。这将为您提供旋转轴。然后用平面法线取向上向量的点积,这将为您提供旋转角度的余弦值。所以你有了:
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
推荐阅读
- php - 创建 xenforo 插件 api 的过程
- java - Toruble 在 Eclipse 上用 Xs 编写条形图
- wordpress - 如何从自定义帖子类型标题自动创建自定义分类
- c++ - 如何相互连接或链接两个 c++ 程序?
- javascript - 如何在 node.js 的不同行中发送列表?
- python - 蟒蛇,JSON。如何从具有相同名称的键中获取值?
- docker - Docker 查看失败/崩溃容器的日志
- spring - 使 spring-boot 2.2.0 报告状态 = UP,即使 DB 已关闭?
- elixir - Elixir : IO.read 从终端退出
- c++ - 在无向图中查找连通分量的数量