From bf91d8a270066ab1333189e4448e3ec9abdbabc7 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Fri, 7 Apr 2023 13:47:45 +0200 Subject: [PATCH] SkinnedMesh: Use correct bounding volume for raycasting. --- src/objects/Mesh.js | 15 +++++++++------ src/objects/SkinnedMesh.js | 25 +++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/objects/Mesh.js b/src/objects/Mesh.js index 8127eb7e878133..3f7433766f8e75 100644 --- a/src/objects/Mesh.js +++ b/src/objects/Mesh.js @@ -143,12 +143,6 @@ class Mesh extends Object3D { } - if ( this.isSkinnedMesh ) { - - this.applyBoneTransform( index, target ); - - } - return target; } @@ -191,8 +185,17 @@ class Mesh extends Object3D { } + this._computeIntersections( raycaster, intersects ); + + } + + _computeIntersections( raycaster, intersects ) { + let intersection; + const geometry = this.geometry; + const material = this.material; + const index = geometry.index; const position = geometry.attributes.position; const uv = geometry.attributes.uv; diff --git a/src/objects/SkinnedMesh.js b/src/objects/SkinnedMesh.js index 7e31eb256904d4..de77b40cac89cc 100644 --- a/src/objects/SkinnedMesh.js +++ b/src/objects/SkinnedMesh.js @@ -14,6 +14,8 @@ const _vector3 = /*@__PURE__*/ new Vector3(); const _matrix4 = /*@__PURE__*/ new Matrix4(); const _vertex = /*@__PURE__*/ new Vector3(); +const _sphere = /*@__PURE__*/ new Sphere(); + class SkinnedMesh extends Mesh { constructor( geometry, material ) { @@ -95,6 +97,29 @@ class SkinnedMesh extends Mesh { } + raycast( raycaster, intersects ) { + + if ( this.boundingSphere === null ) this.computeBoundingSphere(); + + _sphere.copy( this.boundingSphere ); + _sphere.applyMatrix4( this.matrixWorld ); + + if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return; + + this._computeIntersections( raycaster, intersects ); + + } + + getVertexPosition( index, target ) { + + super.getVertexPosition( index, target ); + + this.applyBoneTransform( index, target ); + + return target; + + } + bind( skeleton, bindMatrix ) { this.skeleton = skeleton;