1 |
- {"ast":null,"code":"import { Vector3, Quaternion, Matrix } from \"../Maths/math.vector.js\";\nimport { Logger } from \"../Misc/logger.js\";\n/**\n * Class used to apply inverse kinematics to bones\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#boneikcontroller\n */\nexport class BoneIKController {\n /**\n * Gets or sets maximum allowed angle\n */\n get maxAngle() {\n return this._maxAngle;\n }\n set maxAngle(value) {\n this._setMaxAngle(value);\n }\n /**\n * Creates a new BoneIKController\n * @param mesh defines the TransformNode to control\n * @param bone defines the bone to control. The bone needs to have a parent bone. It also needs to have a length greater than 0 or a children we can use to infer its length.\n * @param options defines options to set up the controller\n * @param options.targetMesh\n * @param options.poleTargetMesh\n * @param options.poleTargetBone\n * @param options.poleTargetLocalOffset\n * @param options.poleAngle\n * @param options.bendAxis\n * @param options.maxAngle\n * @param options.slerpAmount\n */\n constructor(mesh, bone, options) {\n /**\n * Gets or sets the target position\n */\n this.targetPosition = Vector3.Zero();\n /**\n * Gets or sets the pole target position\n */\n this.poleTargetPosition = Vector3.Zero();\n /**\n * Gets or sets the pole target local offset\n */\n this.poleTargetLocalOffset = Vector3.Zero();\n /**\n * Gets or sets the pole angle\n */\n this.poleAngle = 0;\n /**\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\n */\n this.slerpAmount = 1;\n this._bone1Quat = Quaternion.Identity();\n this._bone1Mat = Matrix.Identity();\n this._bone2Ang = Math.PI;\n this._maxAngle = Math.PI;\n this._rightHandedSystem = false;\n this._bendAxis = Vector3.Right();\n this._slerping = false;\n this._adjustRoll = 0;\n this._notEnoughInformation = false;\n this._bone2 = bone;\n const bone1 = bone.getParent();\n if (!bone1) {\n this._notEnoughInformation = true;\n Logger.Error(\"BoneIKController: bone must have a parent for IK to work.\");\n return;\n }\n this._bone1 = bone1;\n if (this._bone2.children.length === 0 && !this._bone2.length) {\n this._notEnoughInformation = true;\n Logger.Error(\"BoneIKController: bone must not be a leaf or it should have a length for IK to work.\");\n return;\n }\n this.mesh = mesh;\n bone.getSkeleton().computeAbsoluteMatrices();\n const bonePos = bone.getPosition();\n if (bone.getAbsoluteMatrix().determinant() > 0) {\n this._rightHandedSystem = true;\n this._bendAxis.x = 0;\n this._bendAxis.y = 0;\n this._bendAxis.z = -1;\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\n this._adjustRoll = Math.PI * 0.5;\n this._bendAxis.z = 1;\n }\n }\n if (this._bone1.length && this._bone2.length) {\n const boneScale1 = this._bone1.getScale();\n const boneScale2 = this._bone2.getScale();\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\n } else if (this._bone2.children[0]) {\n mesh.computeWorldMatrix(true);\n const pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\n const pos2 = this._bone2.getAbsolutePosition(mesh);\n const pos3 = this._bone1.getAbsolutePosition(mesh);\n this._bone2Length = Vector3.Distance(pos1, pos2);\n this._bone1Length = Vector3.Distance(pos2, pos3);\n } else {\n mesh.computeWorldMatrix(true);\n const boneScale2 = this._bone2.getScale();\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\n const pos2 = this._bone2.getAbsolutePosition(mesh);\n const pos3 = this._bone1.getAbsolutePosition(mesh);\n this._bone1Length = Vector3.Distance(pos2, pos3);\n }\n this._bone1.getRotationMatrixToRef(1 /* Space.WORLD */, mesh, this._bone1Mat);\n this.maxAngle = Math.PI;\n if (options) {\n if (options.targetMesh) {\n this.targetMesh = options.targetMesh;\n this.targetMesh.computeWorldMatrix(true);\n }\n if (options.poleTargetMesh) {\n this.poleTargetMesh = options.poleTargetMesh;\n this.poleTargetMesh.computeWorldMatrix(true);\n } else if (options.poleTargetBone) {\n this.poleTargetBone = options.poleTargetBone;\n } else if (this._bone1.getParent()) {\n this.poleTargetBone = this._bone1.getParent();\n }\n if (options.poleTargetLocalOffset) {\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\n }\n if (options.poleAngle) {\n this.poleAngle = options.poleAngle;\n }\n if (options.bendAxis) {\n this._bendAxis.copyFrom(options.bendAxis);\n }\n if (options.maxAngle) {\n this.maxAngle = options.maxAngle;\n }\n if (options.slerpAmount) {\n this.slerpAmount = options.slerpAmount;\n }\n }\n }\n _setMaxAngle(ang) {\n if (ang < 0) {\n ang = 0;\n }\n if (ang > Math.PI || ang == undefined) {\n ang = Math.PI;\n }\n this._maxAngle = ang;\n const a = this._bone1Length;\n const b = this._bone2Length;\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\n }\n /**\n * Force the controller to update the bones\n */\n update() {\n if (this._notEnoughInformation) {\n return;\n }\n const target = this.targetPosition;\n const poleTarget = this.poleTargetPosition;\n const mat1 = BoneIKController._TmpMats[0];\n const mat2 = BoneIKController._TmpMats[1];\n if (this.targetMesh) {\n target.copyFrom(this.targetMesh.getAbsolutePosition());\n }\n if (this.poleTargetBone) {\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\n } else if (this.poleTargetMesh) {\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\n }\n const bonePos = BoneIKController._TmpVecs[0];\n const zaxis = BoneIKController._TmpVecs[1];\n const xaxis = BoneIKController._TmpVecs[2];\n const yaxis = BoneIKController._TmpVecs[3];\n const upAxis = BoneIKController._TmpVecs[4];\n const tmpQuat = BoneIKController._TmpQuat;\n this._bone1.getAbsolutePositionToRef(this.mesh, bonePos);\n poleTarget.subtractToRef(bonePos, upAxis);\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\n upAxis.y = 1;\n } else {\n upAxis.normalize();\n }\n target.subtractToRef(bonePos, yaxis);\n yaxis.normalize();\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\n zaxis.normalize();\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\n xaxis.normalize();\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\n const a = this._bone1Length;\n const b = this._bone2Length;\n let c = Vector3.Distance(bonePos, target);\n if (this._maxReach > 0) {\n c = Math.min(this._maxReach, c);\n }\n let acosa = (b * b + c * c - a * a) / (2 * b * c);\n let acosb = (c * c + a * a - b * b) / (2 * c * a);\n if (acosa > 1) {\n acosa = 1;\n }\n if (acosb > 1) {\n acosb = 1;\n }\n if (acosa < -1) {\n acosa = -1;\n }\n if (acosb < -1) {\n acosb = -1;\n }\n const angA = Math.acos(acosa);\n const angB = Math.acos(acosb);\n let angC = -angA - angB;\n if (this._rightHandedSystem) {\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\n mat2.multiplyToRef(mat1, mat1);\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\n mat2.multiplyToRef(mat1, mat1);\n } else {\n const _tmpVec = BoneIKController._TmpVecs[5];\n _tmpVec.copyFrom(this._bendAxis);\n _tmpVec.x *= -1;\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\n mat2.multiplyToRef(mat1, mat1);\n }\n if (this.poleAngle) {\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\n mat1.multiplyToRef(mat2, mat1);\n }\n if (this._bone1) {\n if (this.slerpAmount < 1) {\n if (!this._slerping) {\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\n }\n Quaternion.FromRotationMatrixToRef(mat1, tmpQuat);\n Quaternion.SlerpToRef(this._bone1Quat, tmpQuat, this.slerpAmount, this._bone1Quat);\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\n this._bone1.setRotationQuaternion(this._bone1Quat, 1 /* Space.WORLD */, this.mesh);\n this._slerping = true;\n } else {\n this._bone1.setRotationMatrix(mat1, 1 /* Space.WORLD */, this.mesh);\n this._bone1Mat.copyFrom(mat1);\n this._slerping = false;\n }\n this._updateLinkedTransformRotation(this._bone1);\n }\n this._bone2.setAxisAngle(this._bendAxis, angC, 0 /* Space.LOCAL */);\n this._updateLinkedTransformRotation(this._bone2);\n this._bone2Ang = angC;\n }\n _updateLinkedTransformRotation(bone) {\n if (bone._linkedTransformNode) {\n if (!bone._linkedTransformNode.rotationQuaternion) {\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\n }\n bone.getRotationQuaternionToRef(0 /* Space.LOCAL */, null, bone._linkedTransformNode.rotationQuaternion);\n }\n }\n}\nBoneIKController._TmpVecs = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\nBoneIKController._TmpQuat = Quaternion.Identity();\nBoneIKController._TmpMats = [Matrix.Identity(), Matrix.Identity()];","map":{"version":3,"names":["Vector3","Quaternion","Matrix","Logger","BoneIKController","maxAngle","_maxAngle","value","_setMaxAngle","constructor","mesh","bone","options","targetPosition","Zero","poleTargetPosition","poleTargetLocalOffset","poleAngle","slerpAmount","_bone1Quat","Identity","_bone1Mat","_bone2Ang","Math","PI","_rightHandedSystem","_bendAxis","Right","_slerping","_adjustRoll","_notEnoughInformation","_bone2","bone1","getParent","Error","_bone1","children","length","getSkeleton","computeAbsoluteMatrices","bonePos","getPosition","getAbsoluteMatrix","determinant","x","y","z","boneScale1","getScale","boneScale2","_bone1Length","scaling","_bone2Length","computeWorldMatrix","pos1","getAbsolutePosition","pos2","pos3","Distance","getRotationMatrixToRef","targetMesh","poleTargetMesh","poleTargetBone","copyFrom","bendAxis","ang","undefined","a","b","_maxReach","sqrt","cos","update","target","poleTarget","mat1","_TmpMats","mat2","getAbsolutePositionFromLocalToRef","TransformCoordinatesToRef","getWorldMatrix","_TmpVecs","zaxis","xaxis","yaxis","upAxis","tmpQuat","_TmpQuat","getAbsolutePositionToRef","subtractToRef","normalize","CrossToRef","FromXYZAxesToRef","c","min","acosa","acosb","angA","acos","angB","angC","RotationYawPitchRollToRef","multiplyToRef","RotationAxisToRef","_tmpVec","FromRotationMatrixToRef","SlerpToRef","setRotationQuaternion","setRotationMatrix","_updateLinkedTransformRotation","setAxisAngle","_linkedTransformNode","rotationQuaternion","getRotationQuaternionToRef"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Bones/boneIKController.js"],"sourcesContent":["import { Vector3, Quaternion, Matrix } from \"../Maths/math.vector.js\";\nimport { Logger } from \"../Misc/logger.js\";\n/**\n * Class used to apply inverse kinematics to bones\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#boneikcontroller\n */\nexport class BoneIKController {\n /**\n * Gets or sets maximum allowed angle\n */\n get maxAngle() {\n return this._maxAngle;\n }\n set maxAngle(value) {\n this._setMaxAngle(value);\n }\n /**\n * Creates a new BoneIKController\n * @param mesh defines the TransformNode to control\n * @param bone defines the bone to control. The bone needs to have a parent bone. It also needs to have a length greater than 0 or a children we can use to infer its length.\n * @param options defines options to set up the controller\n * @param options.targetMesh\n * @param options.poleTargetMesh\n * @param options.poleTargetBone\n * @param options.poleTargetLocalOffset\n * @param options.poleAngle\n * @param options.bendAxis\n * @param options.maxAngle\n * @param options.slerpAmount\n */\n constructor(mesh, bone, options) {\n /**\n * Gets or sets the target position\n */\n this.targetPosition = Vector3.Zero();\n /**\n * Gets or sets the pole target position\n */\n this.poleTargetPosition = Vector3.Zero();\n /**\n * Gets or sets the pole target local offset\n */\n this.poleTargetLocalOffset = Vector3.Zero();\n /**\n * Gets or sets the pole angle\n */\n this.poleAngle = 0;\n /**\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\n */\n this.slerpAmount = 1;\n this._bone1Quat = Quaternion.Identity();\n this._bone1Mat = Matrix.Identity();\n this._bone2Ang = Math.PI;\n this._maxAngle = Math.PI;\n this._rightHandedSystem = false;\n this._bendAxis = Vector3.Right();\n this._slerping = false;\n this._adjustRoll = 0;\n this._notEnoughInformation = false;\n this._bone2 = bone;\n const bone1 = bone.getParent();\n if (!bone1) {\n this._notEnoughInformation = true;\n Logger.Error(\"BoneIKController: bone must have a parent for IK to work.\");\n return;\n }\n this._bone1 = bone1;\n if (this._bone2.children.length === 0 && !this._bone2.length) {\n this._notEnoughInformation = true;\n Logger.Error(\"BoneIKController: bone must not be a leaf or it should have a length for IK to work.\");\n return;\n }\n this.mesh = mesh;\n bone.getSkeleton().computeAbsoluteMatrices();\n const bonePos = bone.getPosition();\n if (bone.getAbsoluteMatrix().determinant() > 0) {\n this._rightHandedSystem = true;\n this._bendAxis.x = 0;\n this._bendAxis.y = 0;\n this._bendAxis.z = -1;\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\n this._adjustRoll = Math.PI * 0.5;\n this._bendAxis.z = 1;\n }\n }\n if (this._bone1.length && this._bone2.length) {\n const boneScale1 = this._bone1.getScale();\n const boneScale2 = this._bone2.getScale();\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\n }\n else if (this._bone2.children[0]) {\n mesh.computeWorldMatrix(true);\n const pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\n const pos2 = this._bone2.getAbsolutePosition(mesh);\n const pos3 = this._bone1.getAbsolutePosition(mesh);\n this._bone2Length = Vector3.Distance(pos1, pos2);\n this._bone1Length = Vector3.Distance(pos2, pos3);\n }\n else {\n mesh.computeWorldMatrix(true);\n const boneScale2 = this._bone2.getScale();\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\n const pos2 = this._bone2.getAbsolutePosition(mesh);\n const pos3 = this._bone1.getAbsolutePosition(mesh);\n this._bone1Length = Vector3.Distance(pos2, pos3);\n }\n this._bone1.getRotationMatrixToRef(1 /* Space.WORLD */, mesh, this._bone1Mat);\n this.maxAngle = Math.PI;\n if (options) {\n if (options.targetMesh) {\n this.targetMesh = options.targetMesh;\n this.targetMesh.computeWorldMatrix(true);\n }\n if (options.poleTargetMesh) {\n this.poleTargetMesh = options.poleTargetMesh;\n this.poleTargetMesh.computeWorldMatrix(true);\n }\n else if (options.poleTargetBone) {\n this.poleTargetBone = options.poleTargetBone;\n }\n else if (this._bone1.getParent()) {\n this.poleTargetBone = this._bone1.getParent();\n }\n if (options.poleTargetLocalOffset) {\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\n }\n if (options.poleAngle) {\n this.poleAngle = options.poleAngle;\n }\n if (options.bendAxis) {\n this._bendAxis.copyFrom(options.bendAxis);\n }\n if (options.maxAngle) {\n this.maxAngle = options.maxAngle;\n }\n if (options.slerpAmount) {\n this.slerpAmount = options.slerpAmount;\n }\n }\n }\n _setMaxAngle(ang) {\n if (ang < 0) {\n ang = 0;\n }\n if (ang > Math.PI || ang == undefined) {\n ang = Math.PI;\n }\n this._maxAngle = ang;\n const a = this._bone1Length;\n const b = this._bone2Length;\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\n }\n /**\n * Force the controller to update the bones\n */\n update() {\n if (this._notEnoughInformation) {\n return;\n }\n const target = this.targetPosition;\n const poleTarget = this.poleTargetPosition;\n const mat1 = BoneIKController._TmpMats[0];\n const mat2 = BoneIKController._TmpMats[1];\n if (this.targetMesh) {\n target.copyFrom(this.targetMesh.getAbsolutePosition());\n }\n if (this.poleTargetBone) {\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\n }\n else if (this.poleTargetMesh) {\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\n }\n const bonePos = BoneIKController._TmpVecs[0];\n const zaxis = BoneIKController._TmpVecs[1];\n const xaxis = BoneIKController._TmpVecs[2];\n const yaxis = BoneIKController._TmpVecs[3];\n const upAxis = BoneIKController._TmpVecs[4];\n const tmpQuat = BoneIKController._TmpQuat;\n this._bone1.getAbsolutePositionToRef(this.mesh, bonePos);\n poleTarget.subtractToRef(bonePos, upAxis);\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\n upAxis.y = 1;\n }\n else {\n upAxis.normalize();\n }\n target.subtractToRef(bonePos, yaxis);\n yaxis.normalize();\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\n zaxis.normalize();\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\n xaxis.normalize();\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\n const a = this._bone1Length;\n const b = this._bone2Length;\n let c = Vector3.Distance(bonePos, target);\n if (this._maxReach > 0) {\n c = Math.min(this._maxReach, c);\n }\n let acosa = (b * b + c * c - a * a) / (2 * b * c);\n let acosb = (c * c + a * a - b * b) / (2 * c * a);\n if (acosa > 1) {\n acosa = 1;\n }\n if (acosb > 1) {\n acosb = 1;\n }\n if (acosa < -1) {\n acosa = -1;\n }\n if (acosb < -1) {\n acosb = -1;\n }\n const angA = Math.acos(acosa);\n const angB = Math.acos(acosb);\n let angC = -angA - angB;\n if (this._rightHandedSystem) {\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\n mat2.multiplyToRef(mat1, mat1);\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\n mat2.multiplyToRef(mat1, mat1);\n }\n else {\n const _tmpVec = BoneIKController._TmpVecs[5];\n _tmpVec.copyFrom(this._bendAxis);\n _tmpVec.x *= -1;\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\n mat2.multiplyToRef(mat1, mat1);\n }\n if (this.poleAngle) {\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\n mat1.multiplyToRef(mat2, mat1);\n }\n if (this._bone1) {\n if (this.slerpAmount < 1) {\n if (!this._slerping) {\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\n }\n Quaternion.FromRotationMatrixToRef(mat1, tmpQuat);\n Quaternion.SlerpToRef(this._bone1Quat, tmpQuat, this.slerpAmount, this._bone1Quat);\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\n this._bone1.setRotationQuaternion(this._bone1Quat, 1 /* Space.WORLD */, this.mesh);\n this._slerping = true;\n }\n else {\n this._bone1.setRotationMatrix(mat1, 1 /* Space.WORLD */, this.mesh);\n this._bone1Mat.copyFrom(mat1);\n this._slerping = false;\n }\n this._updateLinkedTransformRotation(this._bone1);\n }\n this._bone2.setAxisAngle(this._bendAxis, angC, 0 /* Space.LOCAL */);\n this._updateLinkedTransformRotation(this._bone2);\n this._bone2Ang = angC;\n }\n _updateLinkedTransformRotation(bone) {\n if (bone._linkedTransformNode) {\n if (!bone._linkedTransformNode.rotationQuaternion) {\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\n }\n bone.getRotationQuaternionToRef(0 /* Space.LOCAL */, null, bone._linkedTransformNode.rotationQuaternion);\n }\n }\n}\nBoneIKController._TmpVecs = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\nBoneIKController._TmpQuat = Quaternion.Identity();\nBoneIKController._TmpMats = [Matrix.Identity(), Matrix.Identity()];\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|