QD3DCamera.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:15k
- /*
- File: QD3DCamera.h
-
- Contains: Generic camera routines
-
- Version: Technology: Quickdraw 3D 1.6
- Release: QuickTime 6.0.2
-
- Copyright: (c) 1995-2001 by Apple Computer, Inc., all rights reserved.
-
- Bugs?: For bug reports, consult the following page on
- the World Wide Web:
-
- http://developer.apple.com/bugreporter/
-
- */
- #ifndef __QD3DCAMERA__
- #define __QD3DCAMERA__
- #ifndef __QD3D__
- #include "QD3D.h"
- #endif
- #if PRAGMA_ONCE
- #pragma once
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if PRAGMA_IMPORT
- #pragma import on
- #endif
- #if PRAGMA_STRUCT_ALIGN
- #pragma options align=power
- #elif PRAGMA_STRUCT_PACKPUSH
- #pragma pack(push, 2)
- #elif PRAGMA_STRUCT_PACK
- #pragma pack(2)
- #endif
- #if PRAGMA_ENUM_ALWAYSINT
- #if defined(__fourbyteints__) && !__fourbyteints__
- #define __QD3DCAMERA__RESTORE_TWOBYTEINTS
- #pragma fourbyteints on
- #endif
- #pragma enumsalwaysint on
- #elif PRAGMA_ENUM_OPTIONS
- #pragma option enum=int
- #elif PRAGMA_ENUM_PACK
- #if __option(pack_enums)
- #define __QD3DCAMERA__RESTORE_PACKED_ENUMS
- #pragma options(!pack_enums)
- #endif
- #endif
- /******************************************************************************
- ** **
- ** Data Structure Definitions **
- ** **
- *****************************************************************************/
- /*
- * The placement of the camera.
- */
- struct TQ3CameraPlacement {
- TQ3Point3D cameraLocation; /* Location point of the camera */
- TQ3Point3D pointOfInterest; /* Point of interest */
- TQ3Vector3D upVector; /* "up" vector */
- };
- typedef struct TQ3CameraPlacement TQ3CameraPlacement;
- /*
- * The range of the camera.
- */
- struct TQ3CameraRange {
- float hither; /* Hither plane, measured from "from" towards "to" */
- float yon; /* Yon plane, measured from "from" towards "to" */
- };
- typedef struct TQ3CameraRange TQ3CameraRange;
- /*
- * Viewport specification. Origin is (-1, 1), and corresponds to the
- * upper left-hand corner; width and height maximum is (2.0, 2.0),
- * corresponding to the lower left-hand corner of the window. The
- * TQ3Viewport specifies a part of the viewPlane that gets displayed
- * on the window that is to be drawn.
- * Normally, it is set with an origin of (-1.0, 1.0), and a width and
- * height of both 2.0, specifying that the entire window is to be
- * drawn. If, for example, an exposure event of the window exposed
- * the right half of the window, you would set the origin to (0, 1),
- * and the width and height to (1.0) and (2.0), respectively.
- *
- */
- struct TQ3CameraViewPort {
- TQ3Point2D origin;
- float width;
- float height;
- };
- typedef struct TQ3CameraViewPort TQ3CameraViewPort;
- struct TQ3CameraData {
- TQ3CameraPlacement placement;
- TQ3CameraRange range;
- TQ3CameraViewPort viewPort;
- };
- typedef struct TQ3CameraData TQ3CameraData;
- /*
- * An orthographic camera.
- *
- * The lens characteristics are set with the dimensions of a
- * rectangular viewPort in the frame of the camera.
- */
- struct TQ3OrthographicCameraData {
- TQ3CameraData cameraData;
- float left;
- float top;
- float right;
- float bottom;
- };
- typedef struct TQ3OrthographicCameraData TQ3OrthographicCameraData;
- /*
- * A perspective camera specified in terms of an arbitrary view plane.
- *
- * This is most useful when setting the camera to look at a particular
- * object. The viewPlane is set to distance from the camera to the object.
- * The halfWidth is set to half the width of the cross section of the object,
- * and the halfHeight equal to the halfWidth divided by the aspect ratio
- * of the viewPort.
- *
- * This is the only perspective camera with specifications for off-axis
- * viewing, which is desirable for scrolling.
- */
- struct TQ3ViewPlaneCameraData {
- TQ3CameraData cameraData;
- float viewPlane;
- float halfWidthAtViewPlane;
- float halfHeightAtViewPlane;
- float centerXOnViewPlane;
- float centerYOnViewPlane;
- };
- typedef struct TQ3ViewPlaneCameraData TQ3ViewPlaneCameraData;
- /*
- * A view angle aspect camera is a perspective camera specified in
- * terms of the minimum view angle and the aspect ratio of X to Y.
- *
- */
- struct TQ3ViewAngleAspectCameraData {
- TQ3CameraData cameraData;
- float fov;
- float aspectRatioXToY;
- };
- typedef struct TQ3ViewAngleAspectCameraData TQ3ViewAngleAspectCameraData;
- /******************************************************************************
- ** **
- ** Generic Camera routines **
- ** **
- *****************************************************************************/
- #if CALL_NOT_IN_CARBON
- EXTERN_API_C( TQ3ObjectType )
- Q3Camera_GetType (TQ3CameraObject camera);
- EXTERN_API_C( TQ3Status )
- Q3Camera_SetData (TQ3CameraObject camera,
- const TQ3CameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3Camera_GetData (TQ3CameraObject camera,
- TQ3CameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3Camera_SetPlacement (TQ3CameraObject camera,
- const TQ3CameraPlacement * placement);
- EXTERN_API_C( TQ3Status )
- Q3Camera_GetPlacement (TQ3CameraObject camera,
- TQ3CameraPlacement * placement);
- EXTERN_API_C( TQ3Status )
- Q3Camera_SetRange (TQ3CameraObject camera,
- const TQ3CameraRange * range);
- EXTERN_API_C( TQ3Status )
- Q3Camera_GetRange (TQ3CameraObject camera,
- TQ3CameraRange * range);
- EXTERN_API_C( TQ3Status )
- Q3Camera_SetViewPort (TQ3CameraObject camera,
- const TQ3CameraViewPort * viewPort);
- EXTERN_API_C( TQ3Status )
- Q3Camera_GetViewPort (TQ3CameraObject camera,
- TQ3CameraViewPort * viewPort);
- EXTERN_API_C( TQ3Status )
- Q3Camera_GetWorldToView (TQ3CameraObject camera,
- TQ3Matrix4x4 * worldToView);
- EXTERN_API_C( TQ3Status )
- Q3Camera_GetWorldToFrustum (TQ3CameraObject camera,
- TQ3Matrix4x4 * worldToFrustum);
- EXTERN_API_C( TQ3Status )
- Q3Camera_GetViewToFrustum (TQ3CameraObject camera,
- TQ3Matrix4x4 * viewToFrustum);
- /******************************************************************************
- ** **
- ** Specific Camera Routines **
- ** **
- *****************************************************************************/
- /******************************************************************************
- ** **
- ** Orthographic Camera **
- ** **
- *****************************************************************************/
- EXTERN_API_C( TQ3CameraObject )
- Q3OrthographicCamera_New (const TQ3OrthographicCameraData * orthographicData);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_GetData (TQ3CameraObject camera,
- TQ3OrthographicCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_SetData (TQ3CameraObject camera,
- const TQ3OrthographicCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_SetLeft (TQ3CameraObject camera,
- float left);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_GetLeft (TQ3CameraObject camera,
- float * left);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_SetTop (TQ3CameraObject camera,
- float top);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_GetTop (TQ3CameraObject camera,
- float * top);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_SetRight (TQ3CameraObject camera,
- float right);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_GetRight (TQ3CameraObject camera,
- float * right);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_SetBottom (TQ3CameraObject camera,
- float bottom);
- EXTERN_API_C( TQ3Status )
- Q3OrthographicCamera_GetBottom (TQ3CameraObject camera,
- float * bottom);
- /******************************************************************************
- ** **
- ** ViewPlane Camera **
- ** **
- *****************************************************************************/
- EXTERN_API_C( TQ3CameraObject )
- Q3ViewPlaneCamera_New (const TQ3ViewPlaneCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_GetData (TQ3CameraObject camera,
- TQ3ViewPlaneCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_SetData (TQ3CameraObject camera,
- const TQ3ViewPlaneCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_SetViewPlane (TQ3CameraObject camera,
- float viewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_GetViewPlane (TQ3CameraObject camera,
- float * viewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_SetHalfWidth (TQ3CameraObject camera,
- float halfWidthAtViewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_GetHalfWidth (TQ3CameraObject camera,
- float * halfWidthAtViewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_SetHalfHeight (TQ3CameraObject camera,
- float halfHeightAtViewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_GetHalfHeight (TQ3CameraObject camera,
- float * halfHeightAtViewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_SetCenterX (TQ3CameraObject camera,
- float centerXOnViewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_GetCenterX (TQ3CameraObject camera,
- float * centerXOnViewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_SetCenterY (TQ3CameraObject camera,
- float centerYOnViewPlane);
- EXTERN_API_C( TQ3Status )
- Q3ViewPlaneCamera_GetCenterY (TQ3CameraObject camera,
- float * centerYOnViewPlane);
- /******************************************************************************
- ** **
- ** View Angle Aspect Camera **
- ** **
- *****************************************************************************/
- EXTERN_API_C( TQ3CameraObject )
- Q3ViewAngleAspectCamera_New (const TQ3ViewAngleAspectCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3ViewAngleAspectCamera_SetData (TQ3CameraObject camera,
- const TQ3ViewAngleAspectCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3ViewAngleAspectCamera_GetData (TQ3CameraObject camera,
- TQ3ViewAngleAspectCameraData * cameraData);
- EXTERN_API_C( TQ3Status )
- Q3ViewAngleAspectCamera_SetFOV (TQ3CameraObject camera,
- float fov);
- EXTERN_API_C( TQ3Status )
- Q3ViewAngleAspectCamera_GetFOV (TQ3CameraObject camera,
- float * fov);
- EXTERN_API_C( TQ3Status )
- Q3ViewAngleAspectCamera_SetAspectRatio (TQ3CameraObject camera,
- float aspectRatioXToY);
- EXTERN_API_C( TQ3Status )
- Q3ViewAngleAspectCamera_GetAspectRatio (TQ3CameraObject camera,
- float * aspectRatioXToY);
- #endif /* CALL_NOT_IN_CARBON */
- #if PRAGMA_ENUM_ALWAYSINT
- #pragma enumsalwaysint reset
- #ifdef __QD3DCAMERA__RESTORE_TWOBYTEINTS
- #pragma fourbyteints off
- #endif
- #elif PRAGMA_ENUM_OPTIONS
- #pragma option enum=reset
- #elif defined(__QD3DCAMERA__RESTORE_PACKED_ENUMS)
- #pragma options(pack_enums)
- #endif
- #if PRAGMA_STRUCT_ALIGN
- #pragma options align=reset
- #elif PRAGMA_STRUCT_PACKPUSH
- #pragma pack(pop)
- #elif PRAGMA_STRUCT_PACK
- #pragma pack()
- #endif
- #ifdef PRAGMA_IMPORT_OFF
- #pragma import off
- #elif PRAGMA_IMPORT
- #pragma import reset
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* __QD3DCAMERA__ */