$jointconstrain: Difference between revisions
Jump to navigation
Jump to search
(clean up) |
No edit summary |
||
(6 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{This is a|name=$jointconstrain|QC command}} It is a parameter of [[$collisionjoints]]. It is used to set the limit of a named [[bone]]'s movement relative to its parentbone in a [[jointed collision model]]. | |||
== Syntax == | == Syntax == | ||
$jointconstrain <bone_name> <axis> <allow_option> <min_angle> <max_angle> <friction> | $jointconstrain <bone_name> <axis> <allow_option> <min_angle> <max_angle> <friction> | ||
where | where | ||
; <bone_name> : | ; <bone_name> : is the name of the 'child' bone as opposed to the 'parent' bone of the joint. | ||
; <axis> : specifies either the X, Y, or Z axis of rotation. | ; <axis> : specifies either the X, Y, or Z axis of rotation. | ||
; <allow_option> : can be one of three values: | ; <allow_option> : can be one of three values: | ||
Line 12: | Line 12: | ||
; <min_angle> : specifies the minimum angle of rotation about <axis> in degrees. (No lower than -360). | ; <min_angle> : specifies the minimum angle of rotation about <axis> in degrees. (No lower than -360). | ||
; <max_angle> : specifies the maximum angle of rotation about <axis> in degrees. (No higher than 360). | ; <max_angle> : specifies the maximum angle of rotation about <axis> in degrees. (No higher than 360). | ||
; <friction> : specifies the Friction value {{ | ; <friction> : specifies the Friction value {{TODO|scale? integer?}}. | ||
=== Example === | === Example === | ||
For example, | For example, the right-hip joint of a valvebiped is defined by constraining the movement of ''valvebiped.bip01_r_thigh'' in relation to its parent bone (which would be ''valvebiped.bip01_pelvis''). Notice we need a separate $jointconstraint for each axis of rotation. | ||
[[$collisionjoints]] "phymodel.smd" { | |||
$mass 70.0 | |||
$inertia 10.00 | |||
$damping 0.01 | |||
$rotdamping 1.50 | |||
$rootbone "valvebiped.bip01_pelvis" | |||
$jointmerge "ValveBiped.Bip01_Pelvis" "ValveBiped.Bip01_Spine1" | |||
'''$jointconstrain "valvebiped.bip01_r_thigh" x limit -12.00 12.00 0.00''' // from -12 to 12 degrees in the X-axis - twist knee left/right | |||
'''$jointconstrain "valvebiped.bip01_r_thigh" y limit -8.00 75.00 0.00''' // from -08 to 75 degrees in the Y-axis - spread knees | |||
'''$jointconstrain "valvebiped.bip01_r_thigh" z limit -97.00 32.00 0.00''' // from -97 to 32 degrees in the Z-axis - raise knee | |||
//etc | |||
} | |||
: {{warning|These axes of rotation are always local, respective to the orientation of each bone. This means that, for instance, what the X axis is for one model's joint may be different for another.}} | |||
Latest revision as of 21:23, 18 July 2025
$jointconstrain
is a QC command available in all Source games. It is a parameter of $collisionjoints. It is used to set the limit of a named bone's movement relative to its parentbone in a jointed collision model.
Syntax
$jointconstrain <bone_name> <axis> <allow_option> <min_angle> <max_angle> <friction>
where
- <bone_name>
- is the name of the 'child' bone as opposed to the 'parent' bone of the joint.
- <axis>
- specifies either the X, Y, or Z axis of rotation.
- <allow_option>
- can be one of three values:
- Free : ensures the joint can move between a <min_angle> of -360 and a <max_angle> of 360, with a selectable <friction>. Ignores user specified <min_angle> and <max_angle> values.
- Fixed : ensures the joint does not move at all. <min_angle>, <max_angle> and <friction> values are effectively locked to "0".
- Limit : ensures the joint is completely customizable. The user must specify <min_angle>, <max_angle> and <friction> values.
- <min_angle>
- specifies the minimum angle of rotation about <axis> in degrees. (No lower than -360).
- <max_angle>
- specifies the maximum angle of rotation about <axis> in degrees. (No higher than 360).
- <friction>
- specifies the Friction value Todo: scale? integer?.
Example
For example, the right-hip joint of a valvebiped is defined by constraining the movement of valvebiped.bip01_r_thigh in relation to its parent bone (which would be valvebiped.bip01_pelvis). Notice we need a separate $jointconstraint for each axis of rotation.
$collisionjoints "phymodel.smd" { $mass 70.0 $inertia 10.00 $damping 0.01 $rotdamping 1.50 $rootbone "valvebiped.bip01_pelvis" $jointmerge "ValveBiped.Bip01_Pelvis" "ValveBiped.Bip01_Spine1" $jointconstrain "valvebiped.bip01_r_thigh" x limit -12.00 12.00 0.00 // from -12 to 12 degrees in the X-axis - twist knee left/right $jointconstrain "valvebiped.bip01_r_thigh" y limit -8.00 75.00 0.00 // from -08 to 75 degrees in the Y-axis - spread knees $jointconstrain "valvebiped.bip01_r_thigh" z limit -97.00 32.00 0.00 // from -97 to 32 degrees in the Z-axis - raise knee //etc }
Warning:These axes of rotation are always local, respective to the orientation of each bone. This means that, for instance, what the X axis is for one model's joint may be different for another.