mayavi 中体积图之间的相互透明度

问题描述

我正在尝试使用 mayavi一个场景中显示两个三维数据集,特别是 mlab.volume() 方法。这两个数据集显示为部分透明的云,使用两种不同的色标表示密度。每个数据集本身的透明度都很好:确实可以在某种程度上看到低密度区域并识别后面的高密度区域。

然而,当显示两个数据集时,后来添加一个总是完全覆盖另一个,即使密度很低。这是一个简化的示例,其中橙色数据集是在紫色数据集之后添加的。

enter image description here

与此相反,我期望的是(较大的)紫色云的​​外部区域应该部分遮住橙色云。对于我试图想象的,这是极具误导性的。我还尝试在渲染之前将所有数据集放在一起,但后来我找不到获得两种不同色阶的方法

这是用于生成上图的代码

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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...