简单的使用mayavi进行图形上的显示
如何使用triangular_mesh显示网格模型
- code
vertices, faces, normals, nothing = io.read_mesh("data/arma-modi.obj")
mlab.triangular_mesh(vertices[:, 0], vertices[:, 1], vertices[:, 2], faces)
- 结果如下:
这里提一下triangular_mesh的三参数x,y,z
vertices.shape=[点的个数,3]
vertices[:,0]即点的x坐标的集合
faces就是构成三角形的三个顶点,每个顶点具体来说就是点的index。具体见obj文件的存储格式。 - plot3d, points3d的x,y,z都是一维的数据,值得注意的是plot3d的点的前后之间构成一条线段。
- 其他的api参数大同小异。
为每个面赋不同的颜色
- code
# 8个顶点
from mayavi import mlab
import numpy as np
A = np.array([1, 1, 1]) # 0
B = np.array([1, 1, -1]) # 1
C = np.array([-1, 1, -1]) # 2
D = np.array([-1, 1, 1]) # 3
E = np.array([-1, -1, 1]) # 4
F = np.array([-1, -1, -1]) # 5
G = np.array([1, -1, 1]) # 6
H = np.array([1, -1, -1]) # 7
vertices = np.array([A, B, C, D, E, F, G, H])
faces = np.array([
# ACB, ACD, AED, AEG, AHB, AHG
[0, 2, 1], [0, 2, 3], [0, 4, 3], [0, 4, 6], [0, 7, 1], [0, 7, 6],
# FDC, FDE, FBC, FBH, FGE, FGH
[5, 3, 2], [5, 3, 4], [5, 1, 2], [5, 1, 7], [5, 6, 4], [5, 6, 7]])
mesh = mlab.triangular_mesh(vertices[:, 0], vertices[:, 1], vertices[:, 2],
faces)
# 设定自己的colormap
cell_data = mesh.mlab_source.dataset.cell_data # 提取cell数据
cell_data.scalars = np.array([0.08*i for i in range(12)])
# 对scalar进行数据设定,颜色的个数和面的个数是一致的。
cell_data.scalars.name = "cell data" # 命名
cell_data.update() # 更新管线中的颜色数据
mesh2 = mlab.pipeline.set_active_attribute(mesh, cell_scalars='cell data') # 启用这个颜色属性
mlab.pipeline.surface(mesh2) # 覆盖之前的颜色。
mlab.show() # 显示网格
- result
set the colormap
not set the colormap
- scalar 是用来设置mayavi过程中的数据结构的基本属性,mayavi的document里面有写。