我已经生成了光流动画,其中的球体(圆)在3D坐标空间中朝向观察者移动。出于某种原因,尽管我定义了8个球体,但每次运行代码时,它都不会显示所有球体。有时显示1,有时显示4(如gif)。最终它是从1到8的任意数量的球体。由于我是计算机图形学的新手,所以我不知道原因。任何帮助,将不胜感激!我的代码可在Github
在透视投影时,观看量为frustum。因此,可能是球体在截锥体的侧面被修剪(不在截锥体中),尤其是当它们靠近近平面时。请注意,大多数恒星在靠近相机时会在其边界处“离开”窗口(除了那些将视锥从近平面离开的恒星)。
出于调试原因,将球体的初始z坐标设置为最大值(远平面):
for sphere in spheres:
sphere.position.xy = np.random.uniform(-25, 25, size=2)
#sphere.position.z = np.random.uniform(0.0, -50.0)
sphere.position.z = 50
如果根本不“看到”所有星星,则x和y坐标的范围([-25,25])大。
为了补偿初始裁剪,您可以按距离缩放x和y分量:
for sphere in spheres:
sphere.position.xy = np.random.uniform(-25, 25, size=2)
z = np.random.uniform(0.0, -50.0)
sphere.position.z = z
sphere.position.xy[0] *= z/-50
sphere.position.xy[1] *= z/-50