保持3D动画中可见圆的常数

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

我创建了一个3D动画,其中白色圆圈的透视投影在2D计算机屏幕(GIF 1)上投影的假3D空间中随机移动。

enter image description here

由于我需要保持相同数量的可见圆,所以每当一个圆从框架中消失时,我都必须在框架中创建一个新的可见圆。为此,我编写了这段代码:

  • 首先,我创建了初始坐标和两个运动角度(球坐标):

    for circle in circles:
    
        circle.position.xy = np.random.uniform(-25, 25, size=2)
        z = np.random.uniform(near_z, far_z)
    
        circle.position.z = z
        circle.position.x *= z/-50
        circle.position.y *= z/-50
    
        circle.theta_deg = np.random.rand(1) * 360
        circle.phi_deg = np.random.rand(1) * 360
    
        theta_rad = circle.theta_deg * np.pi / 180
        phi_rad = circle.phi_deg* np.pi / 180
    
    
        circle.dx = speed * np.sin(-phi_rad - theta_rad) / frameRate
        circle.dy = -speed * np.cos(phi_rad + theta_rad) / frameRate
        circle.dz = -speed * np.cos(theta_rad) / frameRate
    
  • 我得到了一个奇怪的结果,如GIF 2所示

max_dist = max(abs(circle.position.x),abs(circle.position.y))
limit_dist = 25 * abs((circle.position.z-near_z) / far_z)

z_rel = np.random.uniform(near_z,far_z)

if max_dist > limit_dist: 
    circle.position.x = np.random.uniform(-25, 25) * z_rel/far_z
    circle.position.y = np.random.uniform(-25, 25) * z_rel/far_z

我的状况有什么问题,如何检测从框架中消失的圆圈并在框架内部重新创建一个圆圈?

我创建了一个3D动画,其中白色圆圈的透视投影在2D计算机屏幕(GIF 1)上投影的假3D空间中随机移动。由于我需要保持相同数量的...

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

您仅在if条件下重设x和y位置,您也需要重设z,否则它们会飞到相机后面或在远处消失]]您所链接问题中的if条件还有另一部分:enter image description here,它将把您的代码转换为sphere.position.z >= camera_z,以实际检测在相机后面飞行的球体

© www.soinside.com 2019 - 2024. All rights reserved.