101 lines
3.5 KiB
C
Executable File
101 lines
3.5 KiB
C
Executable File
/**********************************************************************
|
|
*<
|
|
FILE: gutil.h
|
|
|
|
DESCRIPTION: Geometric utility functions
|
|
|
|
CREATED BY: Dan Silva
|
|
|
|
HISTORY:
|
|
|
|
*> Copyright (c) 1994, All Rights Reserved.
|
|
**********************************************************************/
|
|
|
|
#ifndef _GUTIL_H
|
|
|
|
#define _GUTIL_H
|
|
|
|
|
|
//- BaryCoords-----------------------------------------------------
|
|
// Given three points in space forming a triangle (p0,p1,p2),
|
|
// and a fourth point in the plane of that triangle, returns the
|
|
// barycentric coords of that point relative to the triangle.
|
|
|
|
DllExport Point3 BaryCoords(Point3 p0, Point3 p1, Point3 p2, Point3 p);
|
|
|
|
// Same thing in 2D
|
|
DllExport Point3 BaryCoords(Point2 p0, Point2 p1, Point2 p2, Point2 p);
|
|
|
|
|
|
|
|
//--RayHitsBox--------------------------------------------------------
|
|
// Returns true of the ray pierces the box
|
|
|
|
DllExport BOOL RayHitsBox(Ray &ray, Box3 &b);
|
|
|
|
|
|
// DistPtToLine ---------------------------------------------------------
|
|
// find distance of q from line p0->p1
|
|
|
|
DllExport float DistPtToLine(Point2 *p0, Point2 *p1, Point2 *q );
|
|
|
|
|
|
// Dist3DPtToLine ---------------------------------------------------------
|
|
// find distance of q from line p0->p1
|
|
|
|
DllExport float Dist3DPtToLine(Point3* p0, Point3* p1, Point3* q );
|
|
|
|
|
|
//----------------------------------------------------------------------
|
|
// USE CompBumpVec2D INSTEAD! This is here for compatibility only.
|
|
//
|
|
// Computing the 3 Bump basis vectors from the UVW's at the triangle.
|
|
//
|
|
// input:
|
|
// tv: texture coordinates at 3 triangle vertices
|
|
// v: coordinates of triangle vertices (usually in camera space)
|
|
//
|
|
// output:
|
|
// bvec: the 3 bump basis vectors (normalized) corresponding to the U,V,and W axes.
|
|
//
|
|
DllExport void ComputeBumpVectors(const Point3 tv[3], const Point3 v[3], Point3 bvec[3]);
|
|
|
|
|
|
//----------------------------------------------------------------------
|
|
// Computing the 2 Bump basis vectors from the UV, VW, or WU at a triangle.
|
|
//
|
|
// input:
|
|
// axis: 0=>UV, 1=>VW, 2=>WU ( use defined constants AXIS_UV, AXIS_VW, AXIS_WU in imtl.h
|
|
// tv: texture coordinates at 3 triangle vertices
|
|
// v: coordinates of triangle vertices (usually in camera space)
|
|
//
|
|
// output:
|
|
// bvec: the 2 bump basis vectors (normalized) corresponding to the specified axes.
|
|
//
|
|
// THIS IS THE RECOMMENDED WAY TO COMPUTE BUMP VECTORS, NOT ComputeBumpVectors, which
|
|
// can give erroneous results
|
|
DllExport void ComputeBumpVec2D(int axis, const Point3 tv[3], const Point3 v[3], Point3 bvec[2]);
|
|
|
|
//----------------------------------------------------------------------
|
|
// Computes the bump basis vector for the U texture channel (called the Tangent),
|
|
// and the cross product of the surface normal with the Tangent (called the Binormal).
|
|
// These along with the surface normal are used as the basis vectors for normal mapping.
|
|
DllExport void ComputeTangentAndBinormal(const Point3 tv[3], const Point3 v[3], Point3 bvec[2]);
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// Quick and dirty unit vector compression. Only accurate to 1 part in 512
|
|
//
|
|
ULONG DllExport CompressNormal(Point3 p);
|
|
|
|
Point3 DllExport DeCompressNormal(ULONG n);
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// JH 10/05/98
|
|
// Method to come up with an arbitray axis system given an "up" direction
|
|
// Conforms to the AutoCAD algorithm
|
|
void DllExport ArbAxis(const Point3& zAxis, Matrix3& matrix);
|
|
|
|
|
|
|
|
|
|
#endif |