我想在matplotlib中渲染一个体积。体积是一个简单的7x7x7立方体,我希望能够看到所有内部体素(即使我知道它看起来会很乱)。
我已经能够以透明度渲染体素,但任何不在表面上的体素似乎永远不会被绘制。
卷的每个7x7切片应如下所示:
我准备了一个MWE
下面的代码创建一个5x5x5体积,其中包含红色、绿色、蓝色、黄色和青色5x5层。每个层的alpha设置为0.5,因此整个内容应该是透明的。
然后,我将所有非表面体素的颜色更改为alpha为1的黑色,因此如果它们正在显示,我们应该能够在中心看到一个黑色框。
渲染它本身会产生左边的图形,但是如果我们从青色层移除填充,我们可以看到黑盒子确实存在,它只是没有被显示,因为它是100%被遮挡的,即使那些遮挡体素的α小于1。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # NOQA
spatial_axes = [5, 5, 5]
filled = np.ones(spatial_axes, dtype=np.bool)
colors = np.empty(spatial_axes + [4], dtype=np.float32)
alpha = .5
colors[0] = [1, 0, 0, alpha]
colors[1] = [0, 1, 0, alpha]
colors[2] = [0, 0, 1, alpha]
colors[3] = [1, 1, 0, alpha]
colors[4] = [0, 1, 1, alpha]
# set all internal colors to black with alpha=1
colors[1:-1, 1:-1, 1:-1, 0:3] = 0
colors[1:-1, 1:-1, 1:-1, 3] = 1
fig = plt.figure()
ax = fig.add_subplot('111', projection='3d')
ax.voxels(filled, facecolors=colors, edgecolors='k')
fig = plt.figure()
ax = fig.add_subplot('111', projection='3d')
filled[-1] = False
ax.voxels(filled, facecolors=colors, edgecolors='k')
有没有办法渲染所有被遮挡的体素?
1条答案
按热度按时间okxuctiv1#
把我上面的评论变成一个答案:
尽管存在一些小问题,但您可以将pull请求的当前状态临时修补到代码中: