diff --git a/sim_scenes/featured/solar_system_explorer.py b/sim_scenes/featured/solar_system_explorer.py index 908406bea260d2502b467dfbbc8ad7b14169e02c..969879e81abeaff5cef61c3f21197c299668455b 100644 --- a/sim_scenes/featured/solar_system_explorer.py +++ b/sim_scenes/featured/solar_system_explorer.py @@ -11,7 +11,7 @@ from ursina import camera, application, lerp, Vec3 from bodies import Sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto from common.celestial_data_service import init_bodies_reality_pos_vels, conv_to_astropy_time, \ set_solar_system_celestial_position, init_bodies_pos_vels, get_init_pos_vels_2 -from common.consts import SECONDS_PER_YEAR,SECONDS_PER_MINUTE,SECONDS_PER_HOUR, AU +from common.consts import SECONDS_PER_YEAR, SECONDS_PER_MINUTE, SECONDS_PER_HOUR, AU from common.func import calculate_distance from bodies import Earth from objs import QuadObj, CircleObj, Obj, CoreValagaClas @@ -41,28 +41,28 @@ class SolarSystemExplorer(UniverseSimScenes): show_trail = False self.SIZE_FACTOR = 0.01 self.init_pos = [2 * AU, 2 * AU, -10 * AU] - self.sun = Sun(size_scale=20e2*self.SIZE_FACTOR, show_trail=show_trail, + self.sun = Sun(size_scale=20e2 * self.SIZE_FACTOR, show_trail=show_trail, # color=(255, 250, 245), # texture="", texture="sun_light.jpg" ) self.sun.glows = (24, 1.008, 0.04) self.sun.set_resolution(200) - self.mercury = Mercury(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.6, show_trail=show_trail) - self.venus = Venus(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.5, show_trail=show_trail) - self.earth = Earth(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.5, rotate_angle=0, show_trail=show_trail) - self.mars = Mars(size_scale=2e3*self.SIZE_FACTOR, distance_scale=1.4, show_trail=show_trail) - self.jupiter = Jupiter(size_scale=0.3e3*self.SIZE_FACTOR, distance_scale=0.7, show_trail=show_trail) - self.saturn = Saturn(size_scale=0.3e3*self.SIZE_FACTOR, distance_scale=0.52, show_trail=show_trail) - self.uranus = Uranus(size_scale=0.8e3*self.SIZE_FACTOR, distance_scale=0.34, show_trail=show_trail) - self.neptune = Neptune(size_scale=0.8e3*self.SIZE_FACTOR, distance_scale=0.25, show_trail=show_trail) - self.pluto = Pluto(size_scale=1e4*self.SIZE_FACTOR, distance_scale=0.23, show_trail=show_trail) + self.mercury = Mercury(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.6, show_trail=show_trail) + self.venus = Venus(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.5, show_trail=show_trail) + self.earth = Earth(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.5, rotate_angle=0, show_trail=show_trail) + self.mars = Mars(size_scale=2e3 * self.SIZE_FACTOR, distance_scale=1.4, show_trail=show_trail) + self.jupiter = Jupiter(size_scale=0.3e3 * self.SIZE_FACTOR, distance_scale=0.7, show_trail=show_trail) + self.saturn = Saturn(size_scale=0.3e3 * self.SIZE_FACTOR, distance_scale=0.52, show_trail=show_trail) + self.uranus = Uranus(size_scale=0.8e3 * self.SIZE_FACTOR, distance_scale=0.34, show_trail=show_trail) + self.neptune = Neptune(size_scale=0.8e3 * self.SIZE_FACTOR, distance_scale=0.25, show_trail=show_trail) + self.pluto = Pluto(size_scale=1e4 * self.SIZE_FACTOR, distance_scale=0.23, show_trail=show_trail) D = AU / 10 self.camera_target = CoreValagaClas(name="摄像机镜头", mass=1e30, color=(111, 140, 255), # init_position=[0, 0, 0], init_position=self.init_pos, init_velocity=[0, 0, 0], - size_scale=1e3*self.SIZE_FACTOR).set_ignore_gravity(True) + size_scale=1e3 * self.SIZE_FACTOR).set_ignore_gravity(True) self.bodies = [ self.sun, # 太阳 @@ -78,6 +78,28 @@ class SolarSystemExplorer(UniverseSimScenes): self.camera_target ] + self.sun.target_offset = [1, 1, 1.1] + self.mercury.target_offset = [1, 1, 1.002] + self.venus.target_offset = [1, 1, 1] + self.earth.target_offset = [1, 1, 1] + self.mars.target_offset = [1, 1, 1] + self.jupiter.target_offset = [1, 1, 1] + self.saturn.target_offset = [1, 1, 1] + self.uranus.target_offset = [1, 1, 1] + self.neptune.target_offset = [1, 1, 1] + self.pluto.target_offset = [1, 1, 1] + + self.sun.dd_factor = 1.5 + self.mercury.dd_factor = 5 + self.venus.dd_factor = 1.5 + self.earth.dd_factor = 1.5 + self.mars.dd_factor = 1.5 + self.jupiter.dd_factor = 1.5 + self.saturn.dd_factor = 1.5 + self.uranus.dd_factor = 1.5 + self.neptune.dd_factor = 1.5 + self.pluto.dd_factor = 1.5 + init_bodies_pos_vels(self.bodies, init_pos_vels_fun=self.get_init_pos_vels) def get_init_pos_vels(self): @@ -117,8 +139,6 @@ class SolarSystemExplorer(UniverseSimScenes): init_pos_vels['pluto']['vel'] = [-4.699999809265137, 0.0, -0.007128323893994093] return init_pos_vels - - def build(self): """ 构建太阳系系统以及哈雷彗星 @@ -147,7 +167,7 @@ class SolarSystemExplorer(UniverseSimScenes): # camera.clip_plane_near = 0.1 camera.clip_plane_far = 51000 - application.time_scale = 0.001 + application.time_scale = 0.0001 # camera.fov = 60 # self.current_stage = self.stage_01 @@ -245,7 +265,11 @@ class SolarSystemExplorer(UniverseSimScenes): target = self.get_target() target_scale = target.planet.scale_x - target_pos = target.planet.position + Vec3(0, target_scale * (3 / 5), 0) + target_offset = target.target_offset + target_pos = target.planet.position + \ + Vec3(target_scale * (target_offset[0] - 1), + target_scale * (1 / 10) * target_offset[1], + target_scale * (target_offset[2] - 1)) self.camera_target.planet.look_at(target_pos) @@ -253,21 +277,21 @@ class SolarSystemExplorer(UniverseSimScenes): if not hasattr(target, "distance"): target.distance = dd + self.camera_target.planet.position = lerp(self.camera_target.planet.position, target_pos, camera.speed * time.dt * target.distance) - camera_target_pos =self.camera_target.planet.position + camera_target_pos = self.camera_target.planet.position dd2 = distance(camera.position, camera_target_pos) camera.position = lerp(camera.position, camera_target_pos, - camera.speed * 0.99 * time.dt * target.distance) + camera.speed * 1 * time.dt * target.distance) - if dd < target_scale * 3 and dd2 < target_scale*3: + if dd < target_scale * target.dd_factor and dd2 < target_scale * target.dd_factor: if target is not None: target.is_arrived = True camera_look_at(self.camera_target, rotation_z=0) - # print(camera.position) print(target.name, target_scale, dd, self.camera_target.planet.position) # print(dd)