Axiom.Core.Node.Rotate C# (CSharp) Method

Rotate() public method

Rotate the node around an arbitrary axis using a Quaternion.
public Rotate ( Axiom.MathLib.Quaternion rotation ) : void
rotation Axiom.MathLib.Quaternion
return void
		public virtual void Rotate( Quaternion rotation )
		{
			Rotate( rotation, TransformSpace.Local );
		}

Same methods

Node::Rotate ( Axiom.MathLib.Quaternion rotation, TransformSpace relativeTo ) : void
Node::Rotate ( Vector3 axis, float degrees ) : void
Node::Rotate ( Vector3 axis, float degrees, TransformSpace relativeTo ) : void

Usage Example

Beispiel #1
0
		/// <summary>
		///		Same as the Apply method, but applies to a specified Node instead of it's associated node.
		/// </summary>
		public void ApplyToNode( Node node, float time, float weight, bool accumulate, float scale )
		{
			this.GetInterpolatedKeyFrame( time, kf );

			if ( accumulate )
			{
				// add to existing. Weights are not relative, but treated as absolute multipliers for the animation
				Vector3 translate = kf.Translate * weight * scale;
				node.Translate( translate );

				// interpolate between not rotation and full rotation, to point weight, so 0 = no rotate, and 1 = full rotation
				Quaternion rotate = Quaternion.Slerp( weight, Quaternion.Identity, kf.Rotation );
				node.Rotate( rotate );

				// TODO: not yet sure how to modify scale for cumulative animations
				Vector3 scaleVector = kf.Scale;
				// Not sure how to modify scale for cumulative anims... leave it alone
				//scaleVector = ((Vector3::UNIT_SCALE - kf.getScale()) * weight) + Vector3::UNIT_SCALE;
				if ( scale != 1.0f && scaleVector != Vector3.UnitScale )
					scaleVector = Vector3.UnitScale + ( scaleVector - Vector3.UnitScale ) * scale;
				node.ScaleBy( scaleVector );
			}
			else
			{
				// apply using weighted transform method
				node.WeightedTransform( weight, kf.Translate, kf.Rotation, kf.Scale );
			}
		}