无法在3D动画的透视投影中显示所有球体

问题描述 投票:0回答:1

我已经生成了光流动画,其中的球体(圆)在3D坐标空间中朝向观察者移动。出于某种原因,尽管我定义了8个球体,但每次运行代码时,它都不会显示所有球体。有时显示1,有时显示4(如gif)。最终它是从1到8的任意数量的球体。由于我是计算机图形学的新手,所以我不知道原因。任何帮助,将不胜感激!我的代码可在Github

谢谢您的帮助!enter image description here

python animation opengl 3d psychopy
1个回答
0
投票

在透视投影时,观看量为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
© www.soinside.com 2019 - 2024. All rights reserved.