Skip to content
This repository was archived by the owner on Jan 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
390fe18
animate the "up" direction
jumpy-cat Dec 22, 2024
ca71bd7
new physics attempt 1 (fail)
jumpy-cat Dec 24, 2024
1395076
physicsv3 basics
jumpy-cat Dec 25, 2024
f5b6e77
implement step behaviors, check normals
jumpy-cat Dec 25, 2024
e3af94e
refactor physics v1 and v2 to physics::legacy
jumpy-cat Dec 25, 2024
3fd15f9
try resolve phantom file
jumpy-cat Dec 25, 2024
c3001e4
resolve phantom file attempt 2
jumpy-cat Dec 25, 2024
aa43a96
Update mod.rs Dec25 Dongha
DDHH25 Dec 25, 2024
3083b61
work on ensuring numeric stability
jumpy-cat Dec 25, 2024
7d0c9a7
Merge branch 'dev' into DDHH25-patch-2
jumpy-cat Dec 25, 2024
b6fbd17
Merge pull request #4 from jumpy-cat/DDHH25-patch-2
jumpy-cat Dec 25, 2024
7fc5ca6
add broken dynamic time-step system
jumpy-cat Dec 25, 2024
6541730
experiment with numeric stability
jumpy-cat Dec 26, 2024
faa0880
no energy loss, but com offset is zero
jumpy-cat Dec 26, 2024
42d37de
refactor in prep for alternative step definitons
jumpy-cat Dec 27, 2024
2c1dbd9
truely fixed timestep
jumpy-cat Dec 27, 2024
d84a801
Merge pull request #5 from jumpy-cat/main
jumpy-cat Dec 27, 2024
2636b74
feat: access higher derivatives of hermite
jumpy-cat Dec 27, 2024
30d893b
fix: preoptimization no longer needed for running physics
jumpy-cat Dec 27, 2024
44f02ec
show velocity as line
jumpy-cat Dec 27, 2024
59ba104
fix: add null checks to position edits
jumpy-cat Dec 27, 2024
6a4de9d
attempt to locate issue
jumpy-cat Dec 27, 2024
fc639ba
basics
jumpy-cat Dec 28, 2024
21a2a6b
cop-out rotation update improves stability
jumpy-cat Dec 28, 2024
3bb0b3d
rustfmt
jumpy-cat Dec 28, 2024
5510e75
fix: quaternion multiplication wrong
jumpy-cat Dec 28, 2024
c3e2e40
feat: make generic over MyFloat
jumpy-cat Dec 28, 2024
8b2454f
find good value for MAX_TORQUE
jumpy-cat Dec 28, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 86 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 24 additions & 1 deletion godot/Main.tscn
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[gd_scene load_steps=11 format=3 uid="uid://br738eihq2cus"]
[gd_scene load_steps=13 format=3 uid="uid://br738eihq2cus"]

[ext_resource type="Script" path="res://main.gd" id="1_w5dqp"]
[ext_resource type="PackedScene" uid="uid://c3vuka4b0smhh" path="res://control_point.tscn" id="2_o72i1"]
Expand All @@ -20,6 +20,12 @@ LineEdit/colors/font_color = Color(0.875, 0.875, 0.875, 1)

[sub_resource type="Theme" id="Theme_b8h1k"]

[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mwvwa"]
shading_mode = 0
vertex_color_use_as_albedo = true

[sub_resource type="ImmediateMesh" id="ImmediateMesh_oh57q"]

[node name="Main" type="Node3D"]
script = ExtResource("1_w5dqp")
control_point_scene = ExtResource("2_o72i1")
Expand All @@ -44,6 +50,7 @@ mesh = SubResource("ImmediateMesh_hneuq")

[node name="Anim" parent="." instance=ExtResource("4_s6s4g")]
visible = false
script = null

[node name="VBoxContainer" type="VBoxContainer" parent="."]
offset_left = 40.0
Expand All @@ -69,6 +76,15 @@ text = "Optimizer"
layout_mode = 2
text = "-- iter/s"

[node name="CheckBox" type="CheckBox" parent="VBoxContainer"]
layout_mode = 2
text = "Manual Physics"

[node name="AnimStepEdit" parent="VBoxContainer" instance=ExtResource("5_svsvn")]
layout_mode = 2
_name = "Anim Step:"
value = 0.01

[node name="LREdit" parent="VBoxContainer" instance=ExtResource("5_svsvn")]
layout_mode = 2
_name = "LR:"
Expand Down Expand Up @@ -125,10 +141,17 @@ use_native_dialog = true

[node name="SaveDialogue" type="FileDialog" parent="."]
size = Vector2i(303, 180)
ok_button_text = "Save"
access = 2
use_native_dialog = true

[node name="HLNormal" type="MeshInstance3D" parent="."]
material_overlay = SubResource("StandardMaterial3D_mwvwa")
mesh = SubResource("ImmediateMesh_oh57q")

[connection signal="toggled" from="VBoxContainer/CheckButton" to="." method="_on_check_button_toggled"]
[connection signal="toggled" from="VBoxContainer/CheckBox" to="." method="_on_check_box_toggled"]
[connection signal="value_changed" from="VBoxContainer/AnimStepEdit" to="." method="_on_anim_step_edit_value_changed"]
[connection signal="value_changed" from="VBoxContainer/LREdit" to="." method="_on_lr_edit_value_changed"]
[connection signal="value_changed" from="VBoxContainer/MassEdit" to="." method="_on_mass_edit_value_changed"]
[connection signal="value_changed" from="VBoxContainer/GravityEdit" to="." method="_on_gravity_edit_value_changed"]
Expand Down
21 changes: 20 additions & 1 deletion godot/anim.tscn
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://dp1iulbnn6wvy"]
[gd_scene load_steps=8 format=3 uid="uid://dp1iulbnn6wvy"]

[sub_resource type="GDScript" id="GDScript_gxknm"]

[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_38yrt"]
diffuse_mode = 2
Expand All @@ -12,7 +14,17 @@ height = 2.0
[sub_resource type="SphereShape3D" id="SphereShape3D_r0wmb"]
radius = 1.0

[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_q7vat"]
diffuse_mode = 2

[sub_resource type="CapsuleMesh" id="CapsuleMesh_ncu23"]
material = SubResource("StandardMaterial3D_q7vat")
height = 5.0

[sub_resource type="ImmediateMesh" id="ImmediateMesh_teg0u"]

[node name="Anim" type="Node3D"]
script = SubResource("GDScript_gxknm")

[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("SphereMesh_su52i")
Expand All @@ -21,3 +33,10 @@ mesh = SubResource("SphereMesh_su52i")

[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
shape = SubResource("SphereShape3D_r0wmb")

[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.70093, 0)
mesh = SubResource("CapsuleMesh_ncu23")

[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
mesh = SubResource("ImmediateMesh_teg0u")
74 changes: 37 additions & 37 deletions godot/control_point.gd
Original file line number Diff line number Diff line change
Expand Up @@ -11,64 +11,64 @@ signal clicked(index)

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var mat: StandardMaterial3D = StandardMaterial3D.new()
mat.vertex_color_use_as_albedo = true
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
axes.material_override = mat
var m: ImmediateMesh = axes.mesh
m.clear_surfaces()
#m.surface_begin(Mesh.PRIMITIVE_TRIANGLES)
var mat: StandardMaterial3D = StandardMaterial3D.new()
mat.vertex_color_use_as_albedo = true
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
axes.material_override = mat
var m: ImmediateMesh = axes.mesh
m.clear_surfaces()
#m.surface_begin(Mesh.PRIMITIVE_TRIANGLES)

m.surface_begin(Mesh.PRIMITIVE_LINES)
m.surface_begin(Mesh.PRIMITIVE_LINES)

m.surface_set_color(Color.RED)
m.surface_add_vertex(Vector3.ZERO)
m.surface_set_color(Color.RED)
m.surface_add_vertex(Vector3(100, 0, 0))
m.surface_set_color(Color.RED)
m.surface_add_vertex(Vector3.ZERO)
m.surface_set_color(Color.RED)
m.surface_add_vertex(Vector3(100, 0, 0))

m.surface_set_color(Color.GREEN)
m.surface_add_vertex(Vector3.ZERO)
m.surface_set_color(Color.GREEN)
m.surface_add_vertex(Vector3(0, 100, 0))
m.surface_set_color(Color.GREEN)
m.surface_add_vertex(Vector3.ZERO)
m.surface_set_color(Color.GREEN)
m.surface_add_vertex(Vector3(0, 100, 0))

m.surface_set_color(Color.SKY_BLUE)
m.surface_add_vertex(Vector3.ZERO)
m.surface_set_color(Color.SKY_BLUE)
m.surface_add_vertex(Vector3(0, 0, 100))
m.surface_set_color(Color.SKY_BLUE)
m.surface_add_vertex(Vector3.ZERO)
m.surface_set_color(Color.SKY_BLUE)
m.surface_add_vertex(Vector3(0, 0, 100))

m.surface_end()
m.surface_end()

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
if selected or hovered:
scale = Vector3(2.0, 2.0, 2.0)
else:
scale = Vector3.ONE
axes.visible = selected
if selected or hovered:
scale = Vector3(2.0, 2.0, 2.0)
else:
scale = Vector3.ONE
axes.visible = selected


func initialize(pos: Vector3, index_: int) -> void:
translate(pos)
index = index_
translate(pos)
index = index_


## Increase size when mouse hovering over control point
func _on_static_body_3d_mouse_entered() -> void:
hovered = true
hovered = true


## Reset size when mouse leaves control point
func _on_static_body_3d_mouse_exited() -> void:
hovered = false
hovered = false


## Handle mouse click on control point
func _on_static_body_3d_input_event(
_camera: Node,
event: InputEvent,
_event_position: Vector3,
_normal: Vector3,
_shape_idx: int
_camera: Node,
event: InputEvent,
_event_position: Vector3,
_normal: Vector3,
_shape_idx: int
) -> void:
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed():
clicked.emit(index)
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed():
clicked.emit(index)
Loading