2

我有两个plot_surface相交的 Matplotlib 。例如,两个足够接近以相交的球体。

当我使用鼠标移动相机角度时,我希望有适当的遮挡(即看不到被遮挡隐藏的球体部分)。

相反,我被困在看到一个对象总是完全渲染在另一个对象之上。

我需要为重要的演示文稿渲染 png 文件。但是由于当前的遮挡非常错误……我无法使用任何屏幕截图。

如何获得正确的表面遮挡?

非交互式后端和渲染器是否正确进行遮挡?(如果是,那么这将是一个前进的方向。尽管这是一个不理想且不优雅的前进方向......但至少我可以通过以编程方式设置相机的高度和方位角和相机中心。)


最小、完整和可验证的示例代码:

#!/usr/bin/python2
# from: http://matplotlib.org/mpl_examples/mplot3d/surface3d_demo2.py
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)

x = 1 * np.outer(np.cos(u), np.sin(v))
y = 1 * np.outer(np.sin(u), np.sin(v))
z = 1 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')
# modification from original code
ax.plot_surface(x+1.5, y, z, rstride=4, cstride=4, color='b')

plt.show()

截图:

在此处输入图像描述

在此处输入图像描述

由于某种原因,当您旋转相机的方位角时,这会导致一个对象被绘制在另一个对象之上。这两个屏幕截图显示了方位角 -88 度和 -92 度。所以也许问题是-90度。或者,可能任何plot_surface具有更接近相机的中心的对象都被渲染在另一个对象的顶部。

4

0 回答 0