---------------------------------------------------------------
| 120 | |
| 121 | //--------------------------------------------------------------- |
| 122 | void CameraExporter::exportCamera( ExportNode* exportNode ) |
| 123 | { |
| 124 | if ( !exportNode->getIsInVisualScene() ) |
| 125 | return; |
| 126 | |
| 127 | String cameraId = getCameraId(*exportNode); |
| 128 | |
| 129 | INode* iNode = exportNode->getINode(); |
| 130 | |
| 131 | CameraObject* camera = (CameraObject*)iNode->GetObjectRef(); |
| 132 | |
| 133 | INode* targetNode = ( camera->ClassID().PartA() == LOOKAT_CAM_CLASS_ID) ? iNode->GetTarget() : 0; |
| 134 | |
| 135 | if ( camera ) |
| 136 | { |
| 137 | if ( mDocumentExporter->isExportedObject(ObjectIdentifier(camera)) ) |
| 138 | return; |
| 139 | |
| 140 | mDocumentExporter->insertExportedObject(ObjectIdentifier(camera), exportNode); |
| 141 | |
| 142 | |
| 143 | // Retrieve the camera parameters block |
| 144 | IParamBlock* parameters = (IParamBlock*) camera->GetReference(MaxCamera::PBLOCK_REF); |
| 145 | |
| 146 | COLLADASW::BaseOptic * optics = 0; |
| 147 | if ( camera->IsOrtho() ) |
| 148 | { |
| 149 | optics = new COLLADASW::OrthographicOptic(COLLADASW::LibraryCameras::mSW); |
| 150 | |
| 151 | // Calculate the target distance for FOV calculations |
| 152 | float targetDistance; |
| 153 | if ( targetNode ) |
| 154 | { |
| 155 | Point3 targetTrans = targetNode->GetNodeTM(mDocumentExporter->getOptions().getAnimationStart()).GetTrans(); |
| 156 | Point3 cameraTrans = iNode->GetNodeTM(mDocumentExporter->getOptions().getAnimationStart()).GetTrans(); |
| 157 | targetDistance = (targetTrans - cameraTrans).Length(); |
| 158 | } |
| 159 | else |
| 160 | { |
| 161 | targetDistance = camera->GetTDist(mDocumentExporter->getOptions().getAnimationStart()); |
| 162 | } |
| 163 | ConversionInverseOrthoFOVFunctor conversionInverseOrthoFOVFunctor(targetDistance); |
| 164 | |
| 165 | if ( AnimationExporter::isAnimated(parameters, MaxCamera::FOV) ) |
| 166 | { |
| 167 | optics->setXMag(conversionInverseOrthoFOVFunctor(parameters->GetFloat(MaxCamera::FOV)), XMAG_SID); |
| 168 | mAnimationExporter->addAnimatedParameter(parameters, MaxCamera::FOV, cameraId, XMAG_SID, 0, true, &conversionInverseOrthoFOVFunctor); |
| 169 | } |
| 170 | else |
| 171 | { |
| 172 | optics->setXMag(conversionInverseOrthoFOVFunctor(parameters->GetFloat(MaxCamera::FOV))); |
| 173 | } |
| 174 | } |
| 175 | else |
| 176 | { |
| 177 | optics = new COLLADASW::PerspectiveOptic(COLLADASW::LibraryCameras::mSW); |
| 178 | if ( AnimationExporter::isAnimated(parameters, MaxCamera::FOV) ) |
| 179 | { |
nothing calls this directly
no test coverage detected