| 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 | |