我有两个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
具有更接近相机的中心的对象都被渲染在另一个对象的顶部。