You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现Trimesh平面网格对象的绕轴旋转变换?

嘿,刚接触Trimesh的话,旋转变换其实有几种很实用的方式,我结合你的平面例子一步步讲清楚~

方法一:直接用rotate()方法(最直观)

这个是Trimesh网格对象自带的方法,专门处理旋转,默认绕网格的质心旋转。你只需要指定旋转轴和角度(注意:角度默认是弧度,要是习惯用角度的话,记得用numpy.radians()转一下)。

比如给你的平面绕Z轴旋转45度:

import trimesh
import numpy as np

# 创建你定义的平面
plane = trimesh.creation.box(extents=[20, 20, 0.01])

# 方式1:通过旋转矩阵调用rotate
plane.rotate(trimesh.transformations.rotation_matrix(np.radians(45), [0, 0, 1]))

# 方式2:更简洁的直接传轴和角度
plane.rotate([0, 0, 1], angle=np.radians(45))
方法二:用apply_transform()自定义变换(更灵活)

如果需要组合旋转、平移等多种变换,或者要绕非质心的点旋转,这个方法更合适。核心是构造变换矩阵,再应用到网格上。

绕质心旋转的例子

比如绕Y轴旋转30度:

# 构造绕Y轴的旋转矩阵
rot_matrix = trimesh.transformations.rotation_matrix(np.radians(30), [0, 1, 0])
# 将矩阵应用到平面上
plane.apply_transform(rot_matrix)

绕自定义点旋转的例子

比如想绕平面的右上角点旋转90度,步骤是:先把目标点移到原点,旋转后再移回去:

# 获取平面的右上角点坐标(初始平面在原点,extents为[20,20,0.01],所以右上角是(10,10,0.005))
target_center = plane.vertices.max(axis=0)

# 1. 构造平移矩阵:把目标点移到原点
translate_to_origin = trimesh.transformations.translation_matrix(-target_center)
# 2. 构造旋转矩阵:绕Z轴转90度
rot_matrix = trimesh.transformations.rotation_matrix(np.radians(90), [0, 0, 1])
# 3. 构造平移回去的矩阵
translate_back = trimesh.transformations.translation_matrix(target_center)

# 组合三个变换矩阵(顺序很重要!)
combined_transform = trimesh.transformations.concatenate_matrices(translate_to_origin, rot_matrix, translate_back)

# 应用组合变换
plane.apply_transform(combined_transform)
小提示
  • 旋转后想预览效果,可以用plane.show()打开3D视图查看。
  • Trimesh的transformations模块还有很多实用工具,比如平移、缩放矩阵,组合起来能实现各种复杂的空间变换。

内容的提问来源于stack exchange,提问作者Ghost

火山引擎 最新活动