gpt4 book ai didi

python - 在 3D 动画中保持恒定数量的可见圆圈

转载 作者:行者123 更新时间:2023-12-03 17:32:41 26 4
gpt4 key购买 nike

我创建了一个 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
  • 然后,在播放动画并更新每个圆圈的位置的循环中,我将这个条件放在提供给同类问题 here 的相同答案之后。 :
    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

  • 我得到了一个奇怪的结果,如 GIF 2 所示

    enter image description here

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

    按照@Fabian N.(答案如下)的建议,我将 z 坐标以及 x 和 y 坐标重置如下:
        max_dist   = max(abs(circle.position.x), abs(circle.position.y))        # Find maximum distance of a circle to the center of the view:
    limit_dist = 25 * abs((circle.position.z-near_z) / far_z)


    if circle.position.z <= near_z or max_dist > limit_dist:

    z_rel = np.random.uniform(near_z,far_z)
    circle.position.z = z_rel + near_z

    circle.position.x = np.random.uniform(-25, 25) * z_rel/far_z
    circle.position.y = np.random.uniform(-25, 25) * z_rel/far_z

    我得到了这个结果:
    enter image description here

    最佳答案

    根据您发布的代码,我只能看到两个兴趣点而无需实际运行它(您能否在发布的代码周围添加一些胶水代码以使其可作为独立示例运行?)

  • 你只是在if条件下重置x和y位置,你也需要重置z,否则它们会飞到相机后面或消失在远处
  • 您链接的问题中的 if 条件有另一部分:sphere.position.z >= camera_z这会将您的代码转换为 circle.position.z <= near_z实际检测在相机后面飞行的球体

  • 两者都无法真正解释您的第二个 gif 中发生的事情......

    再想一想:gif 2 中的跳跃圆圈可能只是每帧立即重置的圆圈,因为它们没有正确重置,因为它们的 z 坐标保持不变。

    关于python - 在 3D 动画中保持恒定数量的可见圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60435851/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com