extends MeshInstance3D var mat: StandardMaterial3D var ang: float = 0.0 var poslist: PackedVector3Array = PackedVector3Array() func _ready(): mat = StandardMaterial3D.new() mat.albedo_color = Color(1, 1, 1, 0.25) mat.cull_mode = BaseMaterial3D.CULL_DISABLED mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA mesh = ImmediateMesh.new() var n = 30 for i in range(0, n, 1): poslist.append(Vector3.ZERO) func _process(delta): # store positon to PackedVector3Array for i in range(0, poslist.size(), 1): var x1 = -12.0 + 4.0 * sin(deg_to_rad((ang + 10 * i) * 0.75)) var y1 = 4.0 + 4.0 * sin(deg_to_rad(ang + 10 * i)) var z1 = 10 - 1.0 * i poslist[i] = Vector3(x1, y1, z1) # set ImmediateMesh mesh.clear_surfaces() mesh.surface_begin(Mesh.PRIMITIVE_TRIANGLES, mat) # mesh.surface_set_color(Color.WHITE) var r = 0.5 for i in range(0, poslist.size() - 2, 1): var p0 = get_rect_pos(poslist[i], poslist[i+1], r) var p1 = get_rect_pos(poslist[i+1], poslist[i+2], r) mesh.surface_add_vertex(p0[3]) mesh.surface_add_vertex(p0[0]) mesh.surface_add_vertex(p1[3]) mesh.surface_add_vertex(p1[3]) mesh.surface_add_vertex(p0[0]) mesh.surface_add_vertex(p1[0]) mesh.surface_add_vertex(p0[0]) mesh.surface_add_vertex(p0[2]) mesh.surface_add_vertex(p1[0]) mesh.surface_add_vertex(p1[0]) mesh.surface_add_vertex(p0[2]) mesh.surface_add_vertex(p1[2]) mesh.surface_add_vertex(p0[2]) mesh.surface_add_vertex(p0[1]) mesh.surface_add_vertex(p1[2]) mesh.surface_add_vertex(p1[2]) mesh.surface_add_vertex(p0[1]) mesh.surface_add_vertex(p1[1]) mesh.surface_add_vertex(p0[1]) mesh.surface_add_vertex(p0[3]) mesh.surface_add_vertex(p1[1]) mesh.surface_add_vertex(p1[1]) mesh.surface_add_vertex(p0[3]) mesh.surface_add_vertex(p1[3]) mesh.surface_end() ang += 120.0 * delta func get_rect_pos(v0: Vector3, v1: Vector3, r: float): var v = v1 - v0 var va = v.cross(Vector3.UP).normalized() var vb = v.cross(va).normalized() var pv0 = v0 + r * vb var pv1 = v0 - r * vb var pv2 = v0 + r * va var pv3 = v0 - r * va return [pv0, pv1, pv2, pv3]