diff --git a/sim_scenes/science/four_seasons.py b/sim_scenes/science/four_seasons.py new file mode 100644 index 0000000000000000000000000000000000000000..77b7cda22bf443d1db015547fd4fb4bc50adb84a --- /dev/null +++ b/sim_scenes/science/four_seasons.py @@ -0,0 +1,78 @@ +# -*- coding:utf-8 -*- +# title :太阳、地球场景模拟 +# description :太阳、地球场景模拟 +# author :Python超人 +# date :2023-02-11 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from bodies import Sun, Earth, Sirius +from common.consts import SECONDS_PER_WEEK, SECONDS_PER_DAY, AU +from sim_scenes.func import ursina_run +from simulators.ursina.entities.body_timer import TimeData +from simulators.ursina.ursina_event import UrsinaEvent +from ursina import camera + +if __name__ == '__main__': + """ + 太阳、地球 + """ + bodies = [ + Sun(size_scale=5e1, texture="transparent.png"), # 太阳透明 + Earth(name="中国春天", size_scale=2e3, texture="earth_hd.jpg", + init_position=[-1 * AU, 0, 0], init_velocity=[0, 0, -29.79]), + Earth(name="中国夏天", size_scale=2e3, texture="earth_hd.jpg", + init_position=[0, 0, -1 * AU], init_velocity=[29.79, 0, 0]), + Earth(name="中国秋天", size_scale=2e3, texture="earth_hd.jpg", + init_position=[1 * AU, 0, 0], init_velocity=[0, 0, 29.79]), + Earth(name="中国冬天", size_scale=2e3, texture="earth_hd.jpg", + init_position=[0, 0, 1 * AU], init_velocity=[-29.79, 0, 0]), + ] + sun = bodies[0] + earth_1 = bodies[1] + earth_2 = bodies[2] + earth_3 = bodies[3] + earth_4 = bodies[4] + + + def on_ready(): + # 摄像机跟随地球(模拟在地球上看到的效果) + # camera.position = earth.planet.position + # camera.forward = -10 * AU + # # camera.x = camera.x - AU / 100 + # camera.look_at(earth.planet) + earth_1.planet.rotation_y -= 205 # 春天 + earth_2.planet.rotation_y -= 0 # 夏天 + earth_3.planet.rotation_y -= 100 # 秋天 + earth_4.planet.rotation_y -= 175 # 冬天 + + camera.parent = sun.planet + camera.look_at(earth_2.planet) + # camera.position=[0,0,0] + pass + + # if hasattr(camera, "sky"): + # # 摄像机跟随地球后,需要对深空背景进行调整,否则看到的是黑色背景 + # camera.sky.scale = 800 + # camera.clip_plane_near = 0.1 + # camera.clip_plane_far = 1000000 + # # camera.fov = 40 + + + def on_timer_changed(time_data: TimeData): + # 时时刻刻的让地球看向太阳(摄像机跟随地球看向太阳) + # earth.planet.look_at(sun.planet) + # earth.planet.rotation_z = 0 + # camera.look_at(earth.planet) + pass + + + UrsinaEvent.on_ready_subscription(on_ready) + UrsinaEvent.on_timer_changed_subscription(on_timer_changed) + + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + ursina_run(bodies, 1, position=(0, 0, 0), + show_name=True, + show_trail=True)