如何使用Mayavi绘制指定对角顶点坐标的透明立方体?
实现透明立方体(已知对角顶点坐标)
我之前也碰到过一模一样的困扰——tvtk.visual.box确实不支持透明度设置,不过咱们换个思路用TVTK的核心组件就能轻松解决,方法反而更灵活:
核心思路
既然已经知道立方体的两个对角顶点,咱们先计算出立方体的中心坐标和三个轴向的长度,然后用CubeSource生成立方体的基础数据,再通过Actor组件来控制透明度属性。
具体代码示例
from tvtk.api import tvtk # 替换成你已知的两个对角顶点坐标 p1 = (1, 1, 1) p2 = (3, 5, 4) # 计算立方体的中心坐标与各轴向长度 center = ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2, (p1[2]+p2[2])/2) dx = abs(p2[0] - p1[0]) dy = abs(p2[1] - p1[1]) dz = abs(p2[2] - p1[2]) # 创建立方体数据源 cube_source = tvtk.CubeSource( center=center, x_length=dx, y_length=dy, z_length=dz ) # 关联数据映射器与Actor(控制可视化属性) mapper = tvtk.PolyDataMapper(input_connection=cube_source.output_port) cube_actor = tvtk.Actor(mapper=mapper) # 设置透明度:0为完全透明,1为完全不透明,中间值按需调整 cube_actor.opacity = 0.5 # 基础渲染窗口框架(用于展示立方体) renderer = tvtk.Renderer() render_window = tvtk.RenderWindow(size=(800, 600)) render_window.add_renderer(renderer) interactor = tvtk.RenderWindowInteractor(render_window=render_window) renderer.add_actor(cube_actor) renderer.background = (0.1, 0.1, 0.1) # 设置深色背景更易看清透明效果 render_window.render() interactor.start()
为什么不用tvtk.visual.box?
tvtk.visual.box是TVTK为简化操作做的高层封装类,虽然用起来简单,但它隐藏了很多底层属性接口,其中就包括透明度控制。而直接用CubeSource+Actor的组合,不仅能自由设置透明度,还能自定义颜色、纹理、边缘样式等更多细节,灵活性高出不少。
内容的提问来源于stack exchange,提问作者shiftyscales
相关产品推荐
相关产品推荐

