diff --git a/sim_lab/Basketball_3d.py b/sim_lab/Basketball_3d.py new file mode 100644 index 0000000000000000000000000000000000000000..9c31e2f5f96a55ca03c6e407303c5348a7c278cc --- /dev/null +++ b/sim_lab/Basketball_3d.py @@ -0,0 +1,90 @@ +# -*- coding:utf-8 -*- +# title :地球3D效果 +# description :地球3D效果 +# author :Python超人 +# date :2023-11-28 +# link :https://gitcode.net/pythoncr/ +# python_version :3.8 +# ============================================================================== +from bodies import Earth, Moon, Jupiter +from common.consts import SECONDS_PER_HOUR, AU +from objs import CoreValagaClas +from objs.sci_fi_space_station import ScifiSpaceStation +from sim_scenes.func import ursina_run, create_sphere_sky +from sim_scenes.universe_sim_scenes import UniverseSimScenes +from simulators.ursina.entities.entity_utils import create_directional_light +from simulators.ursina.ursina_event import UrsinaEvent + +if __name__ == '__main__': + """ + 地球3D效果(透视3D地球) + """ + + # 创建带有云层的地球 + earth = Earth( + # texture="earth_hd.jpg", + # texture="earth_hd_trans.png", + # texture="earth-huge.jpg", + texture="balls/Basketball.jpg", + rotate_angle=-23.44, + init_position=[0, 0, 0], + init_velocity=[0, 0, 0], + size_scale=1) + + bodies = [earth] + # bodies = [earth] + + # TODO: 开启3D摄像机 + from simulators.ursina.entities.camera3d import Camera3d + + # 3D摄像机初始化(两眼到鼻梁的距离为1000公里效果) + Camera3d.init(eye_distance=3000) + + # 录制: + # sim_video_3d_cap.bat featured earth_3d earth_3d.mp4 + sky = None + + + def on_ready(): + global sky + from ursina import application + application.time_scale = 0.0001 + # 运行前触发 + sky = create_sphere_sky(texture="bg_black.png", scale=10000, rotation_y=150) + # sky = create_sphere_sky(texture="cosmic_pan_02\cosmic_pan_1.jpg", scale=10000, rotation_y=150) + # 为了较好的立体效果,可以增加太阳光线,光线指向木星(target=jupiter) + create_directional_light(position=(10.5e3, -1e3, -175e3), light_num=3, target=earth) + earth.planet.rotation_x = -30 + + def on_timer_changed(time_data): + global sky + + print(earth.planet.rotation_y) + + # sky.rotation_z += 0.004 + earth.planet.rotation_y -= 0.04 + + if abs(earth.planet.rotation_y) > 218: + exit(0) + + print("earth.rotation_y", abs(earth.planet.rotation_y)) + + UniverseSimScenes.set_window_size((1920, 1079), False) + + UrsinaEvent.on_ready_subscription(on_ready) + UrsinaEvent.on_timer_changed_subscription(on_timer_changed) + + # 使用 ursina 查看的运行效果 + # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 + # position = 左-右+、上+下-、前+后- + ursina_run(bodies, + SECONDS_PER_HOUR / 20, + # SECONDS_PER_HOUR, + position=(2 * earth.radius, 0, -45000), + cosmic_bg="", # 无背景(黑色) + show_grid=False, # 不显示网格 + show_camera_info=False, # 不显示摄像机信息 + show_control_info=False, # 不显示控制提示信息 + show_exit_button=False, + timer_enabled=True, + view_closely=0.001) # 近距离观看 view_closely=True或0.001 diff --git a/textures/balls/Basketball.jpg b/textures/balls/Basketball.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64abdb9a25885917cc1e897bfca566f8406bc904 Binary files /dev/null and b/textures/balls/Basketball.jpg differ diff --git a/textures/balls/football.jpg b/textures/balls/football.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe7bda2c4134ae81398fd9dd455d0e867de0a652 Binary files /dev/null and b/textures/balls/football.jpg differ diff --git a/textures/balls/football.zip b/textures/balls/football.zip new file mode 100644 index 0000000000000000000000000000000000000000..fcf843f50555cbdf6321d89d85e12e4064c57826 Binary files /dev/null and b/textures/balls/football.zip differ