diff --git a/objs/rock.py b/objs/rock.py index 26d3dedaa2f5c067accd4f8946c0e8ddd14a857a..f59db28b47bd3ae1ec54991edc9aceda610c8791 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 2ed08d2e840783229de27663df234ea36f13ef0b..984fe1a8eef2b8950f60303626daf996f6af44ab 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 81a894ad8746d37eab0ecff6edb7883a3d87721a..2a17073219eb6669a2dbb31c91af3af497d5bdde 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 c00ec3dcefa4efbcfa9cd8ad7284af9213e2922f..6bfc831ffb7e63530c6c90762e9d58f55f1866e6 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 05c950b6302d789a8009db10003a3d584bc30b37..16355ab67bc11ebc76f629202ff85badd8e03c02 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 52d37e8ffc197d508b82e434dc2c436fa2a6bdf3..c00a8f5867cb157ebc5fa9511242955a2e021e12 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 5210d3a2f2cca074c93fc557235d2d093c856215..bd275d5463b879d890a8505faece13aa39270f5e 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,