3D动画透视投影显示所有球体失败
Failed to display all the spheres in perspetive projection of 3D animation
我生成了一个光流动画,其中球体(圆圈)在 3D 坐标 space 中朝向观察者移动。出于某种原因,虽然我定义了8个球体,但每次我 运行 代码时它都不会显示所有球体;有时它显示 1,有时显示 4(就像在 gif 中一样)。最终是1到8个球体的随机数
我的代码在 Github
上可用
透视投影时,视体积为frustum。因此,球体可能在平截头体的两侧被剪裁(不在平截头体中),尤其是当它们靠近近平面时。
请注意,大多数恒星 "leave" window 在其边界处,当它们靠近相机时(除了那些,它们通过近平面离开平截头体)。
出于调试原因,将球体的初始 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
如果您根本 "see" 不是所有星星,那么 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
我生成了一个光流动画,其中球体(圆圈)在 3D 坐标 space 中朝向观察者移动。出于某种原因,虽然我定义了8个球体,但每次我 运行 代码时它都不会显示所有球体;有时它显示 1,有时显示 4(就像在 gif 中一样)。最终是1到8个球体的随机数
我的代码在 Github
上可用透视投影时,视体积为frustum。因此,球体可能在平截头体的两侧被剪裁(不在平截头体中),尤其是当它们靠近近平面时。
请注意,大多数恒星 "leave" window 在其边界处,当它们靠近相机时(除了那些,它们通过近平面离开平截头体)。
出于调试原因,将球体的初始 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
如果您根本 "see" 不是所有星星,那么 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