我正在使用Mayavi的triangular_mesh
方法绘制一个3D网格。该数据描述了一个面朝下躺在三维空间中的人体轮廓(因此可以使用cmap
表示与相机的距离)。
这是用于生成绘图的代码(面和顶点来自外部对象,这里无法展示所有内容):
from mayavi import mlab
import math
import numpy as np
import sys
import os
fig = mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1), size=(1920, 980))
a = np.array(this_mesh.vertices - refC.conj().transpose()) # this_mesh is an object created from external data files
this_mesh.faces = this_mesh.faces.astype(int) -1 # mesh data is generated by matlab, which is 1-indexed
m = mlab.triangular_mesh(x, y, z, this_mesh.faces, opacity=0.75)
mlab.axes(extent=[-1100, 1100, -1100, 1100, -1100, 1100])
没有移动相机,轮廓面朝下。为了正对模型观察,我改变了相机的方位角和俯仰角,从上往下看图表。这显示了预期的轮廓。
mlab.view(azimuth=0, elevation=180)
mlab.show()
我的下一项任务是创建一系列图像,其中相机围绕情节旋转,从面向右侧的轮廓开始,最后变为面向左侧。
问题在于,为了获得深度信息的颜色映射,我已经移动了视图的方位角和俯仰角(如上面的代码所示)。Mayavi在移动相机方面有比matplotlib更多的选项,但似乎没有绕Y轴旋转的方法,因此我猜想我需要对方位角和俯仰角进行一些复杂的计算才能实现相同的结果——但我不知道从哪里开始(我刚接触三维空间工作,并且我的大脑还没有思考过这种方式)。
有人能指点我正确的方向吗?
desired_angle
是以度为单位而不是弧度,并且负数也可以。 - BoltzmannBrain