First stage in refactoring Bullet: moved Bullet Collision and Dynamics and LinearMath into src folder, and all files in Collision Detection and Dynamics have bt prefix.
Made all buildsystems to work again (jam, msvc, cmake)
This commit is contained in:
195
Extras/SATConvexCollision/Geometry.h
Normal file
195
Extras/SATConvexCollision/Geometry.h
Normal file
@@ -0,0 +1,195 @@
|
||||
// Bullet Continuous Collision Detection and Physics Library
|
||||
// Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
|
||||
//
|
||||
// Geometry.h
|
||||
//
|
||||
// Copyright (c) 2006 Simon Hobbs
|
||||
//
|
||||
// This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
|
||||
//
|
||||
// Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
//
|
||||
// 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||
//
|
||||
// 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||
//
|
||||
// 3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
#ifndef BULLET_MATH_GEOMETRY_H
|
||||
#define BULLET_MATH_GEOMETRY_H
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
#include "Vector.h"
|
||||
#include "Matrix.h"
|
||||
|
||||
class Matrix44;
|
||||
class Transform;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Line
|
||||
class Line
|
||||
{
|
||||
public:
|
||||
Point3 m_start;
|
||||
Point3 m_end;
|
||||
|
||||
Line();
|
||||
Line(const Point3& start, const Point3& end);
|
||||
|
||||
// returns false if the lines are parallel
|
||||
friend bool Intersect(const Line& la, const Line& lb, float& ta, float& tb);
|
||||
friend bool IntersectSegments(const Line& la, const Line& lb, float& ta, float& tb);
|
||||
|
||||
// get projection vector between a point and a line
|
||||
// (i.e. if you add the vector to the point, then the new point will lie on the line)
|
||||
friend Vector3 GetProjectionVector(const Line& ln, const Point3& pt);
|
||||
|
||||
// get distance from point to line (and time along line)
|
||||
friend float Distance(const Line& ln, const Point3& pt, float& t);
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Ray
|
||||
class Ray
|
||||
{
|
||||
public:
|
||||
Point3 m_start;
|
||||
Vector3 m_dir;
|
||||
|
||||
Ray();
|
||||
Ray(const Point3& start, const Vector3& dir);
|
||||
|
||||
explicit Ray(const Line& line);
|
||||
|
||||
// returns false if the rays are parallel
|
||||
friend bool Intersect(const Ray& ra, const Ray& rb, float& ta, float& tb);
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Plane
|
||||
class Plane : public Vector4Base
|
||||
{
|
||||
public:
|
||||
// constructors
|
||||
Plane();
|
||||
Plane(const Plane& p);
|
||||
Plane(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w);
|
||||
Plane(const Vector3& xyz, const Scalar& w);
|
||||
Plane(const Point3& a, const Point3& b, const Point3& c);
|
||||
Plane(const Vector3& normal, const Point3& pt);
|
||||
|
||||
// construction to constant
|
||||
Plane(const Maths::ZeroTag&);
|
||||
Plane(const Maths::UnitXTag&);
|
||||
Plane(const Maths::UnitYTag&);
|
||||
Plane(const Maths::UnitZTag&);
|
||||
Plane(const Maths::UnitNegXTag&);
|
||||
Plane(const Maths::UnitNegYTag&);
|
||||
Plane(const Maths::UnitNegZTag&);
|
||||
|
||||
// explicit constructors
|
||||
explicit Plane(const __m128 b);
|
||||
explicit Plane(const Vector3& v);
|
||||
explicit Plane(const Vector4& v);
|
||||
explicit Plane(const float* p);
|
||||
|
||||
// assignment
|
||||
const Plane& operator=(const Plane& v);
|
||||
const Plane& operator=(const Maths::ZeroTag&);
|
||||
const Plane& operator=(const Maths::UnitXTag&);
|
||||
const Plane& operator=(const Maths::UnitYTag&);
|
||||
const Plane& operator=(const Maths::UnitZTag&);
|
||||
const Plane& operator=(const Maths::UnitNegXTag&);
|
||||
const Plane& operator=(const Maths::UnitNegYTag&);
|
||||
const Plane& operator=(const Maths::UnitNegZTag&);
|
||||
|
||||
// element access
|
||||
const Vector3 GetNormal() const;
|
||||
const Scalar GetDistance() const;
|
||||
|
||||
// transformations
|
||||
friend const Plane operator-(const Plane& p);
|
||||
friend const Plane operator*(const Plane& p, const Transform& m);
|
||||
|
||||
// operations
|
||||
friend const Scalar Dot(const Plane& p, const Point3& v);
|
||||
friend const Scalar Dot(const Point3& v, const Plane& p);
|
||||
|
||||
friend const Scalar Dot(const Plane& p, const Vector3& v);
|
||||
friend const Scalar Dot(const Vector3& v, const Plane& p);
|
||||
|
||||
friend const Scalar Dot(const Plane& p, const Vector4& v);
|
||||
friend const Scalar Dot(const Vector4& v, const Plane& p);
|
||||
|
||||
friend const Scalar Intersect(const Plane& p, const Ray& ray);
|
||||
friend const Scalar Intersect(const Plane& p, const Line& line);
|
||||
|
||||
// validation
|
||||
bool IsFinite() const;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Bounds3 - axis aligned bounding box
|
||||
class Bounds3
|
||||
{
|
||||
public:
|
||||
Point3 m_min, m_max;
|
||||
|
||||
static const enum OriginTag { } Origin;
|
||||
static const enum EmptyTag { } Empty;
|
||||
|
||||
// constructors
|
||||
Bounds3();
|
||||
Bounds3(const Bounds3& aabb);
|
||||
Bounds3(const Point3& min, const Point3& max);
|
||||
|
||||
// construction to constant
|
||||
Bounds3(const OriginTag&);
|
||||
Bounds3(const EmptyTag&);
|
||||
|
||||
// explicit constructors
|
||||
explicit Bounds3(const Point3& minMax);
|
||||
|
||||
// assignment
|
||||
const Bounds3& operator=(const Bounds3& aabb);
|
||||
const Bounds3& operator=(const Point3& pt);
|
||||
|
||||
const Bounds3& operator=(const OriginTag&);
|
||||
const Bounds3& operator=(const EmptyTag&);
|
||||
|
||||
// in place operations
|
||||
void operator+=(const Point3& pt);
|
||||
void operator+=(const Bounds3& aabb);
|
||||
|
||||
// operations
|
||||
friend Bounds3 operator+(const Bounds3& aabb, const Point3& pt);
|
||||
friend Bounds3 operator+(const Point3& pt, const Bounds3& aabb);
|
||||
friend Bounds3 operator+(const Bounds3& aabb, const Bounds3& aabb2);
|
||||
|
||||
bool Contains(const Point3& pt) const;
|
||||
bool Contains(const Bounds3& aabb) const;
|
||||
bool Touches(const Bounds3& aabb) const;
|
||||
|
||||
bool Intersect(const Ray& ray, float& tnear, float& tfar) const;
|
||||
bool Intersect(const Line& line, float& tnear, float& tfar) const;
|
||||
|
||||
Point3 GetCenter() const;
|
||||
Vector3 GetExtent() const;
|
||||
Vector3 GetSize() const;
|
||||
|
||||
// validation
|
||||
bool IsFinite() const;
|
||||
bool HasVolume() const;
|
||||
};
|
||||
|
||||
|
||||
#include "Geometry.inl"
|
||||
|
||||
#endif //WIN32
|
||||
#endif //BULLET_MATH_GEOMETRY_H
|
||||
Reference in New Issue
Block a user