diff --git a/sim_lab/wormhole_sim.py b/sim_lab/wormhole_sim.py index 91f2fb1ed9611be51dbd01afccfdb0c1afbf8675..88e101ff9a43d6ffab0bb930145fa9a9e03a79aa 100644 --- a/sim_lab/wormhole_sim.py +++ b/sim_lab/wormhole_sim.py @@ -6,7 +6,9 @@ # link :https://gitcode.net/pythoncr/ # python_version :3.9 # ============================================================================== -from bodies import Sun, Earth +import random + +from bodies import Sun, Earth, FixedStar from sim_scenes.universe_sim_scenes import UniverseSimScenes from simulators.ursina.entities.entity_utils import create_ambient_light from bodies.universe_body import create_universe_body @@ -64,10 +66,12 @@ class WormholeSim(UniverseSimScenes): self.current_universe = None self.target_universe = None self.universes = [] + self.fixed_stars = [] self.wormhole_infos = {} self.create_universes() - self.bodies = [self.camera_target] + self.universes + self.create_fixed_stars() + self.bodies = [self.camera_target] + self.universes + self.fixed_stars def create_universe(self, name, idx, position): if name is None: @@ -77,9 +81,29 @@ class WormholeSim(UniverseSimScenes): init_position=position, init_velocity=[0, 0, 0], ) - + universe_body.set_light_disable(True) return universe_body + def fixed_stars_D(self): + r = random.random() + D = self.D * (2 + r) + return D + + def create_fixed_stars(self): + D = self.fixed_stars_D + positions = [[D(), D(), D()], [D(), D(), -D()], [D(), -D(), D()], + [D(), -D(), -D()], [-D(), D(), D()], [-D(), D(), -D()], + [-D(), -D(), D()], [-D(), -D(), -D()]] + + # positions = [[D, D, D], [D, D, -D], [D, -D, D], [D, 0, D], [D, 0, - D], [D, 0, D], + # [D, -D, -D], [-D, D, D], [-D, D, -D], [0, -D, -D], [0, D, D], [0, D, -D], + # [-D, -D, D], [-D, -D, -D], [-D, -D, 0], [-D, -D, 0]] + + for position in positions: + fixed_star = FixedStar(color=(200, 200, 200), size_scale=0.5, init_position=position) + fixed_star.glows = (0, 1.1, 1.08) + self.fixed_stars.append(fixed_star) + def create_universes(self): D = self.D # camera_target_init_speed: int = 100 @@ -155,7 +179,7 @@ class WormholeSim(UniverseSimScenes): # camera.scale = 1000 # camera.parent = camera_target.planet # camera.rotation_x = 90 - camera.fov = 100 + camera.fov = 120 for universe in self.universes: universe.planet.collider = "sphere" @@ -458,6 +482,7 @@ class WormholeSim(UniverseSimScenes): gravity_works=False, # bg_music='sounds/no_glory.mp3', timer_enabled=True, + video_recoder=True, show_exit_button=False, show_grid=False, show_camera_info=False, diff --git a/tools/sim_video_cap.bat b/tools/sim_video_cap.bat index 33d44c7345a130f003467b9176629490cf15ce5e..025a05f31efb86ea73dff7ec34a8d73767f9862a 100644 --- a/tools/sim_video_cap.bat +++ b/tools/sim_video_cap.bat @@ -8,6 +8,7 @@ SET SimDir=%DISK%/works/gitcode/universe_sim SET SimFileDir=%1 SET SimFileName=%2 SET param3=%3 +SET param4=%4 SET PYTHONPATH=%SimDir%; SET SimFilePath=%SimDir%/sim_scenes/%SimFileDir%/ @@ -20,6 +21,6 @@ cd %SimFilePath% start python -m %SimFileName% %3 cd %SimDir%\tools -python -m sim_video_cap --save_name=%param3% +python -m sim_video_cap --save_name=%param3% --wait=%param4% diff --git a/tools/sim_video_cap.py b/tools/sim_video_cap.py index 550d686ecd137e10786298706d007733131ceb86..7cb7b7ab149bf6e297877bc4277d309da1ef4ec6 100644 --- a/tools/sim_video_cap.py +++ b/tools/sim_video_cap.py @@ -26,11 +26,14 @@ def get_args(): parser.add_argument('--fps', type=int, default=30, help='frame per second') parser.add_argument('--total_time', type=int, default=10000000, help='video total time') parser.add_argument('--save_name', type=str, default='video.mp4', help='save file name') + parser.add_argument('--wait', type=int, default=0, help='wait for recoding') + # parser.add_argument('--screen_type', default=0, type=int, choices=[0, 1], help='1: full screen, 0: region screen') args = parser.parse_args() print("total_time:", args.total_time) print("fps:", args.fps) print("save_name:", args.save_name) + print("wait:", args.wait) return args @@ -67,6 +70,17 @@ def screen_shot(window_img_dc): # return True # return False +def wait_sec(sec=0): + print("等待 %s 秒" % sec) + times = sec * 100 + while True: + if sec < 0: + return + time.sleep(0.01) + times -= 1 + if times <= 0: + return + def sim_window_screen_shot(wait_ses=-1): times = wait_ses * 100 @@ -115,6 +129,9 @@ if __name__ == '__main__': print("没有找到模拟器窗口,录屏失败!") exit(1) + if args.wait > 0: + wait_sec(args.wait) + # show_image(img) video = create_video(args, img.shape[0], img.shape[1]) imageNum = 0