From cd95c3a4efdd331bc425f136dcf5b697d2a18975 Mon Sep 17 00:00:00 2001 From: march3 Date: Sun, 29 Oct 2023 15:25:00 +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 --- .../solar_system/halley_comet_sim_02.py | 6 ++-- simulators/ursina/entities/entity_utils.py | 36 +++++++++++++++++-- simulators/ursina/ursina_config.py | 4 +-- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/sim_scenes/solar_system/halley_comet_sim_02.py b/sim_scenes/solar_system/halley_comet_sim_02.py index 61677b0..73bbd50 100644 --- a/sim_scenes/solar_system/halley_comet_sim_02.py +++ b/sim_scenes/solar_system/halley_comet_sim_02.py @@ -117,8 +117,10 @@ class HalleyCometSim: @return: """ # 创建天空 - UrsinaConfig.trail_type = "line" - UrsinaConfig.trail_length = 91 + # UrsinaConfig.trail_type = "line" + # UrsinaConfig.trail_length = 91 + UrsinaConfig.trail_type = "curve_line" + UrsinaConfig.trail_length = 420 # UrsinaConfig.trail_length = 1000 UrsinaConfig.trail_thickness_factor = 3 # camera.clip_plane_near = 0.1 diff --git a/simulators/ursina/entities/entity_utils.py b/simulators/ursina/entities/entity_utils.py index cfd2803..1a364c4 100644 --- a/simulators/ursina/entities/entity_utils.py +++ b/simulators/ursina/entities/entity_utils.py @@ -118,12 +118,20 @@ def create_trails(parent): # # 如果拖尾在天体的内部也不要生成 # if self_pos_distance < self.scale_x + (self.trail_scale / 2): # pass - # 如果位置比较近,就不创建拖尾了,保证拖尾间隔一定的距离 - if last_pos_distance < parent.trail_scale * trail_int_scale: # 间隔距离不小于1.2倍的拖尾球体 - return + if UrsinaConfig.trail_type == "curve_line": + # 如果位置比较近,就不创建拖尾了,保证拖尾间隔一定的距离 + # if last_pos_distance < parent.trail_scale * trail_int_scale / 5: + if last_pos_distance < 10: + return + else: + # 如果位置比较近,就不创建拖尾了,保证拖尾间隔一定的距离 + if last_pos_distance < parent.trail_scale * trail_int_scale: # 间隔距离不小于1.2倍的拖尾球体 + return if UrsinaConfig.trail_type == "line": trail = create_trail_line(parent, pos) # 拖尾为线条 + elif UrsinaConfig.trail_type == "curve_line": + trail = create_trail_curve_line(parent, pos) # 拖尾为曲线条 else: trail = create_trail_sphere(parent, pos) # 拖尾为球体 @@ -247,6 +255,28 @@ def create_trail_line(parent, pos): return trail +def create_trail_curve_line(parent, pos): + """ + 在天体当前的位置创建一个拖尾球体 + @param pos: + @return: + """ + trail = None + if hasattr(parent, "trail_last_pos"): + trail_last_pos = parent.trail_last_pos + if distance(pos, trail_last_pos) > 0: + trail = Entity(model=Mesh( + vertices=((pos[0], pos[1], pos[2]), (trail_last_pos[0], trail_last_pos[1], trail_last_pos[2])), + mode='line', + thickness=UrsinaConfig.trail_thickness_factor), + color=parent.trail_color, alpha=0.5) + trail.set_light_off() + parent.last_trail = trail + + parent.trail_last_pos = pos + return trail + + def create_rings(parent): """ 创建行星环(使用土星贴图) diff --git a/simulators/ursina/ursina_config.py b/simulators/ursina/ursina_config.py index 15c11a9..f18132a 100644 --- a/simulators/ursina/ursina_config.py +++ b/simulators/ursina/ursina_config.py @@ -42,8 +42,8 @@ class UrsinaConfig: # 拖尾球体的数量 trail_length = 100 - # 拖尾的类型(球体、线条) - trail_type = "sphere" # trail_type="line" or trail_type="sphere" + # 拖尾的类型(球体、线条、曲线条) + trail_type = "sphere" # line sphere curve_line # 默认秒数(0表示默认) seconds_per = 0 # # 控制摄像机动作速度(天体越大,速度越快,天体越小,速度越慢) -- GitLab