Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Python_超人
宇宙模拟器
提交
0bcb3730
宇宙模拟器
项目概览
Python_超人
/
宇宙模拟器
通知
19
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
宇宙模拟器
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
0bcb3730
编写于
12月 10, 2023
作者:
三月三net
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Python超人-宇宙模拟器
上级
628ad79b
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
118 addition
and
17 deletion
+118
-17
sim_scenes/featured/transformed_mars_ani.py
sim_scenes/featured/transformed_mars_ani.py
+31
-0
sim_scenes/fiction/transformed_mars_ani_3d.py
sim_scenes/fiction/transformed_mars_ani_3d.py
+87
-17
未找到文件。
sim_scenes/featured/transformed_mars_ani.py
0 → 100644
浏览文件 @
0bcb3730
# -*- coding:utf-8 -*-
# title :改造后火星的效果
# description :改造后火星的效果
# author :Python超人
# date :2023-12-01
# link :https://gitcode.net/pythoncr/
# python_version :3.9
# ==============================================================================
import
os
import
sys
from
bodies
import
Earth
from
common.consts
import
SECONDS_PER_HOUR
from
objs
import
Satellite2
from
sim_scenes.fiction.transformed_mars_ani_3d
import
transformed_mars_ani
from
sim_scenes.func
import
ursina_run
from
simulators.ursina.entities.body_timer
import
TimeData
from
simulators.ursina.entities.entity_utils
import
create_directional_light
from
simulators.ursina.ursina_event
import
UrsinaEvent
if
__name__
==
'__main__'
:
transformed_mars_ani
(
transformed_texture
=
"mars.jpg"
,
texture
=
"mars.png"
,
bg_texture
=
"bg_pan.jpg"
,
bg_texture_rotation
=
True
,
camera3d
=
False
,
append_satellite
=
True
,
append_space_station
=
True
,
size_scale
=
1.5
)
sim_scenes/fiction/transformed_mars_ani_3d.py
浏览文件 @
0bcb3730
...
...
@@ -12,10 +12,13 @@ import sys
from
bodies
import
Earth
from
common.consts
import
SECONDS_PER_HOUR
from
objs
import
Satellite2
from
objs.sci_fi_space_station
import
ScifiSpaceStation
from
sim_scenes.func
import
ursina_run
,
create_sphere_sky
from
simulators.ursina.entities.body_timer
import
TimeData
from
simulators.ursina.entities.entity_utils
import
create_directional_light
from
simulators.ursina.ursina_config
import
UrsinaConfig
from
simulators.ursina.ursina_event
import
UrsinaEvent
from
ursina
import
application
,
camera
def
create_satellites
():
...
...
@@ -25,14 +28,15 @@ def create_satellites():
# {"position": [0, 0, -12000], "velocity": [5.75, 0, 0]},
# {"position": [0, 8000, 0], "velocity": [7.05, 0, 0]},
# {"position": [0, -12002, 0], "velocity": [5.75, 0, 0]},
{
"position"
:
[
0
,
0
,
14000
],
"velocity"
:
[
0
,
5
,
0
]},
# {"position": [0, 0, 14000], "velocity": [0, 5, 0]},
{
"position"
:
[
0
,
0
,
35000
],
"velocity"
:
[
4
/
2
,
3
/
2
,
0
]},
# {"position": [0, 0, -10000], "velocity": [0, 6.3, 0]},
]
satellites
=
[]
for
i
,
info
in
enumerate
(
satellite_infos
):
# Satellite Satellite2
satellite
=
Satellite2
(
name
=
f
'卫星
{
i
+
1
}
'
,
mass
=
4.4e10
,
size_scale
=
2
e2
,
color
=
(
255
,
200
,
0
),
size_scale
=
1
e2
,
color
=
(
255
,
200
,
0
),
init_position
=
info
[
"position"
],
init_velocity
=
info
[
"velocity"
])
# info["satellite"] = satellite
...
...
@@ -40,8 +44,22 @@ def create_satellites():
return
satellites
def
create_space_station
(
mars_radius
):
space_station
=
ScifiSpaceStation
(
name
=
"空间站"
,
size_scale
=
0.1
,
# init_position=[0.8e4, 0, -2.5e4],
# init_position=[0.1 * mars_radius, 0, -3.70e4], # (1.80 * mars.radius, 0, -38000
init_position
=
[
0.1
*
mars_radius
,
0
,
-
4.60e4
],
# init_position=[0.1 * mars_radius, 0, -6.2e4],
init_velocity
=
[
0
,
0
,
0
])
\
.
set_ignore_gravity
(
True
)
return
space_station
def
transformed_mars_ani
(
transformed_texture
=
None
,
texture
=
None
,
camera3d
=
False
,
bg_texture
=
None
,
append_satellite
=
True
):
bg_texture
=
None
,
bg_texture_rotation
=
False
,
append_satellite
=
True
,
append_space_station
=
False
,
size_scale
=
1
):
trans_texture
=
transformed_texture
.
replace
(
".jpg"
,
"_trans.png"
)
# texture = transformed_texture
# texture = os.path.join("transformed", texture)
...
...
@@ -54,21 +72,21 @@ def transformed_mars_ani(transformed_texture=None, texture=None, camera3d=False,
rotate_angle
=
0
,
init_position
=
[
0
,
0
,
0
],
init_velocity
=
[
0
,
0
,
0
],
size_scale
=
1
)
size_scale
=
size_scale
)
transformed_mars
=
Earth
(
texture
=
os
.
path
.
join
(
"transformed"
,
transformed_texture
),
rotate_angle
=
0
,
init_position
=
[
0
,
0
,
0
],
init_velocity
=
[
0
,
0
,
0
],
size_scale
=
0.9996
).
set_ignore_gravity
(
True
)
size_scale
=
size_scale
*
0.9996
).
set_ignore_gravity
(
True
)
trans_mars
=
Earth
(
texture
=
os
.
path
.
join
(
"transformed"
,
trans_texture
),
rotate_angle
=
0
,
init_position
=
[
0
,
0
,
0
],
init_velocity
=
[
0
,
0
,
0
],
size_scale
=
0.9990
).
set_ignore_gravity
(
True
)
size_scale
=
size_scale
*
0.9990
).
set_ignore_gravity
(
True
)
bodies
=
[
mars
,
transformed_mars
,
trans_mars
]
...
...
@@ -76,13 +94,17 @@ def transformed_mars_ani(transformed_texture=None, texture=None, camera3d=False,
clouds
=
Earth
(
name
=
"云层"
,
texture
=
"transparent_clouds.png"
,
rotate_angle
=
0
,
rotation_speed
=
18
,
size_scale
=
1.015
,
parent
=
mars
)
size_scale
=
size_scale
*
1.015
,
parent
=
mars
)
if
append_satellite
:
satellites
=
create_satellites
()
bodies
=
bodies
+
satellites
bodies
.
append
(
clouds
)
if
append_space_station
:
space_station
=
create_space_station
(
mars
.
radius
)
bodies
.
append
(
space_station
)
if
camera3d
:
# TODO: 开启3D摄像机
from
simulators.ursina.entities.camera3d
import
Camera3d
...
...
@@ -90,19 +112,50 @@ def transformed_mars_ani(transformed_texture=None, texture=None, camera3d=False,
Camera3d
.
init
(
eye_distance
=
1000
)
def
on_ready
():
if
bg_texture
is
not
None
:
sky
=
create_sphere_sky
(
texture
=
bg_texture
,
scale
=
10000
,
rotation_y
=
180
)
sky
=
create_sphere_sky
(
texture
=
bg_texture
,
scale
=
10000
,
rotation_x
=
10
,
rotation_y
=
180
,
rotation_z
=-
70
)
if
bg_texture_rotation
:
def
sky_rotation
():
sky
.
rotation_y
+=
0.01
sky
.
update
=
sky_rotation
# 为了较好的立体效果,可以增加太阳光线,光线指向火星(target=mars)
create_directional_light
(
position
=
(
300
,
0
,
-
300
),
light_num
=
3
,
target
=
mars
)
if
append_satellite
:
for
satellite
in
satellites
:
satellite
.
planet
.
enabled
=
False
def
on_timer_changed
(
time_data
:
TimeData
):
# mars.planet.opacity = 0.01
if
append_space_station
:
space_station
.
dt_scale
=
1
application
.
time_scale
=
0.01
camera
.
clip_plane_near
=
0.0005
camera
.
clip_plane_far
=
1000000
if
append_space_station
:
def
update
():
from
ursina
import
Vec3
,
distance
if
camera
.
step_index
==
3
:
space_station
.
planet
.
rotation_z
+=
0.005
*
space_station
.
dt_scale
space_station
.
planet
.
position
+=
Vec3
(
0
,
0
,
0.00000005
*
space_station
.
dt_scale
)
d
=
distance
(
space_station
.
planet
,
mars
.
planet
)
/
UrsinaConfig
.
SCALE_FACTOR
if
d
<
mars
.
radius
*
5
:
space_station
.
planet
.
scale
*=
pow
(
0.999
,
72
/
space_station
.
dt_scale
)
if
d
<
mars
.
radius
*
1.01
:
camera
.
step_index
=
4
space_station
.
planet
.
update
=
update
camera
.
step_index
=
1
def
step_01
(
time_data
:
TimeData
):
opacity
=
round
((
time_data
.
total_hours
-
1
)
/
10
,
2
)
clouds_opacity
=
round
(
opacity
-
0.5
,
2
)
show_satellites
=
False
if
opacity
>
1.0
:
opacity
=
1.0
elif
opacity
<
0.0
:
...
...
@@ -110,20 +163,35 @@ def transformed_mars_ani(transformed_texture=None, texture=None, camera3d=False,
# clouds.planet.enabled = False
if
opacity
>=
1.0
:
mars
.
planet
.
enabled
=
False
# 原火星完全消失
camera
.
step_index
=
2
if
clouds_opacity
>
1.0
:
clouds_opacity
=
1.0
show_satellites
=
True
elif
clouds_opacity
<
0.0
:
clouds_opacity
=
0.0
clouds
.
planet
.
alpha
=
clouds_opacity
# 火星云层渐渐显示
mars
.
planet
.
alpha
=
1
-
opacity
# 原火星渐渐消失
# show_satellites = True
if
show_satellites
and
append_satellite
:
def
step_02
(
time_data
:
TimeData
):
if
append_satellite
:
for
satellite
in
satellites
:
satellite
.
planet
.
enabled
=
True
# satellite.planet.look_at(mars.planet)
camera
.
step_index
=
3
def
on_timer_changed
(
time_data
:
TimeData
):
# mars.planet.opacity = 0.01
if
append_space_station
:
space_station
.
dt_scale
=
time_data
.
dt
if
camera
.
step_index
==
1
:
step_01
(
time_data
)
elif
camera
.
step_index
==
2
:
step_02
(
time_data
)
elif
camera
.
step_index
==
4
:
exit
(
0
)
# if time_data.total_hours > 10:
# trans_mars.planet.enabled = True
...
...
@@ -148,7 +216,9 @@ def transformed_mars_ani(transformed_texture=None, texture=None, camera3d=False,
# 使用 ursina 查看的运行效果
# 常用快捷键: P:运行和暂停 O:重新开始 I:显示天体轨迹
# position = 左-右+、上+下-、前+后-
ursina_run
(
bodies
,
SECONDS_PER_HOUR
/
10
,
ursina_run
(
bodies
,
SECONDS_PER_HOUR
/
10
,
# SECONDS_PER_HOUR,
position
=
(
0
,
0
,
-
38000
),
show_grid
=
False
,
show_camera_info
=
False
,
...
...
@@ -168,7 +238,7 @@ def transformed_mars_ani(transformed_texture=None, texture=None, camera3d=False,
show_control_info
=
False
,
timer_enabled
=
True
,
# show_timer=True,
view_closely
=
0.00
1
)
# 近距离观看 view_closely=True或0.001
view_closely
=
0.00
02
)
# 近距离观看 view_closely=True或0.001
if
__name__
==
'__main__'
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录