| 1 | /**************************************************************************************** | 
|---|
| 2 |  | 
|---|
| 3 | Copyright (C) 2015 Autodesk, Inc. | 
|---|
| 4 | All rights reserved. | 
|---|
| 5 |  | 
|---|
| 6 | Use of this software is subject to the terms of the Autodesk license agreement | 
|---|
| 7 | provided at the time of installation or download, or which otherwise accompanies | 
|---|
| 8 | this software in either electronic or hard copy form. | 
|---|
| 9 |  | 
|---|
| 10 | ****************************************************************************************/ | 
|---|
| 11 |  | 
|---|
| 12 | //! \file fbxcamerastereo.h | 
|---|
| 13 | #ifndef _FBXSDK_SCENE_GEOMETRY_CAMERA_STEREO_H_ | 
|---|
| 14 | #define _FBXSDK_SCENE_GEOMETRY_CAMERA_STEREO_H_ | 
|---|
| 15 |  | 
|---|
| 16 | #include <fbxsdk/fbxsdk_def.h> | 
|---|
| 17 |  | 
|---|
| 18 | #include <fbxsdk/scene/geometry/fbxcamera.h> | 
|---|
| 19 |  | 
|---|
| 20 | #include <fbxsdk/fbxsdk_nsbegin.h> | 
|---|
| 21 |  | 
|---|
| 22 | /** This node attribute contains methods for accessing the properties of a stereo camera. | 
|---|
| 23 | * \nosubgrouping | 
|---|
| 24 | * Generally, a set of stereoRig contains the center camera, the left camera and the right camera. | 
|---|
| 25 | * FbxCameraStereo is used to represent the center camera. The left and right camera could be FbxCamera. | 
|---|
| 26 | * FbxCameraStereo contains stereo properties. | 
|---|
| 27 | * The left and right camera can also be get and set via related methods in FbxCameraStereo class. | 
|---|
| 28 | * \see FbxCamera and FbxCameraSwitcher. | 
|---|
| 29 | */ | 
|---|
| 30 | class FBXSDK_DLL FbxCameraStereo : public FbxCamera | 
|---|
| 31 | { | 
|---|
| 32 | FBXSDK_OBJECT_DECLARE(FbxCameraStereo, FbxCamera); | 
|---|
| 33 |  | 
|---|
| 34 | public: | 
|---|
| 35 | //! Return the type of node attribute which is EType::eCameraStereo. | 
|---|
| 36 | virtual FbxNodeAttribute::EType GetAttributeType() const; | 
|---|
| 37 |  | 
|---|
| 38 | //! Reset the stereo camera to default values. | 
|---|
| 39 | void Reset(); | 
|---|
| 40 |  | 
|---|
| 41 | /** Types of Stereo camera. | 
|---|
| 42 | */ | 
|---|
| 43 | enum EStereoType | 
|---|
| 44 | { | 
|---|
| 45 | eNone,		//!< Disable the stereo effect.(Default value) | 
|---|
| 46 | eConverged,	//!< Computes the zero parallax plane by toeing in the cameras. | 
|---|
| 47 | eOffAxis,	//!< Computes the convergence plane by shifting the frustum using camera film back. | 
|---|
| 48 | eParallel	//!< A parallel camera setup where there is effectively no convergence plane. | 
|---|
| 49 | }; | 
|---|
| 50 |  | 
|---|
| 51 | /** Get the left camera which connect to property LeftCamera. | 
|---|
| 52 | * \return   A pointer to FbxCamera. | 
|---|
| 53 | * \remarks  Current FbxCameraStereo should work with two FbxCamera, left camera and right camera. | 
|---|
| 54 | * Use this method to get the left camera. | 
|---|
| 55 | */ | 
|---|
| 56 | FbxCamera* GetLeftCamera() const; | 
|---|
| 57 |  | 
|---|
| 58 | /** Get the right camera which connect to property RightCamera. | 
|---|
| 59 | * \return   A pointer to FbxCamera. | 
|---|
| 60 | * \remarks  Current FbxCameraStereo should work with two FbxCamera, left camera and right camera. | 
|---|
| 61 | * Use this method to get the right camera. | 
|---|
| 62 | */ | 
|---|
| 63 | FbxCamera* GetRightCamera() const; | 
|---|
| 64 |  | 
|---|
| 65 | /** Set the left camera, connect property LeftCamera to pCamera. | 
|---|
| 66 | * \param pCamera The camera to set. | 
|---|
| 67 | * \return        \c true if it's successful, \c false otherwise. | 
|---|
| 68 | * \remarks Current FbxCameraStereo should work with two FbxCamera, left camera and right camera. | 
|---|
| 69 | * Use this method to set the left camera. | 
|---|
| 70 | */ | 
|---|
| 71 | bool SetLeftCamera(FbxCamera* pCamera); | 
|---|
| 72 |  | 
|---|
| 73 | /** Set the right camera, connect property RightCamera to pCamera. | 
|---|
| 74 | * \param pCamera The camera to set. | 
|---|
| 75 | * \return        \c true if it's successful, \c false otherwise. | 
|---|
| 76 | * \remarks Current FbxCameraStereo should work with two FbxCamera, left camera and right camera. | 
|---|
| 77 | * Use this method to set the right camera. | 
|---|
| 78 | */ | 
|---|
| 79 | bool SetRightCamera(FbxCamera* pCamera); | 
|---|
| 80 |  | 
|---|
| 81 | /** Get the local transformation matrix of left camera. | 
|---|
| 82 | * \return The local transformation matrix of left camera. | 
|---|
| 83 | * \remarks Use this method to reevaluate the local transformation of left camera. | 
|---|
| 84 | */ | 
|---|
| 85 | FbxAMatrix GetLeftCameraLocalMatrix() const; | 
|---|
| 86 |  | 
|---|
| 87 | /** Get the global matrix of left camera. | 
|---|
| 88 | * \return The global transformation matrix of left camera. | 
|---|
| 89 | * \remarks Use this method to reevaluate the global transformation of left camera. | 
|---|
| 90 | */ | 
|---|
| 91 | FbxAMatrix GetLeftCameraGlobalMatrix() const; | 
|---|
| 92 |  | 
|---|
| 93 | /** Get the local transformation matrix of right camera. | 
|---|
| 94 | * \return The local transformation matrix of right camera.. | 
|---|
| 95 | * \remarks Use this method to reevaluate the local transformation of right camera. | 
|---|
| 96 | */ | 
|---|
| 97 | FbxAMatrix GetRightCameraLocalMatrix() const; | 
|---|
| 98 |  | 
|---|
| 99 | /** Get the global transformation matrix of right camera. | 
|---|
| 100 | * \return The global transformation matrix of right camera. | 
|---|
| 101 | * \remarks Use this method to reevaluate the global transformation of right camera. | 
|---|
| 102 | */ | 
|---|
| 103 | FbxAMatrix GetRightCameraGlobalMatrix() const; | 
|---|
| 104 |  | 
|---|
| 105 | /** Reevaluate the FilmOffsetX of left camera. | 
|---|
| 106 | * It's computed through stereo camera properties. | 
|---|
| 107 | * \return Current FilmOffsetX value. | 
|---|
| 108 | * \remarks This method does not set the FilmOffsetX of left camera. | 
|---|
| 109 | */ | 
|---|
| 110 | double ReevaluateLeftCameraFilmOffsetX() const; | 
|---|
| 111 |  | 
|---|
| 112 | /** Reevaluate the FilmOffsetX of right camera. | 
|---|
| 113 | * It's computed through stereo camera properties. | 
|---|
| 114 | * \return Current FilmOffsetX value. | 
|---|
| 115 | * \remarks this method does not set the FilmOffsetX of right camera | 
|---|
| 116 | */ | 
|---|
| 117 | double ReevaluateRightCameraFilmOffsetX() const; | 
|---|
| 118 |  | 
|---|
| 119 | ////////////////////////////////////////////////////////////////////////// | 
|---|
| 120 | // | 
|---|
| 121 | // Properties | 
|---|
| 122 | // | 
|---|
| 123 | ////////////////////////////////////////////////////////////////////////// | 
|---|
| 124 |  | 
|---|
| 125 | // ----------------------------------------------------------------------- | 
|---|
| 126 | // Stereo and Stereo Adjustments | 
|---|
| 127 | // ----------------------------------------------------------------------- | 
|---|
| 128 |  | 
|---|
| 129 | /** This property handles the types of Stereo camera. | 
|---|
| 130 | * | 
|---|
| 131 | * To access this property do: Stereo.Get(). | 
|---|
| 132 | * To set this property do: Stereo.Set(EStereoType). | 
|---|
| 133 | * | 
|---|
| 134 | * \remarks Default Value is eNone. | 
|---|
| 135 | */ | 
|---|
| 136 | FbxPropertyT<EStereoType>                    Stereo; | 
|---|
| 137 |  | 
|---|
| 138 | /** This property handles the distance between left and right cameras. | 
|---|
| 139 | * | 
|---|
| 140 | * To access this property do: InteraxialSeparation.Get(). | 
|---|
| 141 | * To set this property do: InteraxialSeparation.Set(FbxDouble). | 
|---|
| 142 | * | 
|---|
| 143 | * \remarks Default Value is 0.0. | 
|---|
| 144 | */ | 
|---|
| 145 | FbxPropertyT<FbxDouble>                       InteraxialSeparation; | 
|---|
| 146 |  | 
|---|
| 147 | /** This property handles the distance on the camera view axis where the zero parallax plane occurs. | 
|---|
| 148 | * | 
|---|
| 149 | * To access this property do: ZeroParallax.Get(). | 
|---|
| 150 | * To set this property do: ZeroParallax.Set(FbxDouble). | 
|---|
| 151 | * | 
|---|
| 152 | * \remarks Default Value is 0.0. | 
|---|
| 153 | */ | 
|---|
| 154 | FbxPropertyT<FbxDouble>                       ZeroParallax; | 
|---|
| 155 |  | 
|---|
| 156 | /** This property is to offset the computed toe-in effect when it's in Converged mode. | 
|---|
| 157 | * | 
|---|
| 158 | * To access this property do: ToeInAdjust.Get(). | 
|---|
| 159 | * To set this property do: ToeInAdjust.Set(FbxDouble). | 
|---|
| 160 | * | 
|---|
| 161 | * \remarks Default Value is 0.0. | 
|---|
| 162 | * This value is specified in degrees and acts as an offset to the computed toe-in. | 
|---|
| 163 | * \see EStereoType. | 
|---|
| 164 | */ | 
|---|
| 165 | FbxPropertyT<FbxDouble>                       ToeInAdjust; | 
|---|
| 166 |  | 
|---|
| 167 | /** This property handles the film offset for the right camera. | 
|---|
| 168 | * | 
|---|
| 169 | * To access this property do: FilmOffsetRightCam.Get(). | 
|---|
| 170 | * To set this property do: FilmOffsetRightCam.Set(FbxDouble). | 
|---|
| 171 | * | 
|---|
| 172 | * \remarks Default Value is 0.0. | 
|---|
| 173 | */ | 
|---|
| 174 | FbxPropertyT<FbxDouble>                       FilmOffsetRightCam; | 
|---|
| 175 |  | 
|---|
| 176 | /** This property handles the film offset for the left camera. | 
|---|
| 177 | * | 
|---|
| 178 | * To access this property do: FilmOffsetLeftCam.Get(). | 
|---|
| 179 | * To set this property do: FilmOffsetLeftCam.Set(FbxDouble). | 
|---|
| 180 | * | 
|---|
| 181 | * \remarks Default Value is 0.0. | 
|---|
| 182 | */ | 
|---|
| 183 | FbxPropertyT<FbxDouble>                       FilmOffsetLeftCam; | 
|---|
| 184 |  | 
|---|
| 185 | /** This property has the right camera connected to it. | 
|---|
| 186 | * | 
|---|
| 187 | * To access this property do: GetRightCamera(). | 
|---|
| 188 | * To set this property do: SetRightCamera(FbxCamera* pCamera). | 
|---|
| 189 | * | 
|---|
| 190 | * \remarks The right camera is connected as source object. | 
|---|
| 191 | */ | 
|---|
| 192 | FbxPropertyT<FbxReference>                     RightCamera; | 
|---|
| 193 |  | 
|---|
| 194 | /** This property has the left camera connected to it. | 
|---|
| 195 | * | 
|---|
| 196 | * To access this property do: GetLeftCamera(). | 
|---|
| 197 | * To set this property do: SetLeftCamera(FbxCamera* pCamera). | 
|---|
| 198 | * | 
|---|
| 199 | * \remarks The left camera is connected as source object. | 
|---|
| 200 | */ | 
|---|
| 201 | FbxPropertyT<FbxReference>                     LeftCamera; | 
|---|
| 202 |  | 
|---|
| 203 | /** This property handles the precomp file name | 
|---|
| 204 | * | 
|---|
| 205 | * To access this property do: PrecompFileName.Get(). | 
|---|
| 206 | * To set this property do: PrecompFileName.Set(FbxString). | 
|---|
| 207 | * | 
|---|
| 208 | * Default value is "" | 
|---|
| 209 | */ | 
|---|
| 210 | FbxPropertyT<FbxString>                        PrecompFileName; | 
|---|
| 211 |  | 
|---|
| 212 | /** This property handles the relative precomp file name | 
|---|
| 213 | * | 
|---|
| 214 | * To access this property do: RelativePrecompFileName.Get(). | 
|---|
| 215 | * To set this property do: RelativePrecompFileName.Set(FbxString). | 
|---|
| 216 | * | 
|---|
| 217 | * Default value is "" | 
|---|
| 218 | */ | 
|---|
| 219 | FbxPropertyT<FbxString>                        RelativePrecompFileName; | 
|---|
| 220 |  | 
|---|
| 221 | /** connect left and right camera property to stereo camera. | 
|---|
| 222 | * \return true if it's successful, otherwise return false. | 
|---|
| 223 | * \remarks It's used to connect the left/right camera property [FocalLength, FarPlane, NearPlane, FilmWidth, | 
|---|
| 224 | * FilmHeight, FilmSqueezeRatio] to stereo camera. | 
|---|
| 225 | * During FBX SDK reevaluating, if ConnectProperties is called, | 
|---|
| 226 | * to get the newest FocalLength property of left camera, please use lLeft_Camera->FocalLength.GetSrcProperty(); | 
|---|
| 227 | */ | 
|---|
| 228 | bool ConnectProperties(); | 
|---|
| 229 |  | 
|---|
| 230 | /***************************************************************************************************************************** | 
|---|
| 231 | ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! ** | 
|---|
| 232 | *****************************************************************************************************************************/ | 
|---|
| 233 | #ifndef DOXYGEN_SHOULD_SKIP_THIS | 
|---|
| 234 | protected: | 
|---|
| 235 | virtual void ConstructProperties(bool pForceSet); | 
|---|
| 236 |  | 
|---|
| 237 | virtual FbxStringList GetTypeFlags() const; | 
|---|
| 238 | #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/ | 
|---|
| 239 | }; | 
|---|
| 240 |  | 
|---|
| 241 | inline EFbxType FbxTypeOf(const FbxCameraStereo::EStereoType&){ return eFbxEnum; } | 
|---|
| 242 |  | 
|---|
| 243 | #include <fbxsdk/fbxsdk_nsend.h> | 
|---|
| 244 |  | 
|---|
| 245 | #endif /* _FBXSDK_SCENE_GEOMETRY_CAMERA_STEREO_H_ */ | 
|---|
| 246 |  | 
|---|