//======= Copyright (c) 1996-2009, Valve Corporation, All rights reserved. ====== // // A class representing a camera // //=============================================================================== #ifndef DMECAMERA_H #define DMECAMERA_H #ifdef _WIN32 #pragma once #endif #include "movieobjects/dmedag.h" enum EOrthoAxes { AXIS_X = 0, AXIS_Y, AXIS_Z, AXIS_X_NEG, AXIS_Y_NEG, AXIS_Z_NEG, AXIS_COUNT, // == 6 }; //----------------------------------------------------------------------------- // A class representing a camera //----------------------------------------------------------------------------- class CDmeCamera : public CDmeDag { DEFINE_ELEMENT( CDmeCamera, CDmeDag ); public: // Sets up render state in the material system for rendering // This includes the view matrix and the projection matrix void SetupRenderState( int nDisplayWidth, int nDisplayHeight, bool bUseEngineCoordinateSystem = false ); // accessors for generated matrices void GetViewMatrix( VMatrix &view, bool bUseEngineCoordinateSystem = false ); void GetProjectionMatrix( VMatrix &proj, int width, int height ); void GetViewProjectionInverse( VMatrix &viewprojinv, int width, int height ); void ComputeScreenSpacePosition( const Vector &vecWorldPosition, int width, int height, Vector2D *pScreenPosition ); // Returns the x FOV (the full angle) float GetFOVx() const; void SetFOVx( float fov ); // Near and far Z float GetNearZ() const; void SetNearZ( float zNear ); float GetFarZ() const; void SetFarZ( float zFar ); // Returns the focal distance in inches float GetFocalDistance() const; // Sets the focal distance in inches void SetFocalDistance( const float &fFocalDistance ); // Zero-parallax distance for stereo rendering float GetZeroParallaxDistance() const; void SetZeroParallaxDistance( const float &fZeroParallaxDistance ); // Eye separation for stereo rendering float GetEyeSeparation() const; void SetEyeSeparation( const float &flEyeSeparation ); // Returns the aperture size in inches float GetAperture() const; // Returns the shutter speed in seconds DmeTime_t GetShutterSpeed() const; // Returns the tone map scale float GetToneMapScale() const; // Returns the camera's Ambient occlusion bias float GetAOBias() const; // Returns the camera's Ambient occlusion sgrength float GetAOStrength() const; // Returns the camera's Ambient occlusion radius float GetAORadius() const; // Returns the tone map scale float GetBloomScale() const; // Returns the tone map scale float GetBloomWidth() const; // Returns the view direction void GetViewDirection( Vector *pDirection ); // Returns Depth of Field quality level int GetDepthOfFieldQuality() const; // Returns the Motion Blur quality level int GetMotionBlurQuality() const; // Ortho stuff void OrthoUpdate(); const matrix3x4_t &GetOrthoTransform() const; const Vector &GetOrthoAbsOrigin() const; const QAngle &GetOrthoAbsAngles() const; void FromCamera( CDmeCamera *pCamera ); void ToCamera( CDmeCamera *pCamera ); private: // Loads the material system view matrix based on the transform void LoadViewMatrix( bool bUseEngineCoordinateSystem ); // Loads the material system projection matrix based on the fov, etc. void LoadProjectionMatrix( int nDisplayWidth, int nDisplayHeight ); // Sets the studiorender state void LoadStudioRenderCameraState(); CDmaVar< float > m_flFieldOfView; CDmaVar< float > m_zNear; CDmaVar< float > m_zFar; CDmaVar< float > m_flFocalDistance; CDmaVar< float > m_flZeroParallaxDistance; CDmaVar< float > m_flEyeSeparation; CDmaVar< float > m_flAperture; CDmaTime m_shutterSpeed; CDmaVar< float > m_flToneMapScale; CDmaVar< float > m_flAOBias; CDmaVar< float > m_flAOStrength; CDmaVar< float > m_flAORadius; CDmaVar< float > m_flBloomScale; CDmaVar< float > m_flBloomWidth; CDmaVar< int > m_nDoFQuality; CDmaVar< int > m_nMotionBlurQuality; public: CDmaVar< bool > m_bOrtho; // Ortho vars CDmaVar< Vector > m_vecLookAt[ AXIS_COUNT ]; CDmaVar< float > m_flScale[ AXIS_COUNT ]; CDmaVar< float > m_flDistance; CDmaVar< int > m_nAxis; CDmaVar< bool > m_bWasBehindFrustum; private: // private ortho vars Vector m_vecAxis; Vector m_vecOrigin; QAngle m_angRotation; matrix3x4_t m_Transform; }; #endif // DMECAMERA_H