diff options
Diffstat (limited to 'tools/worldbuilder/code/gameengine/mayacamera.cpp')
-rw-r--r-- | tools/worldbuilder/code/gameengine/mayacamera.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/tools/worldbuilder/code/gameengine/mayacamera.cpp b/tools/worldbuilder/code/gameengine/mayacamera.cpp new file mode 100644 index 0000000..6104cd5 --- /dev/null +++ b/tools/worldbuilder/code/gameengine/mayacamera.cpp @@ -0,0 +1,151 @@ +//============================================================================= +// Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved. +// +// File: MayaCamera.cpp +// +// Description: Implement MayaCamera +// +// History: 22/07/2002 + Created -- Cary Brisebois +// +//============================================================================= + +//======================================== +// System Includes +//======================================== +// Foundation Tech +#include <raddebug.hpp> + +//======================================== +// Project Includes +//======================================== +#include "MayaCamera.h" +#include "main/constants.h" +#include "utility/mext.h" + + +//****************************************************************************** +// +// Global Data, Local Data, Local Classes +// +//****************************************************************************** +const MString WB_CAM_NAME( "WorldBuilderCam" ); + +//****************************************************************************** +// +// Public Member Functions +// +//****************************************************************************** + +//============================================================================== +// MayaCamera::MayaCamera +//============================================================================== +// Description: Constructor. +// +// Parameters: None. +// +// Return: N/A. +// +//============================================================================== +MayaCamera::MayaCamera() +{ + EnsureCamExists(); +} + +//============================================================================== +// MayaCamera::~MayaCamera +//============================================================================== +// Description: Destructor. +// +// Parameters: None. +// +// Return: N/A. +// +//============================================================================== +MayaCamera::~MayaCamera() +{ +} + +//============================================================================= +// MayaCamera::EnsureCamExists +//============================================================================= +// Description: Comment +// +// Parameters: () +// +// Return: void +// +//============================================================================= +void MayaCamera::EnsureCamExists() +{ + MStatus status; + MFnCamera fnCamera; + + MDagPath path; + + if ( !MExt::FindDagNodeByName( &path, WB_CAM_NAME ) ) + { + fnCamera.create( &status ); + assert( status ); + + fnCamera.setName( WB_CAM_NAME + MString( "Camera" ) ); + + MFnDependencyNode transform( fnCamera.parent( 0 ) ); + + MString transName = WB_CAM_NAME; + transform.setName( transName ); + } +} + +//============================================================================= +// MayaCamera::Set +//============================================================================= +// Description: Comment +// +// Parameters: ( const rmt::Vector& position, const rmt::Vector& target, const rmt::Vector& vup, float fov ) +// +// Return: void +// +//============================================================================= +void MayaCamera::Set( const rmt::Vector& position, const rmt::Vector& target, const rmt::Vector& vup, float fov ) +{ + MStatus status; + + EnsureCamExists(); + + MDagPath path; + bool found = MExt::FindDagNodeByName( &path, WB_CAM_NAME ); + assert( found ); + + MFnCamera fnCamera( path, &status ); + assert( status ); + + + //Scale it so you can see it. + MFnTransform fnTransform( fnCamera.parent( 0 ) ); + const double scale[3] = { 200, 200, 200 } ; + fnTransform.setScale( scale ); + + MPoint eyePosition; + eyePosition.x = position.x * WBConstants::Scale; + eyePosition.y = position.y * WBConstants::Scale; + eyePosition.z = -position.z * WBConstants::Scale; + + MVector viewDirection; + viewDirection.x = (target.x - position.x) * WBConstants::Scale; + viewDirection.y = (target.y - position.y) * WBConstants::Scale; + viewDirection.z = -(target.z - position.z) * WBConstants::Scale; + + MVector viewUp; + viewUp.x = vup.x; + viewUp.y = vup.y; + viewUp.z = -vup.z; + + status = fnCamera.set( eyePosition, viewDirection, viewUp, rmt::DegToRadian(fov), 4/3 ); + assert( status ); +} + +//****************************************************************************** +// +// Private Member Functions +// +//****************************************************************************** |