From d2c8838f6d48c358105fc861fb1b7a237451c631 Mon Sep 17 00:00:00 2001 From: Evgenii Starostin Date: Mon, 2 Nov 2026 23:17:07 +0300 Subject: [PATCH 1/4] feat: add look-at 3D example --- movement/look_at_3d/.gitattributes | 42 +++++++ movement/look_at_3d/.gitignore | 11 ++ movement/look_at_3d/README.md | 87 ++++++++++++++ movement/look_at_3d/game.project | 26 +++++ movement/look_at_3d/input/game.input_binding | 4 + .../look_at_3d/main/camera_controller.script | 5 + .../look_at_3d/main/floor_uv_scale.script | 3 + movement/look_at_3d/main/images/colormap.png | Bin 0 -> 7904 bytes .../look_at_3d/main/images/texture_02.png | Bin 0 -> 2727 bytes movement/look_at_3d/main/main.collection | 107 ++++++++++++++++++ .../main/materials/skinned/unlit_skinned.fp | 16 +++ .../materials/skinned/unlit_skinned.material | 30 +++++ .../main/materials/skinned/unlit_skinned.vp | 27 +++++ .../look_at_3d/main/materials/static/unlit.fp | 25 ++++ .../main/materials/static/unlit.material | 40 +++++++ .../look_at_3d/main/materials/static/unlit.vp | 21 ++++ movement/look_at_3d/main/models/base.glb | Bin 0 -> 13636 bytes movement/look_at_3d/main/models/turret.glb | Bin 0 -> 101324 bytes .../look_at_3d/main/turret_controller.script | 83 ++++++++++++++ movement/look_at_3d/thumbnail.webp | Bin 0 -> 161590 bytes 20 files changed, 527 insertions(+) create mode 100644 movement/look_at_3d/.gitattributes create mode 100644 movement/look_at_3d/.gitignore create mode 100644 movement/look_at_3d/README.md create mode 100644 movement/look_at_3d/game.project create mode 100644 movement/look_at_3d/input/game.input_binding create mode 100644 movement/look_at_3d/main/camera_controller.script create mode 100644 movement/look_at_3d/main/floor_uv_scale.script create mode 100644 movement/look_at_3d/main/images/colormap.png create mode 100644 movement/look_at_3d/main/images/texture_02.png create mode 100644 movement/look_at_3d/main/main.collection create mode 100644 movement/look_at_3d/main/materials/skinned/unlit_skinned.fp create mode 100644 movement/look_at_3d/main/materials/skinned/unlit_skinned.material create mode 100644 movement/look_at_3d/main/materials/skinned/unlit_skinned.vp create mode 100644 movement/look_at_3d/main/materials/static/unlit.fp create mode 100644 movement/look_at_3d/main/materials/static/unlit.material create mode 100644 movement/look_at_3d/main/materials/static/unlit.vp create mode 100644 movement/look_at_3d/main/models/base.glb create mode 100644 movement/look_at_3d/main/models/turret.glb create mode 100644 movement/look_at_3d/main/turret_controller.script create mode 100644 movement/look_at_3d/thumbnail.webp diff --git a/movement/look_at_3d/.gitattributes b/movement/look_at_3d/.gitattributes new file mode 100644 index 00000000..187cdf4a --- /dev/null +++ b/movement/look_at_3d/.gitattributes @@ -0,0 +1,42 @@ +# Defold Protocol Buffer Text Files (https://github.com/github/linguist/issues/5091) +*.animationset linguist-language=JSON5 +*.atlas linguist-language=JSON5 +*.camera linguist-language=JSON5 +*.collection linguist-language=JSON5 +*.collectionfactory linguist-language=JSON5 +*.collectionproxy linguist-language=JSON5 +*.collisionobject linguist-language=JSON5 +*.cubemap linguist-language=JSON5 +*.display_profiles linguist-language=JSON5 +*.factory linguist-language=JSON5 +*.font linguist-language=JSON5 +*.gamepads linguist-language=JSON5 +*.go linguist-language=JSON5 +*.gui linguist-language=JSON5 +*.input_binding linguist-language=JSON5 +*.label linguist-language=JSON5 +*.material linguist-language=JSON5 +*.mesh linguist-language=JSON5 +*.model linguist-language=JSON5 +*.particlefx linguist-language=JSON5 +*.render linguist-language=JSON5 +*.sound linguist-language=JSON5 +*.sprite linguist-language=JSON5 +*.spinemodel linguist-language=JSON5 +*.spinescene linguist-language=JSON5 +*.texture_profiles linguist-language=JSON5 +*.tilemap linguist-language=JSON5 +*.tilesource linguist-language=JSON5 + +# Defold JSON Files +*.buffer linguist-language=JSON + +# Defold GLSL Shaders +*.fp linguist-language=GLSL +*.vp linguist-language=GLSL + +# Defold Lua Files +*.editor_script linguist-language=Lua +*.render_script linguist-language=Lua +*.script linguist-language=Lua +*.gui_script linguist-language=Lua diff --git a/movement/look_at_3d/.gitignore b/movement/look_at_3d/.gitignore new file mode 100644 index 00000000..0f4d6130 --- /dev/null +++ b/movement/look_at_3d/.gitignore @@ -0,0 +1,11 @@ +/.editor_settings +/.internal +/build +.externalToolBuilders +.DS_Store +Thumbs.db +.lock-wscript +*.pyc +.project +.cproject +builtins \ No newline at end of file diff --git a/movement/look_at_3d/README.md b/movement/look_at_3d/README.md new file mode 100644 index 00000000..14d3c845 --- /dev/null +++ b/movement/look_at_3d/README.md @@ -0,0 +1,87 @@ +--- +title: Rotate 3D object towards the mouse cursor +brief: Learn how to rotate a 3D object towards the mouse cursor. +author_ids: + - evgenii-starostin +scripts: turret_controller.script, camera_controller.script +thumbnail: thumbnail.webp +tags: movement +--- +This example demonstrates how to rotate a 3D object towards the mouse cursor. + +## Project Structure +``` +- camera.go + - camera + - camera_controller.script + floor.go + - floor + - floor_uv_scale.script + root.go + - turret.go + - turret + - turret_controller.script + - base +``` + +## How It Works +First, the script that controls the rotation needs a reference to the active +camera. This is done by sending a message in `init`: + +```lua + msg.post("/turret#turret_controller", "register_camera", { + url = msg.url("#camera") + }) +``` + +In turret_controller.script we use the camera to build a picking ray — +a line that starts at the camera and goes through the cursor position in the +world: + +```lua +-- z = 0 -> near plane, z = 1 -> far plane (normalized depth, not world units) +local p0 = camera.screen_to_world( + vmath.vector3(self.mouse_x, self.mouse_y, 0), + self.camera_url +) + +local p1 = camera.screen_to_world( + vmath.vector3(self.mouse_x, self.mouse_y, 1), + self.camera_url +) + +local ray = p1 - p0 +``` + +Then we intersect this ray with the horizontal plane at the turret's height +(y = gun_pos.y): +```lua +go.update_world_transform() +local gun_pos = go.get_world_position() + +-- avoid division by zero when the ray is parallel to the plane +if math.abs(ray.y) < 0.00001 then + return +end + +local t = (gun_pos.y - p0.y) / ray.y +local target = p0 + ray * t +``` + +Finally, we compute the yaw angle from the turret to the target and rotate +the object around the Y axis. atan2(dx, dz) assumes the model faces +Z +at angle 0: +```lua +local dx = target.x - gun_pos.x +local dz = target.z - gun_pos.z + +if math.abs(dx) + math.abs(dz) < 0.00001 then + return +end + +local angle = math.atan2(dx, dz) + +go.set_rotation( + vmath.quat_rotation_y(angle) +) +``` \ No newline at end of file diff --git a/movement/look_at_3d/game.project b/movement/look_at_3d/game.project new file mode 100644 index 00000000..860e1296 --- /dev/null +++ b/movement/look_at_3d/game.project @@ -0,0 +1,26 @@ +[bootstrap] +main_collection = /main/main.collectionc + +[script] +shared_state = 1 + +[display] +width = 960 +height = 640 +high_dpi = 1 + +[android] +input_method = HiddenInputField + +[physics] +gravity_y = -1000.0 +scale = 0.01 + +[html5] +scale_mode = stretch + +[project] +title = Look at 3D +dependencies = +developer = + diff --git a/movement/look_at_3d/input/game.input_binding b/movement/look_at_3d/input/game.input_binding new file mode 100644 index 00000000..8ed1d4e4 --- /dev/null +++ b/movement/look_at_3d/input/game.input_binding @@ -0,0 +1,4 @@ +mouse_trigger { + input: MOUSE_BUTTON_1 + action: "touch" +} diff --git a/movement/look_at_3d/main/camera_controller.script b/movement/look_at_3d/main/camera_controller.script new file mode 100644 index 00000000..825ede18 --- /dev/null +++ b/movement/look_at_3d/main/camera_controller.script @@ -0,0 +1,5 @@ +function init(self) + msg.post("/turret#turret_controller", "register_camera", { + url = msg.url("#camera") + }) +end diff --git a/movement/look_at_3d/main/floor_uv_scale.script b/movement/look_at_3d/main/floor_uv_scale.script new file mode 100644 index 00000000..2d8b2e49 --- /dev/null +++ b/movement/look_at_3d/main/floor_uv_scale.script @@ -0,0 +1,3 @@ +function init(self) + go.set("#floor", "uv_scale", vmath.vector4(10, 10, 0, 0)) +end diff --git a/movement/look_at_3d/main/images/colormap.png b/movement/look_at_3d/main/images/colormap.png new file mode 100644 index 0000000000000000000000000000000000000000..7873e94ff8e86ce5d16edabd32c45e6cd966eceb GIT binary patch literal 7904 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 literal 0 HcmV?d00001 diff --git a/movement/look_at_3d/main/images/texture_02.png b/movement/look_at_3d/main/images/texture_02.png new file mode 100644 index 0000000000000000000000000000000000000000..19aad62c22cb0d88d941e6ef7d3d42f987daac63 GIT binary patch literal 2727 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7+9ErRIjnw1`sdZ(btiIVPik{pF~z5pFhAS z#P#*tcQ0SR`Tzg_^;>r?U%OfUDYJxufy>#`#WAGf*4yijye$C&E(hJ1#5Nds9N4es zQXqNh>%0F3v%S(!E`9Y#J%jy2&Fg>Pe}8_lPabIGC?GWi5~Lee>b=}|pDBV=oulfZ zA#j5^VU_o;_uCo7MuUXR5ctM0l&?4;6XtKV;f^YDZ`ZS YOkb>Y{%3I9hy)qo>FVdQ&MBb@0H8!=asU7T literal 0 HcmV?d00001 diff --git a/movement/look_at_3d/main/main.collection b/movement/look_at_3d/main/main.collection new file mode 100644 index 00000000..0a7446b2 --- /dev/null +++ b/movement/look_at_3d/main/main.collection @@ -0,0 +1,107 @@ +name: "main" +scale_along_z: 0 +embedded_instances { + id: "root" + children: "turret" + data: "embedded_components {\n" + " id: \"base\"\n" + " type: \"model\"\n" + " data: \"mesh: \\\"/main/models/base.glb\\\"\\n" + "skeleton: \\\"/main/models/base.glb\\\"\\n" + "animations: \\\"/main/models/base.glb\\\"\\n" + "name: \\\"{{NAME}}\\\"\\n" + "materials {\\n" + " name: \\\"default\\\"\\n" + " material: \\\"/main/materials/static/unlit.material\\\"\\n" + " textures {\\n" + " sampler: \\\"tex0\\\"\\n" + " texture: \\\"/main/images/colormap.png\\\"\\n" + " }\\n" + "}\\n" + "\"\n" + "}\n" + "" +} +embedded_instances { + id: "camera" + data: "components {\n" + " id: \"camera_controller\"\n" + " component: \"/main/camera_controller.script\"\n" + "}\n" + "embedded_components {\n" + " id: \"camera\"\n" + " type: \"camera\"\n" + " data: \"aspect_ratio: 1.0\\n" + "fov: 1.047\\n" + "near_z: 2.1\\n" + "far_z: 30.0\\n" + "auto_aspect_ratio: 1\\n" + "orthographic_zoom: 116.0\\n" + "\"\n" + "}\n" + "" + position { + y: 5.0 + z: 6.0 + } + rotation { + x: -0.34202015 + w: 0.9396926 + } +} +embedded_instances { + id: "turret" + data: "components {\n" + " id: \"turret_controller\"\n" + " component: \"/main/turret_controller.script\"\n" + "}\n" + "embedded_components {\n" + " id: \"turret\"\n" + " type: \"model\"\n" + " data: \"mesh: \\\"/main/models/turret.glb\\\"\\n" + "skeleton: \\\"/main/models/turret.glb\\\"\\n" + "animations: \\\"/main/models/turret.glb\\\"\\n" + "name: \\\"{{NAME}}\\\"\\n" + "materials {\\n" + " name: \\\"default\\\"\\n" + " material: \\\"/main/materials/skinned/unlit_skinned.material\\\"\\n" + " textures {\\n" + " sampler: \\\"tex0\\\"\\n" + " texture: \\\"/main/images/colormap.png\\\"\\n" + " }\\n" + "}\\n" + "\"\n" + "}\n" + "" +} +embedded_instances { + id: "floor" + data: "components {\n" + " id: \"floor_uv_scale\"\n" + " component: \"/main/floor_uv_scale.script\"\n" + "}\n" + "embedded_components {\n" + " id: \"floor\"\n" + " type: \"model\"\n" + " data: \"mesh: \\\"/builtins/assets/gltf/quad.gltf\\\"\\n" + "name: \\\"{{NAME}}\\\"\\n" + "materials {\\n" + " name: \\\"default\\\"\\n" + " material: \\\"/main/materials/static/unlit.material\\\"\\n" + " textures {\\n" + " sampler: \\\"tex0\\\"\\n" + " texture: \\\"/main/images/texture_02.png\\\"\\n" + " }\\n" + "}\\n" + "\"\n" + "}\n" + "" + rotation { + x: -0.70710677 + w: 0.70710677 + } + scale3 { + x: 100.0 + y: 100.0 + } +} diff --git a/movement/look_at_3d/main/materials/skinned/unlit_skinned.fp b/movement/look_at_3d/main/materials/skinned/unlit_skinned.fp new file mode 100644 index 00000000..a70f9994 --- /dev/null +++ b/movement/look_at_3d/main/materials/skinned/unlit_skinned.fp @@ -0,0 +1,16 @@ +#version 140 + +in vec2 var_texcoord0; +uniform mediump sampler2D tex0; +out lowp vec4 final_color; +uniform fs_uniforms +{ + mediump vec4 tint; +}; + +void main() +{ + vec4 tint_pm = vec4(tint.xyz * tint.w, tint.w); + vec4 color = texture(tex0, var_texcoord0.xy) * tint_pm; + final_color = color; +} \ No newline at end of file diff --git a/movement/look_at_3d/main/materials/skinned/unlit_skinned.material b/movement/look_at_3d/main/materials/skinned/unlit_skinned.material new file mode 100644 index 00000000..97ccdf60 --- /dev/null +++ b/movement/look_at_3d/main/materials/skinned/unlit_skinned.material @@ -0,0 +1,30 @@ +name: "unlit" +tags: "model" +vertex_program: "/main/materials/skinned/unlit_skinned.vp" +fragment_program: "/main/materials/skinned/unlit_skinned.fp" +vertex_space: VERTEX_SPACE_LOCAL +vertex_constants { + name: "mtx_worldview" + type: CONSTANT_TYPE_WORLDVIEW +} +vertex_constants { + name: "mtx_proj" + type: CONSTANT_TYPE_PROJECTION +} +fragment_constants { + name: "tint" + type: CONSTANT_TYPE_USER + value { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } +} +samplers { + name: "tex0" + wrap_u: WRAP_MODE_CLAMP_TO_EDGE + wrap_v: WRAP_MODE_CLAMP_TO_EDGE + filter_min: FILTER_MODE_MIN_LINEAR + filter_mag: FILTER_MODE_MAG_LINEAR +} diff --git a/movement/look_at_3d/main/materials/skinned/unlit_skinned.vp b/movement/look_at_3d/main/materials/skinned/unlit_skinned.vp new file mode 100644 index 00000000..8d408be2 --- /dev/null +++ b/movement/look_at_3d/main/materials/skinned/unlit_skinned.vp @@ -0,0 +1,27 @@ +#version 140 + +in highp vec4 position; +in mediump vec2 texcoord0; +in mediump vec4 bone_weights; +in mediump vec4 bone_indices; + +out mediump vec2 var_texcoord0; + +uniform vs_uniforms +{ + mediump mat4 mtx_worldview; + mediump mat4 mtx_proj; + mediump vec4 animation_data; +}; + +#include "/builtins/materials/skinning.glsl" + +void main() +{ + vec4 skinned_position = get_skinned_position(position); + + var_texcoord0 = texcoord0; + + vec4 p = mtx_worldview * vec4(skinned_position.xyz, 1.0); + gl_Position = mtx_proj * p; +} \ No newline at end of file diff --git a/movement/look_at_3d/main/materials/static/unlit.fp b/movement/look_at_3d/main/materials/static/unlit.fp new file mode 100644 index 00000000..deaf4bbe --- /dev/null +++ b/movement/look_at_3d/main/materials/static/unlit.fp @@ -0,0 +1,25 @@ +#version 140 + + +in mediump vec2 var_texcoord0; +uniform mediump sampler2D tex0; +in highp mat4 var_view; + +out vec4 out_fragColor; + +uniform fs_uniforms +{ + mediump vec4 tint; +}; + +void main() +{ + // Pre-multiply alpha since all runtime textures already are + vec4 tint_pm = vec4(tint.xyz * tint.w, tint.w); + + // Sample the texture at the fragment's texture coordinates. + vec4 color = texture(tex0, var_texcoord0.xy) * tint_pm; + + // Output the sampled color. + out_fragColor = color; +} \ No newline at end of file diff --git a/movement/look_at_3d/main/materials/static/unlit.material b/movement/look_at_3d/main/materials/static/unlit.material new file mode 100644 index 00000000..ebcfbd02 --- /dev/null +++ b/movement/look_at_3d/main/materials/static/unlit.material @@ -0,0 +1,40 @@ +name: "unlit" +tags: "model" +vertex_program: "/main/materials/static/unlit.vp" +fragment_program: "/main/materials/static/unlit.fp" +vertex_space: VERTEX_SPACE_LOCAL +vertex_constants { + name: "mtx_worldview" + type: CONSTANT_TYPE_WORLDVIEW +} +vertex_constants { + name: "mtx_proj" + type: CONSTANT_TYPE_PROJECTION +} +vertex_constants { + name: "uv_scale" + type: CONSTANT_TYPE_USER + value { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } +} +fragment_constants { + name: "tint" + type: CONSTANT_TYPE_USER + value { + x: 1.0 + y: 1.0 + z: 1.0 + w: 1.0 + } +} +samplers { + name: "tex0" + wrap_u: WRAP_MODE_REPEAT + wrap_v: WRAP_MODE_REPEAT + filter_min: FILTER_MODE_MIN_LINEAR + filter_mag: FILTER_MODE_MAG_LINEAR +} diff --git a/movement/look_at_3d/main/materials/static/unlit.vp b/movement/look_at_3d/main/materials/static/unlit.vp new file mode 100644 index 00000000..ab7c126d --- /dev/null +++ b/movement/look_at_3d/main/materials/static/unlit.vp @@ -0,0 +1,21 @@ +#version 140 + +in highp vec4 position; +in mediump vec2 texcoord0; + +out mediump vec2 var_texcoord0; + +uniform vs_uniforms +{ + mediump mat4 mtx_worldview; + mediump mat4 mtx_proj; + mediump vec4 uv_scale; +}; + +void main() +{ + var_texcoord0 = texcoord0 * uv_scale.xy; + + vec4 p = mtx_worldview * vec4(position.xyz, 1.0); + gl_Position = mtx_proj * p; +} \ No newline at end of file diff --git a/movement/look_at_3d/main/models/base.glb b/movement/look_at_3d/main/models/base.glb new file mode 100644 index 0000000000000000000000000000000000000000..4975dd66270d057d9af8bd017b8c170e96713b65 GIT binary patch literal 13636 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 BONIad literal 0 HcmV?d00001 diff --git a/movement/look_at_3d/main/models/turret.glb b/movement/look_at_3d/main/models/turret.glb new file mode 100644 index 0000000000000000000000000000000000000000..1f64e17e515821bd23df9d47a5532a576ba27122 GIT binary patch literal 101324 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 b^lmL6ATXz)!)uHA9O5;IgZ_yB>Aw9J%J near plane, z = 1 -> far plane (normalized depth, not world units) + local p0 = camera.screen_to_world( + vmath.vector3(self.mouse_x, self.mouse_y, 0), + self.camera_url + ) + + local p1 = camera.screen_to_world( + vmath.vector3(self.mouse_x, self.mouse_y, 1), + self.camera_url + ) + -- Ray direction: from near plane towards far plane + local ray = p1 - p0 + + -- Get the turret's current world position (with parent transforms applied) + go.update_world_transform() + local gun_pos = go.get_world_position() + + -- Ray is parallel to the horizontal plane - no intersection + if math.abs(ray.y) < 0.00001 then + return + end + -- Intersect the ray with the horizontal plane at the gun's height (y = gun_pos.y) + local t = (gun_pos.y - p0.y) / ray.y + local target = p0 + ray * t + + -- Horizontal vector from turret to target + local dx = target.x - gun_pos.x + local dz = target.z - gun_pos.z + + -- Target is directly under/above the turret - direction is undefined + if math.abs(dx) + math.abs(dz) < 0.00001 then + return + end + + -- Yaw angle. atan2(dx, dz) assumes the model faces +Z at angle 0 + local angle = math.atan2(dx, dz) + + -- Rotate the turret around the Y axis + go.set_rotation( + vmath.quat_rotation_y(angle) + ) +end diff --git a/movement/look_at_3d/thumbnail.webp b/movement/look_at_3d/thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..79411585257021bcf1c0c2897fed344d591a89f3 GIT binary patch literal 161590 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 literal 0 HcmV?d00001 From 6b64a19ccf889ceca93ee085d5781dc9d96bc65e Mon Sep 17 00:00:00 2001 From: Evgenii Starostin Date: Mon, 2 Nov 2026 23:58:39 +0300 Subject: [PATCH 2/4] fix: change resolution --- movement/look_at_3d/game.project | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/movement/look_at_3d/game.project b/movement/look_at_3d/game.project index 860e1296..5d522acd 100644 --- a/movement/look_at_3d/game.project +++ b/movement/look_at_3d/game.project @@ -5,8 +5,8 @@ main_collection = /main/main.collectionc shared_state = 1 [display] -width = 960 -height = 640 +width = 720 +height = 720 high_dpi = 1 [android] @@ -17,7 +17,7 @@ gravity_y = -1000.0 scale = 0.01 [html5] -scale_mode = stretch +scale_mode = no_scale [project] title = Look at 3D From 3b1e593da70f09d924f8cb0672e2736a30e8ab94 Mon Sep 17 00:00:00 2001 From: Evgenii Starostin Date: Mon, 2 Nov 2026 23:58:52 +0300 Subject: [PATCH 3/4] fix: rename readme --- movement/look_at_3d/{README.md => example.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename movement/look_at_3d/{README.md => example.md} (100%) diff --git a/movement/look_at_3d/README.md b/movement/look_at_3d/example.md similarity index 100% rename from movement/look_at_3d/README.md rename to movement/look_at_3d/example.md From 22a6cfa39e593bf375399d1036128d596b4d5acf Mon Sep 17 00:00:00 2001 From: Pawel Date: Sun, 8 Nov 2026 20:01:35 +0100 Subject: [PATCH 4/4] Apply batched suggestions from code review Co-authored-by: Pawel --- movement/look_at_3d/example.md | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/movement/look_at_3d/example.md b/movement/look_at_3d/example.md index 14d3c845..8bf74dc8 100644 --- a/movement/look_at_3d/example.md +++ b/movement/look_at_3d/example.md @@ -25,8 +25,7 @@ This example demonstrates how to rotate a 3D object towards the mouse cursor. ``` ## How It Works -First, the script that controls the rotation needs a reference to the active -camera. This is done by sending a message in `init`: +First, the script that controls the rotation needs a reference to the active camera. This is done by sending a message in `init`: ```lua msg.post("/turret#turret_controller", "register_camera", { @@ -34,12 +33,10 @@ camera. This is done by sending a message in `init`: }) ``` -In turret_controller.script we use the camera to build a picking ray — -a line that starts at the camera and goes through the cursor position in the -world: +In turret_controller.script we use the camera to build a picking ray - a line that starts at the camera and goes through the cursor position in the world: ```lua --- z = 0 -> near plane, z = 1 -> far plane (normalized depth, not world units) +-- z = 0 -> near plane, z = 1 -> far plane (normalized depth) local p0 = camera.screen_to_world( vmath.vector3(self.mouse_x, self.mouse_y, 0), self.camera_url @@ -53,8 +50,7 @@ local p1 = camera.screen_to_world( local ray = p1 - p0 ``` -Then we intersect this ray with the horizontal plane at the turret's height -(y = gun_pos.y): +Then we intersect this ray with the horizontal plane at the turret's height (y = gun_pos.y): ```lua go.update_world_transform() local gun_pos = go.get_world_position() @@ -68,9 +64,7 @@ local t = (gun_pos.y - p0.y) / ray.y local target = p0 + ray * t ``` -Finally, we compute the yaw angle from the turret to the target and rotate -the object around the Y axis. atan2(dx, dz) assumes the model faces +Z -at angle 0: +Finally, we compute the yaw angle from the turret to the target and rotate the object around the Y axis. atan2(dx, dz) assumes the model faces +Z at angle 0: ```lua local dx = target.x - gun_pos.x local dz = target.z - gun_pos.z