topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-QD3DCamera.h / h
/*
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__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.