微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?