提交 18b4e75c 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 b2879ec5
......@@ -6,52 +6,112 @@
# link :https://gitcode.net/pythoncr/
# python_version :3.8
# ==============================================================================
from bodies import Earth
from common.consts import SECONDS_PER_HOUR
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地球)
"""
space_station = ScifiSpaceStation(name="空间站",
size_scale=0.4,
# init_position=[0.46 * mars_radius, 0, -3.55e4],
# init_position=[9e3, -2.3e3, -32e3],
init_position=[10.5e3, -1e3, -75e3],
init_velocity=[0, 0, 0]) \
.set_ignore_gravity(True).set_light_disable(True)
space_ship = CoreValagaClas(name="飞船", mass=1e30, color=(111, 140, 255),
# init_position=[0, 0, 0],
# init_position=[D, 0, -D],
# init_position=[0, D * 1.15, -D * 2.05],
init_position=[9e3, -1e3, -55e3],
init_velocity=[0, 0, 0],
# texture="core_valaga_clas_light.jpg",
# size_scale=self.SIZE_SCALE * 1e3
size_scale=0.6
).set_ignore_gravity(True).set_light_disable(True)
# 创建带有云层的地球
earth = Earth(
# texture="earth_hd.jpg",
texture="earth_hd_trans.png",
# texture="earth_hd_trans.png",
texture="earth-huge.jpg",
rotate_angle=-23.44,
init_position=[0, 0, 0],
init_velocity=[0, 0, 0],
size_scale=1)
moon = Moon(init_position=[AU / 60, AU / 80, AU / 10],
distance_scale=0.01,
size_scale=3,
init_velocity=[-(29.79 + 1.03) * 20, 0, 0], ).set_ignore_gravity(True)
jupiter = Jupiter(init_position=[4 * AU / 100, AU / 20, AU / 5], texture="jupiter_hd.jpg",
distance_scale=0.01,
size_scale=0.2,
init_velocity=[-(29.79 + 1.03) * 20, 0, 0], ).set_ignore_gravity(True)
# 创建云层(texture纹理图使用了透明云层的图片,云层的 size_scale 要稍微比地球大一点)
clouds = Earth(name="地球云层", texture="transparent_clouds.png",
clouds = Earth(name="地球云层", texture="earth-huge-cn-flag.png",
rotate_angle=-23.44,
size_scale=1.001, parent=earth)
size_scale=1.002, parent=earth)
bodies = [earth, clouds]
bodies = [earth, clouds, space_station, moon, jupiter, space_ship]
# bodies = [earth]
# TODO: 开启3D摄像机
from simulators.ursina.entities.camera3d import Camera3d
# 3D摄像机初始化(两眼到鼻梁的距离为1000公里效果)
Camera3d.init(eye_distance=1000)
Camera3d.init(eye_distance=400)
# 录制:
# 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(scale=10000, rotation_y=150)
sky = create_sphere_sky(texture="bg_pan2.jpg", scale=10000, rotation_y=150)
# sky = create_sphere_sky(texture="cosmic_pan_02\cosmic_pan_1.jpg", scale=10000, rotation_y=150)
earth.planet.rotation_y = -120
clouds.planet.rotation_y = -120
clouds.planet.alpha = 0.5
# space_station.planet.rotation_x = -90
# moon.planet.rotation_x = -90
moon.planet.rotation_y = 90
# 为了较好的立体效果,可以增加太阳光线,光线指向木星(target=jupiter)
create_directional_light(position=(10.5e3, -1e3, -175e3), light_num=3, target=earth)
def on_timer_changed(time_data):
global sky
print(earth.planet.rotation_y)
# 地球转了一圈(360)就停止,370是留些余量
if abs(earth.planet.rotation_y) > 365:
sky.rotation_z += 0.004
space_station.planet.rotation_z += 0.1
p = space_station.init_position
space_station.init_position = (p[0], p[1], p[2] + 0.5e1)
p = space_ship.init_position
space_ship.init_position = (p[0], p[1], p[2] + 0.5e1)
if abs(earth.planet.rotation_y) > 218:
exit(0)
print("earth.rotation_y", abs(earth.planet.rotation_y))
# from ursina import camera, Vec3, time
# camera.parent.position += Vec3(0.0000001 * time_data.dt, 0, -0.0000003 * time_data.dt)
# Camera3d.look_to(earth.planet)
......@@ -70,12 +130,13 @@ if __name__ == '__main__':
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run(bodies,
SECONDS_PER_HOUR / 5,
SECONDS_PER_HOUR / 20,
# SECONDS_PER_HOUR,
position=(1.90 * earth.radius, 0, -40000),
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册