home *** CD-ROM | disk | FTP | other *** search
- #if !defined(_PICK_H)
- #define _PICK_H
-
- //*********************************************************************
- //
- // File : pick.h
- //
- // Abstract : The interface to some enhanced picking functionality
- // which use ray casting to determine the exact position
- // of the projection of a viewport position onto an
- // arbitrary plane. These functions can be used to drag
- // objects directly under the mouse cursor.
- //
- // This application had been written to be compatible with
- // both the fixed and floating-point versions of the
- // RenderWare library, i.e., it uses the macros CREAL,
- // INT2REAL, RAdd, RDiv, RSub etc. If your application is
- // intended for the floating-point version of the library
- // only these macros are not necessary.
- //
- // Please note that this application is intended for
- // demonstration purposes only. No support will be
- // provided for this code and it comes with no warranty.
- //
- //*********************************************************************
- //
- // This file is a product of Criterion Software Ltd.
- //
- // This file is provided as is with no warranties of any kind and is
- // provided without any obligation on Criterion Software Ltd. or
- // Canon Inc. to assist in its use or modification.
- //
- // Criterion Software Ltd. will not, under any
- // circumstances, be liable for any lost revenue or other damages
- // arising from the use of this file.
- //
- // Copyright (c) 1994, 1995 Criterion Software Ltd.
- // All Rights Reserved.
- //
- // RenderWare is a trademark of Canon Inc.
- //
- //*********************************************************************
-
- //*********************************************************************
- //
- // Type definitions.
- //
- //*********************************************************************
-
- // This type represents a ray which we intersect with a plane to
- // compute a position.
- typedef struct
- {
- RwV3d p; // Origin of the ray.
-
- RwV3d v; // Direction of the ray.
-
- }
- RwRay;
-
- //*********************************************************************
- //
- // Functions.
- //
- //*********************************************************************
-
- // Return t at the point of interestion of the given ray and plane.
- // The plane is defined by a point on the plane (p) and a nornal to the
- // plane (n). Returns TRUE if the ray and plane intersect and FALSE if
- // the ray and plane are parallel.
- extern RwBool IntersectRayAndPlane(RwRay * ray, RwV3d * n, RwV3d * p, RwReal * t);
-
- // Given a camera and a viewport position spawn a ray into world space.
- // NOTE: This function does not take into account camera offsets.
- extern RwRay *SpawnRay(RwCamera * camera, RwInt32 x, RwInt32 y, RwRay * ray);
-
- // Compute the position (in world coordinates) of the given clump under
- // the given (x, y) position in the viewport of the given camera. The
- // clump will keep a constant orientation and distance with respect to
- // the camera, i.e., this function can be used to drag the clump around
- // on the plane parallel to the camera on which the clump lies.
- extern RwV3d *GetClumpPositionUnderPointer(RwClump * clump, RwCamera * camera,
- RwInt32 x, RwInt32 y, RwV3d * pos);
-
- //*********************************************************************
-
- #endif /* !defined(_PICK_H) */
-