MCPcopy Create free account
hub / github.com/KhronosGroup/OpenCOLLADA / exportCamera

Method exportCamera

COLLADAMax/src/COLLADAMaxCameraExporter.cpp:122–244  ·  view source on GitHub ↗

---------------------------------------------------------------

Source from the content-addressed store, hash-verified

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 {

Callers

nothing calls this directly

Calls 15

ObjectIdentifierClass · 0.85
getIsInVisualSceneMethod · 0.80
getINodeMethod · 0.80
isExportedObjectMethod · 0.80
insertExportedObjectMethod · 0.80
getAnimationStartMethod · 0.80
LengthMethod · 0.80
addAnimatedParameterMethod · 0.80
getExportNodeMethod · 0.80
ClassIDMethod · 0.45
setXMagMethod · 0.45
setXFovMethod · 0.45

Tested by

no test coverage detected