# -*- coding:utf-8 -*- # title :水滴 # description :水滴 # author :Python超人 # date :2023-08-02 # link :https://gitcode.net/pythoncr/ # python_version :3.8 # ============================================================================== from objs import RockSnow class HalleComet(RockSnow): """ 哈雷彗星 根据最新信息,哈雷彗星的平均运行速度约为每小时 70,000 英里或每小时 126,000 公里 。 该速度表示彗星穿过太阳系的速度。 值得注意的是,截至 2023 年,所提供的信息都是准确的。 质量: 10^15kg 远日点: 35.1 AU(2023年12月9日) 近日点: 0.586 AU 上次通过近日点:1986年2月9日 下次通过近日点:2061年7月28日 平均密度: 0.6(估计的范围在0.2至1.5g/cm) 均密度: 1 g/cm³ -> 1✕10³ kg/m³ 来源:https://www.cgmodel.com/model/500318.html """ def __init__(self, name="哈雷彗星", mass=10e15, init_position=[0, 0, 0], init_velocity=[0, 0, 0], size_scale=1.0, distance_scale=1.0, ignore_mass=False, density=1e3, color=(255, 255, 255), trail_color=None, show_name=False, rotation=(0, 0, 0), parent=None, gravity_only_for=[]): params = { "name": name, "mass": mass, "init_position": init_position, "init_velocity": init_velocity, "density": density, "color": color, "size_scale": size_scale, "texture": "comet.jpg", "distance_scale": distance_scale, "ignore_mass": ignore_mass, "trail_color": trail_color, "show_name": show_name, "parent": parent, "rotation": rotation, "gravity_only_for": gravity_only_for, } super().__init__(**params) # create_cone(radius, height, subdivisions, r=0.1) # self.comet_info = (0.18, 2.0, 100, 0.2) self.comet_info = (0.07, 0.20, 2, 100) from ursina.prefabs.primitives import Shader matcap_shader = Shader(name='matcap_shader', language=Shader.GLSL, vertex='''#version 140 uniform mat4 p3d_ModelViewProjectionMatrix; uniform mat4 p3d_ModelMatrix; uniform mat4 p3d_ModelViewMatrix; uniform mat3 p3d_NormalMatrix; in vec4 p3d_Vertex; in vec3 p3d_Normal; out vec3 eye; out vec3 view_normal; // reflect alternative: // r = e - 2. * dot( n, e ) * n; void main() { gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex; eye = normalize(vec3(p3d_ModelViewMatrix * vec4(p3d_Vertex.xyz, 1.0))); view_normal = normalize( p3d_NormalMatrix * p3d_Normal ); } ''', fragment=''' #version 130 uniform sampler2D p3d_Texture0; uniform vec4 p3d_ColorScale; in vec3 eye; in vec3 view_normal; out vec4 fragColor; void main() { vec3 r = reflect( eye, view_normal ); float m = 2. * sqrt( pow( r.x, 2. ) + pow( r.y, 2. ) + pow( r.z + 1., 2. ) ); vec2 vN = r.xy / m + .5; vec3 base = texture2D( p3d_Texture0, vN ).rgb; // vec3 base = texture2D( p3d_Texture0, uv ).rgb; fragColor = vec4( base, 1. ) * p3d_ColorScale; } ''', ) if __name__ == '__main__': shader = matcap_shader halle_comet = HalleComet() halle_comet.init_velocity = [0, 0, -10] print(halle_comet) def on_ready(): halle_comet.planet.rotation_x = 90 halle_comet.planet.shader = shader, halle_comet.planet.init_scale = halle_comet.planet.scale_x * 2 halle_comet.planet.comet_trail.set_alpha(0.1) # halle_comet.planet.init_update = halle_comet.planet.update def on_timer_changed(time_data): # halle_comet.planet.init_update = body.planet.update halle_comet.planet.scale_z = halle_comet.planet.init_scale halle_comet.show_demo(size_scale=1000000, on_ready_fun=on_ready, on_timer_changed_fun=on_timer_changed)