Initial commit
This commit is contained in:
66
Torque/SDK/engine/collision/gjk.h
Normal file
66
Torque/SDK/engine/collision/gjk.h
Normal file
@@ -0,0 +1,66 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#ifndef _GJK_H_
|
||||
#define _GJK_H_
|
||||
|
||||
#ifndef _MMATH_H_
|
||||
#include "math/mMath.h"
|
||||
#endif
|
||||
#ifndef _TVECTOR_H_
|
||||
#include "core/tVector.h"
|
||||
#endif
|
||||
#ifndef _CONVEX_H_
|
||||
#include "collision/convex.h"
|
||||
#endif
|
||||
|
||||
class Convex;
|
||||
struct CollisionStateList;
|
||||
struct Collision;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
struct GjkCollisionState: public CollisionState
|
||||
{
|
||||
/// @name Temporary values
|
||||
/// @{
|
||||
Point3F p[4]; ///< support points of object A in local coordinates
|
||||
Point3F q[4]; ///< support points of object B in local coordinates
|
||||
VectorF y[4]; ///< support points of A - B in world coordinates
|
||||
|
||||
S32 bits; ///< identifies current simplex
|
||||
S32 all_bits; ///< all_bits = bits | last_bit
|
||||
F32 det[16][4]; ///< cached sub-determinants
|
||||
F32 dp[4][4]; ///< cached dot products
|
||||
|
||||
S32 last; ///< identifies last found support point
|
||||
S32 last_bit; ///< last_bit = 1<<last
|
||||
/// @}
|
||||
|
||||
///
|
||||
void compute_det();
|
||||
bool valid(int s);
|
||||
void compute_vector(int bits, VectorF& v);
|
||||
bool closest(VectorF& v);
|
||||
bool degenerate(const VectorF& w);
|
||||
void nextBit();
|
||||
void swap();
|
||||
void reset(const MatrixF& a2w, const MatrixF& b2w);
|
||||
|
||||
GjkCollisionState();
|
||||
~GjkCollisionState();
|
||||
|
||||
void set(Convex* a,Convex* b,const MatrixF& a2w, const MatrixF& b2w);
|
||||
|
||||
void getCollisionInfo(const MatrixF& mat, Collision* info);
|
||||
void getClosestPoints(Point3F& p1, Point3F& p2);
|
||||
bool intersect(const MatrixF& a2w, const MatrixF& b2w);
|
||||
F32 distance(const MatrixF& a2w, const MatrixF& b2w, const F32 dontCareDist,
|
||||
const MatrixF* w2a = NULL, const MatrixF* _w2b = NULL);
|
||||
void render();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user