如何解决mayavi 中体积图之间的相互透明度
我正在尝试使用 mayavi 在一个场景中显示两个三维数据集,特别是 mlab.volume()
方法。这两个数据集显示为部分透明的云,使用两种不同的色标表示密度。每个数据集本身的透明度都很好:确实可以在某种程度上看到低密度区域并识别后面的高密度区域。
然而,当显示两个数据集时,后来添加的一个总是完全覆盖另一个,即使密度很低。这是一个简化的示例,其中橙色数据集是在紫色数据集之后添加的。
与此相反,我期望的是(较大的)紫色云的外部区域应该部分遮住橙色云。对于我试图想象的,这是极具误导性的。我还尝试在渲染之前将所有数据集放在一起,但后来我找不到获得两种不同色阶的方法。
from mayavi import mlab
import numpy as np
from tvtk.util import ctf
from matplotlib import cm
def cmap_to_ctf(cmap_name):
values = list(np.linspace(0,1,256))
cmap = cm.get_cmap(cmap_name)(values)
transfer_function = ctf.ColorTransferFunction()
for i,v in enumerate(values):
transfer_function.add_rgb_point(v,cmap[i,0],1],2])
return transfer_function
plot_range = 4
x = np.linspace(-plot_range,plot_range,200)
y = np.linspace(-plot_range,200)
z = np.linspace(-plot_range,200)
xx,yy,zz = np.meshgrid(x,y,z)
beam_1 = np.exp(-xx**2 - zz**2)
beam_2 = np.exp(-2 * (yy**2 + zz**2))
mlab.figure(bgcolor=(1,1))
source_1 = mlab.pipeline.scalar_field(beam_1)
vol_1 = mlab.pipeline.volume(source_1,vmin=0,vmax=1)
# The following is to set the color scale.
ctf_1 = cmap_to_ctf('RdPu')
vol_1._volume_property.set_color(ctf_1)
vol_1._ctf = ctf_1
vol_1.update_ctf = True
vol_1._volume_property.shade = 0
source_2 = mlab.pipeline.scalar_field(beam_2)
vol_2 = mlab.pipeline.volume(source_2,vmax=1)
# The following is to set the color scale.
ctf_2 = cmap_to_ctf('Oranges')
vol_2._volume_property.set_color(ctf_2)
vol_2._ctf = ctf_2
vol_2.update_ctf = True
vol_2._volume_property.shade = 0
mlab.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。