Просмотр исходного кода

Fixed camera FOV computation in the ColladaLoader.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@675 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
adario 15 лет назад
Родитель
Сommit
35c97d169e
1 измененных файлов с 5 добавлено и 3 удалено
  1. 5 3
      code/ColladaLoader.cpp

+ 5 - 3
code/ColladaLoader.cpp

@@ -358,12 +358,14 @@ void ColladaLoader::BuildCamerasForNode( const ColladaParser& pParser, const Col
 		if (srcCamera->mHorFov != 10e10f) {
 			out->mHorizontalFOV = srcCamera->mHorFov; 
 
-			if (srcCamera->mVerFov != 10e10f && srcCamera->mAspect != 10e10f) {
-				out->mAspect = srcCamera->mHorFov/srcCamera->mVerFov;
+			if (srcCamera->mVerFov != 10e10f && srcCamera->mAspect == 10e10f) {
+				out->mAspect = tan(AI_DEG_TO_RAD(srcCamera->mHorFov)) /
+                    tan(AI_DEG_TO_RAD(srcCamera->mVerFov));
 			}
 		}
 		else if (srcCamera->mAspect != 10e10f && srcCamera->mVerFov != 10e10f)	{
-			out->mHorizontalFOV = srcCamera->mAspect*srcCamera->mVerFov;
+			out->mHorizontalFOV = 2.0f * AI_RAD_TO_DEG(atan(srcCamera->mAspect *
+                tan(AI_DEG_TO_RAD(srcCamera->mVerFov) * 0.5f)));
 		}
 
 		// Collada uses degrees, we use radians