From faa5674c2ab9c5305736a6696497f35fd11358db Mon Sep 17 00:00:00 2001 From: march3 Date: Sat, 22 Apr 2023 15:33:23 +0800 Subject: [PATCH] =?UTF-8?q?Python=E8=B6=85=E4=BA=BA-=E5=AE=87=E5=AE=99?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- objs/rock.py | 2 +- sim_scenes/README.md | 3 +++ sim_scenes/solar_system/earth_moon.py | 10 +++++++++- sim_scenes/wonders/__init__.py | 0 sim_scenes/{science => wonders}/comets_jupiter.py | 2 +- sim_scenes/{solar_system => wonders}/sun_earth_moon.py | 0 .../transit_of_venus_mercury.py | 2 +- simulators/ursina/entities/entity_utils.py | 9 +++++++++ simulators/ursina_simulator.py | 1 + 9 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 sim_scenes/wonders/__init__.py rename sim_scenes/{science => wonders}/comets_jupiter.py (99%) rename sim_scenes/{solar_system => wonders}/sun_earth_moon.py (100%) rename sim_scenes/{solar_system => wonders}/transit_of_venus_mercury.py (97%) diff --git a/objs/rock.py b/objs/rock.py index 26d3ded..f59db28 100644 --- a/objs/rock.py +++ b/objs/rock.py @@ -45,7 +45,7 @@ class Rock(Obj): # 对岩石进行缩放,保证 create_rock 保证创建的岩石大小差异不会过大 ROCK_SIZE_SCALE_FACTOR = { - 6: 1e-2, + 6: 0.5, 7: 1e-2 } diff --git a/sim_scenes/README.md b/sim_scenes/README.md index 2ed08d2..984fe1a 100644 --- a/sim_scenes/README.md +++ b/sim_scenes/README.md @@ -24,3 +24,6 @@ ### 三体的场景模拟 **sim_scenes/tri_bodies** +### 天文奇观模拟 +**sim_scenes/wonders** + diff --git a/sim_scenes/solar_system/earth_moon.py b/sim_scenes/solar_system/earth_moon.py index 81a894a..2a17073 100644 --- a/sim_scenes/solar_system/earth_moon.py +++ b/sim_scenes/solar_system/earth_moon.py @@ -10,6 +10,7 @@ from bodies import Sun, Earth, Moon from common.consts import SECONDS_PER_HOUR, SECONDS_PER_HALF_DAY, SECONDS_PER_DAY, SECONDS_PER_WEEK, SECONDS_PER_MONTH from sim_scenes.func import ursina_run, camera_look_at from bodies.body import AU +from simulators.ursina.entities.entity_utils import create_directional_light from simulators.ursina.ursina_event import UrsinaEvent if __name__ == '__main__': @@ -28,9 +29,16 @@ if __name__ == '__main__': def on_ready(): + # 运行前触发 # 运行开始前,将摄像机指向地球 earth = bodies[0] + moon = bodies[1] + # 摄像机看向地球 camera_look_at(earth) + # 创建太阳光 + shadows_shader = create_directional_light(position=(200, 0, -300), target=earth,shadows=True) + earth.planet.shadows = shadows_shader + moon.planet.shadows = shadows_shader UrsinaEvent.on_ready_subscription(on_ready) @@ -38,7 +46,7 @@ if __name__ == '__main__': # 使用 ursina 查看的运行效果 # 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹 # position = 左-右+、上+下-、前+后- - ursina_run(bodies, SECONDS_PER_MONTH, + ursina_run(bodies, SECONDS_PER_DAY, position=(-300000, 1500000, -1000), show_timer=True, show_trail=True) diff --git a/sim_scenes/wonders/__init__.py b/sim_scenes/wonders/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sim_scenes/science/comets_jupiter.py b/sim_scenes/wonders/comets_jupiter.py similarity index 99% rename from sim_scenes/science/comets_jupiter.py rename to sim_scenes/wonders/comets_jupiter.py index c00ec3d..6bfc831 100644 --- a/sim_scenes/science/comets_jupiter.py +++ b/sim_scenes/wonders/comets_jupiter.py @@ -57,7 +57,7 @@ if __name__ == '__main__': comets = [] r = jupiter.raduis - for i in range(30): + for i in range(20): # 随机生成石头 comet = create_comet(i, gravity_only_for=jupiter) bodies.append(comet) diff --git a/sim_scenes/solar_system/sun_earth_moon.py b/sim_scenes/wonders/sun_earth_moon.py similarity index 100% rename from sim_scenes/solar_system/sun_earth_moon.py rename to sim_scenes/wonders/sun_earth_moon.py diff --git a/sim_scenes/solar_system/transit_of_venus_mercury.py b/sim_scenes/wonders/transit_of_venus_mercury.py similarity index 97% rename from sim_scenes/solar_system/transit_of_venus_mercury.py rename to sim_scenes/wonders/transit_of_venus_mercury.py index 05c950b..16355ab 100644 --- a/sim_scenes/solar_system/transit_of_venus_mercury.py +++ b/sim_scenes/wonders/transit_of_venus_mercury.py @@ -1,6 +1,6 @@ # -*- coding:utf-8 -*- # title :水星、金星凌日 -# description :水星、金星凌日 +# description :天象奇观:水星、金星凌日 # author :Python超人 # date :2023-02-11 # link :https://gitcode.net/pythoncr/ diff --git a/simulators/ursina/entities/entity_utils.py b/simulators/ursina/entities/entity_utils.py index 52d37e8..c00a8f5 100644 --- a/simulators/ursina/entities/entity_utils.py +++ b/simulators/ursina/entities/entity_utils.py @@ -176,6 +176,10 @@ def create_directional_light(position, target=None, shadows=False, light_color=N else: light_color = color.rgba(light_color[0] / 255, light_color[1] / 255, light_color[2] / 255, 1) light = DirectionalLight(position=position, intensity=10, range=10, color=light_color) + + if shadows: + light.shadows = lit_with_shadows_shader + if target is not None: if hasattr(target, "planet"): if hasattr(target.planet, "main_entity"): @@ -185,6 +189,11 @@ def create_directional_light(position, target=None, shadows=False, light_color=N else: light.look_at(target) + if shadows: + return lit_with_shadows_shader + else: + return None + def create_trail_line(parent, pos): """ diff --git a/simulators/ursina_simulator.py b/simulators/ursina_simulator.py index 5210d3a..bd275d5 100644 --- a/simulators/ursina_simulator.py +++ b/simulators/ursina_simulator.py @@ -101,6 +101,7 @@ class UrsinaSimulator(Simulator): volume_scale = pow(body.planet.model.get_bounds().volume, 1 / 3) # 根据体积、大小缩放判断爆炸的量 scale = 3 * volume_scale * body.size_scale * UrsinaConfig.SCALE_FACTOR + print(scale, body) explode_ani = Animation(explosion_file, position=body.planet.position, scale=scale, fps=6, -- GitLab