提交 50d20da6 编写于 作者: 三月三net's avatar 三月三net

Python超人-宇宙模拟器

上级 81cbd6e3
...@@ -34,6 +34,15 @@ def conv_to_vec4_color(colour: tuple, alpha=1): ...@@ -34,6 +34,15 @@ def conv_to_vec4_color(colour: tuple, alpha=1):
# color = ursina_color.rgba(r, g, b, a) # color = ursina_color.rgba(r, g, b, a)
def white_brightest(color, min_value=220):
# x = y/255*(255-min_value) + min_value
r, g, b = color
r = min(255, int(r / 255 * (255 - min_value) + min_value))
g = min(255, int(g / 255 * (255 - min_value) + min_value))
b = min(255, int(b / 255 * (255 - min_value) + min_value))
return r, g, b
def brightest(color): def brightest(color):
if isinstance(color, tuple): if isinstance(color, tuple):
r, g, b = color r, g, b = color
...@@ -51,6 +60,28 @@ def brightest(color): ...@@ -51,6 +60,28 @@ def brightest(color):
return [r, g, b] return [r, g, b]
def fixed_star_color_brightest(c, ursina_color=False):
if c is None:
bc = (255, 255, 255)
else:
bc = white_brightest(c)
if ursina_color:
return conv_to_vec4_color(bc)
return bc
def brightest_color(c, ursina_color=False):
if c is None:
bc = (255, 255, 255)
else:
bc = brightest(c)
if ursina_color:
return conv_to_vec4_color(bc)
return bc
def trail_color_brightest(bodies): def trail_color_brightest(bodies):
""" """
天体尾巴最亮 天体尾巴最亮
......
...@@ -192,7 +192,7 @@ class SolarSystemRealitySim: ...@@ -192,7 +192,7 @@ class SolarSystemRealitySim:
# 创建太阳系天体 # 创建太阳系天体
self.create_bodies() self.create_bodies()
# glows = (glow_num:10, glow_scale:1.03 glow_alpha:0.1~1) # glows = (glow_num:10, glow_scale:1.03 glow_alpha:0.1~1)
self.sun.glows = (80, 1.005, 0.01) self.sun.glows = (4, 1.005, 0.1)
# 对地球进行初始化 # 对地球进行初始化
self.init_earth() self.init_earth()
......
...@@ -11,10 +11,12 @@ from ursina import Ursina, window, Entity, Mesh, SmoothFollow, Texture, clamp, t ...@@ -11,10 +11,12 @@ from ursina import Ursina, window, Entity, Mesh, SmoothFollow, Texture, clamp, t
camera, color, mouse, Vec2, Vec3, Vec4, Text, \ camera, color, mouse, Vec2, Vec3, Vec4, Text, \
load_texture, held_keys, destroy, PointLight, DirectionalLight, distance load_texture, held_keys, destroy, PointLight, DirectionalLight, distance
from common import color_utils
from common.image_utils import find_texture
from simulators.ursina.entities.body_trail import BodyTrail, BodyTrailLine from simulators.ursina.entities.body_trail import BodyTrail, BodyTrailLine
from simulators.ursina.ursina_config import UrsinaConfig from simulators.ursina.ursina_config import UrsinaConfig
from common.color_utils import adjust_brightness, conv_to_vec4_color, get_inverse_color from common.color_utils import adjust_brightness, conv_to_vec4_color, get_inverse_color
from simulators.ursina.ursina_mesh import create_torus from simulators.ursina.ursina_mesh import create_torus, create_circle
from common.func import find_file from common.func import find_file
import math import math
import numpy as np import numpy as np
...@@ -356,10 +358,24 @@ def create_fixed_star_lights(fixed_star): ...@@ -356,10 +358,24 @@ def create_fixed_star_lights(fixed_star):
# _color = color.white # _color = color.white
_color = fixed_star.body_view.body.color _color = fixed_star.body_view.body.color
_color = color.rgba(_color[0] / 255, _color[1] / 255, _color[2] / 255, 1) _color = color.rgba(_color[0] / 255, _color[1] / 255, _color[2] / 255, 1)
for i in range(glow_num): for i in range(glow_num):
glow_entity = Entity(parent=fixed_star, model='sphere', color=_color, glow_entity = Entity(parent=fixed_star, model='sphere', color=_color,
scale=math.pow(glow_scale, i + 1), alpha=glow_alpha) scale=math.pow(glow_scale, i + 1), alpha=glow_alpha)
if glow_num < 5:
bright_color = color_utils.fixed_star_color_brightest(fixed_star.body_view.body.color, True)
glow_circle = create_circle(parent=None, pos=fixed_star.position, scale=fixed_star.scale * 1.8)
glow_circle.texture = find_texture("fixed_star_glow.png")
glow_circle.color = bright_color
glow_circle.set_light_off(True)
def glow_circle_update():
# from ursina import camera
glow_circle.look_at(camera)
glow_circle.update = glow_circle_update
if hasattr(fixed_star.body_view.body, "light_on"): if hasattr(fixed_star.body_view.body, "light_on"):
if fixed_star.body_view.body.light_on: if fixed_star.body_view.body.light_on:
for i in range(2): for i in range(2):
......
...@@ -473,7 +473,7 @@ def create_line(from_pos, to_pos, parent=None, alpha=1.0, len_scale=1, set_light ...@@ -473,7 +473,7 @@ def create_line(from_pos, to_pos, parent=None, alpha=1.0, len_scale=1, set_light
def create_circle(parent=None, pos=Vec3(0, 0, 0), thickness=1, scale=1, color=color.white, alpha=1): def create_circle(parent=None, pos=Vec3(0, 0, 0), thickness=1, scale=1, color=color.white, alpha=1):
circle = Entity(parent=parent, model="circle", thickness=thickness, scale=scale, position=pos, circle = Entity(parent=parent, model="circle", thickness=thickness, scale=scale, position=pos,
color=color, alpha=alpha) color=color, alpha=alpha, double_sided=True)
return circle return circle
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册