mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-12 15:14:35 +00:00
(Mostly) updated verve implementation.
This commit is contained in:
parent
775ca57047
commit
87ee749801
538 changed files with 68727 additions and 49 deletions
207
Engine/source/Verve/VActor/VInterpController.h
Normal file
207
Engine/source/Verve/VActor/VInterpController.h
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Verve
|
||||
// Copyright (C) 2014 - Violent Tulip
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
#ifndef _VT_VINTERPCONTROLLER_H_
|
||||
#define _VT_VINTERPCONTROLLER_H_
|
||||
|
||||
#ifndef _MATH_H_
|
||||
#include "math/mMath.h"
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class VInterpController
|
||||
{
|
||||
protected:
|
||||
|
||||
Point3F mPosition[2];
|
||||
QuatF mRotation[2];
|
||||
|
||||
public:
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// Interpolation Methods.
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
/// Get Position.
|
||||
Point3F getPosition( const F32 &pDelta )
|
||||
{
|
||||
// Interpolate Position.
|
||||
Point3F interpPosition;
|
||||
interpPosition.interpolate( mPosition[1], mPosition[0], pDelta );
|
||||
// Return Interpolated Point.
|
||||
return interpPosition;
|
||||
};
|
||||
|
||||
/// Get Rotation.
|
||||
QuatF getRotation( const F32 &pDelta )
|
||||
{
|
||||
// Interpolate Rotation.
|
||||
QuatF interpRotation;
|
||||
interpRotation.interpolate( mRotation[1], mRotation[0], pDelta );
|
||||
// Return Interpolated Quat.
|
||||
return interpRotation;
|
||||
};
|
||||
|
||||
/// Get Transform.
|
||||
MatrixF getTransform( const F32 &pDelta )
|
||||
{
|
||||
// Get Position.
|
||||
const Point3F interpPosition = getPosition( pDelta );
|
||||
// Get Rotation.
|
||||
const QuatF interpRotation = getRotation( pDelta );
|
||||
|
||||
// Setup Matrix.
|
||||
MatrixF transform;
|
||||
interpRotation.setMatrix( &transform );
|
||||
// Set Position.
|
||||
transform.setPosition( interpPosition );
|
||||
|
||||
// Return Matrix.
|
||||
return transform;
|
||||
};
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// Delta Methods.
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
/// Reset Delta.
|
||||
void resetDelta( const Point3F &pPosition, const QuatF &pRotation )
|
||||
{
|
||||
mPosition[0] = mPosition[1] = pPosition;
|
||||
mRotation[0] = mRotation[1] = pRotation;
|
||||
};
|
||||
|
||||
/// Reset Delta.
|
||||
void resetDelta( const MatrixF &pMatrix )
|
||||
{
|
||||
// Setup Quat.
|
||||
QuatF rotationQuat( pMatrix );
|
||||
// Reset Delta.
|
||||
resetDelta( pMatrix.getPosition(), rotationQuat );
|
||||
};
|
||||
|
||||
/// Reset Delta (Vector)
|
||||
void resetDelta( const Point3F &pPosition, const VectorF &pForwardVector )
|
||||
{
|
||||
// Assert.
|
||||
AssertFatal( pForwardVector.isUnitLength(), "VInterpController::resetDelta() - Forward Vector hasn't been Normalized." );
|
||||
|
||||
// Static Up Vector.
|
||||
static const VectorF sUpVector( 0.f, 0.f, 1.f );
|
||||
|
||||
// X-Axis.
|
||||
VectorF xVec = mCross( pForwardVector, sUpVector );
|
||||
xVec.normalize();
|
||||
// Z-Axis.
|
||||
VectorF zVec = mCross( xVec, pForwardVector );
|
||||
zVec.normalize();
|
||||
|
||||
// Setup Object Transform.
|
||||
MatrixF transform;
|
||||
transform.setColumn( 0, xVec );
|
||||
transform.setColumn( 1, pForwardVector );
|
||||
transform.setColumn( 2, zVec );
|
||||
transform.setColumn( 3, pPosition );
|
||||
|
||||
// Reset Delta.
|
||||
resetDelta( transform );
|
||||
};
|
||||
|
||||
/// Reset Delta (AngAxis)
|
||||
void resetDelta( const Point3F &pPosition, const AngAxisF &pAngAxis )
|
||||
{
|
||||
// Setup Matrix.
|
||||
MatrixF transform;
|
||||
pAngAxis.setMatrix( &transform );
|
||||
// Set Position.
|
||||
transform.setPosition( pPosition );
|
||||
|
||||
// Reset Delta.
|
||||
resetDelta( transform );
|
||||
};
|
||||
|
||||
/// Push Delta.
|
||||
void pushDelta( const Point3F &pPosition, const QuatF &pRotation )
|
||||
{
|
||||
mPosition[1] = pPosition;
|
||||
mRotation[1] = pRotation;
|
||||
};
|
||||
|
||||
/// Push Delta (Matrix)
|
||||
void pushDelta( const MatrixF &pMatrix )
|
||||
{
|
||||
// Setup Quat.
|
||||
QuatF rotationQuat( pMatrix );
|
||||
// Push Delta.
|
||||
pushDelta( pMatrix.getPosition(), rotationQuat );
|
||||
};
|
||||
|
||||
/// Push Delta (Vector)
|
||||
void pushDelta( const Point3F &pPosition, const VectorF &pForwardVector )
|
||||
{
|
||||
// Assert.
|
||||
AssertFatal( pForwardVector.isUnitLength(), "VInterpController::pushDelta() - Forward Vector hasn't been Normalized." );
|
||||
|
||||
// Static Up Vector.
|
||||
static const VectorF sUpVector( 0.f, 0.f, 1.f );
|
||||
|
||||
// X-Axis.
|
||||
VectorF xVec = mCross( pForwardVector, sUpVector );
|
||||
xVec.normalize();
|
||||
// Z-Axis.
|
||||
VectorF zVec = mCross( xVec, pForwardVector );
|
||||
zVec.normalize();
|
||||
|
||||
// Setup Object Transform.
|
||||
MatrixF transform;
|
||||
transform.setColumn( 0, xVec );
|
||||
transform.setColumn( 1, pForwardVector );
|
||||
transform.setColumn( 2, zVec );
|
||||
transform.setColumn( 3, pPosition );
|
||||
|
||||
// Push Delta.
|
||||
pushDelta( transform );
|
||||
};
|
||||
|
||||
/// Push Delta (AngAxis)
|
||||
void pushDelta( const Point3F &pPosition, const AngAxisF &pAngAxis )
|
||||
{
|
||||
// Setup Matrix.
|
||||
MatrixF transform;
|
||||
pAngAxis.setMatrix( &transform );
|
||||
// Set Position.
|
||||
transform.setPosition( pPosition );
|
||||
|
||||
// Push Delta.
|
||||
pushDelta( transform );
|
||||
};
|
||||
|
||||
/// Pop Delta.
|
||||
void popDelta( void )
|
||||
{
|
||||
mPosition[0] = mPosition[1];
|
||||
mRotation[0] = mRotation[1];
|
||||
};
|
||||
};
|
||||
|
||||
#endif // _VT_VINTERPCONTROLLER_H_
|
||||
Loading…
Add table
Add a link
Reference in a new issue