Пример #1
0
static TQ3CameraObject QD3DSupport_NewCamera(float 			docWidth,
											float 			docHeight)
{
	TQ3ViewAngleAspectCameraData	perspectiveData;
	TQ3CameraObject					camera;
	
	TQ3Point3D 					from 	= { 30.0F, 50.0F, -50.0F };
	TQ3Point3D 					to 		= { 30.0F, 0.0F, 0.0F };
	TQ3Vector3D 				up 		= { 0.0F, 1.0F, 0.0F };

	float 						fieldOfView = 1.2F;
	float 						hither 		= 0.2F;
	float 						yon 		= 200.0F;
	

		perspectiveData.cameraData.placement.cameraLocation 	= from;
		perspectiveData.cameraData.placement.pointOfInterest 	= to;
		perspectiveData.cameraData.placement.upVector 			= up;

		perspectiveData.cameraData.range.hither	= hither;
		perspectiveData.cameraData.range.yon 	= yon;

		perspectiveData.cameraData.viewPort.origin.x 	= 	-1.0F;
		perspectiveData.cameraData.viewPort.origin.y 	= 	1.0F;
		perspectiveData.cameraData.viewPort.width		= 	2.0F;
		perspectiveData.cameraData.viewPort.height 		= 	2.0F;
		
		perspectiveData.fov				= fieldOfView;
		perspectiveData.aspectRatioXToY	= docWidth / docHeight;

		camera = Q3ViewAngleAspectCamera_New(&perspectiveData);

		return camera ;
}
Пример #2
0
TQ3CameraObject MyNewCamera(DocumentPtr theDocument)
{
	TQ3ViewAngleAspectCameraData	perspectiveData;

	TQ3CameraObject				camera;
	
	TQ3Point3D 					from 	= { 0.0F, 0.0F, 7.0F };
	TQ3Point3D 					to 		= { 0.0F, 0.0F, 0.0F };
	TQ3Vector3D 				up 		= { 0.0F, 1.0F, 0.0F };

	float 						fieldOfView = 1.0F;
	float 						hither 		= 0.001F;
	float 						yon 		= 1000.0F;

	TQ3Status					returnVal = kQ3Failure ;

	perspectiveData.cameraData.placement.cameraLocation 	= from;
	perspectiveData.cameraData.placement.pointOfInterest 	= to;
	perspectiveData.cameraData.placement.upVector 			= up;

	perspectiveData.cameraData.range.hither	= hither;
	perspectiveData.cameraData.range.yon 	= yon;

	perspectiveData.cameraData.viewPort.origin.x = -1.0F;
	perspectiveData.cameraData.viewPort.origin.y = 1.0F;
	perspectiveData.cameraData.viewPort.width = 2.0F;
	perspectiveData.cameraData.viewPort.height = 2.0F;
													
	perspectiveData.fov				= fieldOfView;
	perspectiveData.aspectRatioXToY	=
		(float) (theDocument->fWidth) / 
		(float) (theDocument->fHeight);
		
	camera = Q3ViewAngleAspectCamera_New(&perspectiveData);

	return camera ;
}
Пример #3
0
void pvCamera_Fit(DocumentPtr theDocument)
{	
	TQ3Point3D 		from, to;
	TQ3BoundingBox	viewBBox;
	float			fieldOfView, hither, yon;

	if (!theDocument)
		return;

	if (!theDocument->fModel)
		return;

	pvBBox_Get(theDocument, &viewBBox);
	pvBBoxCenter(&viewBBox, &to);
	

	{
		TQ3Vector3D viewVector;
		TQ3Vector3D	normViewVector;
		TQ3Vector3D	eyeToFrontClip;
		TQ3Vector3D	eyeToBackClip;
 		TQ3Vector3D	diagonalVector;
		float		viewDistance;
		float 		maxDimension;

		Q3Point3D_Subtract(&viewBBox.max,
						   &viewBBox.min,
						   &diagonalVector);
		maxDimension = Q3Vector3D_Length(&diagonalVector);
		if (maxDimension == 0.0F)
			maxDimension = 1.0F;

		maxDimension *= 8.0F / 7.0F;
	
		from.x = to.x;
		from.y = to.y;
		from.z = to.z + (2 * maxDimension);		

		Q3Point3D_Subtract(&to, &from, &viewVector);
		viewDistance = Q3Vector3D_Length(&viewVector);
		Q3Vector3D_Normalize(&viewVector, &normViewVector);
		
		maxDimension /= 2.0F;
		
		Q3Vector3D_Scale(&normViewVector, 
						viewDistance - maxDimension,
						&eyeToFrontClip);
						
		Q3Vector3D_Scale(&normViewVector, 
						viewDistance + maxDimension,
						&eyeToBackClip);
		
		hither 	= Q3Vector3D_Length(&eyeToFrontClip);
		yon 	= Q3Vector3D_Length(&eyeToBackClip);
		
		fieldOfView = Q3Math_RadiansToDegrees(1.25 * ErMath_Atan(maxDimension/hither));
	}

	{
		TQ3ViewAngleAspectCameraData 	data;
		TQ3Vector3D 	up 	= { 0.0F, 1.0F, 0.0F };

		data.cameraData.placement.cameraLocation 	= from;
		data.cameraData.placement.pointOfInterest 	= to;
		data.cameraData.placement.upVector 			= up;
	
		data.cameraData.range.hither = hither;
		data.cameraData.range.yon 	 = yon;
	
		data.cameraData.viewPort.origin.x = -1.0F;
		data.cameraData.viewPort.origin.y =  1.0F;
		data.cameraData.viewPort.width  = 2.0F;
		data.cameraData.viewPort.height = 2.0F;

		data.fov = Q3Math_DegreesToRadians(fieldOfView);
		
		{
			float w = (float)(theDocument->fWidth);
			float h = (float)(theDocument->fHeight);

			data.aspectRatioXToY = w/h;
		}
		
		if (theDocument->fView)
		{
			TQ3CameraObject camera;
			
			Q3View_GetCamera(theDocument->fView, &camera);
			if (camera) {
				Q3ViewAngleAspectCamera_SetData(camera, &data);
				Q3Object_Dispose(camera);
			}
			else {
				camera  = Q3ViewAngleAspectCamera_New (&data);
				if (camera) {
					Q3View_SetCamera (theDocument->fView, camera);
					Q3Object_Dispose(camera);
				}
			}
		}
	}
}