2013-05-05 18:18:41 +02:00
|
|
|
|
/********************************************************
|
|
|
|
|
* BoundingFrustrum.h *
|
|
|
|
|
* *
|
|
|
|
|
* XFX BoundingFrustrum definition file *
|
|
|
|
|
* Copyright <EFBFBD> XFX Team. All Rights Reserved *
|
|
|
|
|
********************************************************/
|
|
|
|
|
#ifndef _XFX_BOUNDINGFRUSTRUM_
|
|
|
|
|
#define _XFX_BOUNDINGFRUSTRUM_
|
|
|
|
|
|
|
|
|
|
#include "Enums.h"
|
|
|
|
|
#include "Matrix.h"
|
|
|
|
|
#include "Plane.h"
|
|
|
|
|
#include <System/Object.h>
|
|
|
|
|
#include <System/Types.h>
|
|
|
|
|
|
|
|
|
|
using namespace System;
|
|
|
|
|
|
|
|
|
|
namespace XFX
|
|
|
|
|
{
|
|
|
|
|
struct BoundingBox;
|
|
|
|
|
struct BoundingSphere;
|
|
|
|
|
struct Ray;
|
|
|
|
|
struct Vector3;
|
|
|
|
|
|
|
|
|
|
// Defines a frustum and helps determine whether forms intersect with it.
|
|
|
|
|
class BoundingFrustrum : virtual Object
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
static const int BottomPlaneIndex;
|
|
|
|
|
Vector3 cornerArray[8];
|
|
|
|
|
static const int FarPlaneIndex;
|
|
|
|
|
static const int LeftPlaneIndex;
|
|
|
|
|
Matrix matrix;
|
|
|
|
|
static const int NearPlaneIndex;
|
|
|
|
|
static const int NumPlanes;
|
|
|
|
|
Plane planes[6];
|
|
|
|
|
static const int RightPlaneIndex;
|
|
|
|
|
static const int TopPlaneIndex;
|
|
|
|
|
|
|
|
|
|
static Vector3 ComputeIntersection(Plane plane, Ray ray);
|
|
|
|
|
static Ray ComputeIntersectionLine(Plane p1, Plane p2);
|
|
|
|
|
void SetMatrix(Matrix value);
|
|
|
|
|
void SupportMapping(Vector3 v, out Vector3 result);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
Plane Bottom();
|
|
|
|
|
static const int CornerCount;
|
|
|
|
|
Plane Far();
|
|
|
|
|
Plane Left();
|
|
|
|
|
Matrix Matrix_();
|
|
|
|
|
void Matrix_(Matrix value);
|
|
|
|
|
Plane Near();
|
|
|
|
|
Plane Right();
|
|
|
|
|
Plane Top();
|
|
|
|
|
|
|
|
|
|
BoundingFrustrum();
|
|
|
|
|
BoundingFrustrum(Matrix value);
|
|
|
|
|
BoundingFrustrum(const BoundingFrustrum &obj); // copy constructor
|
|
|
|
|
|
|
|
|
|
ContainmentType_t Contains(BoundingBox box);
|
|
|
|
|
ContainmentType_t Contains(BoundingFrustrum frustrum);
|
|
|
|
|
ContainmentType_t Contains(BoundingSphere sphere);
|
|
|
|
|
ContainmentType_t Contains(Vector3 point);
|
|
|
|
|
void Contains(BoundingBox box, out ContainmentType_t result);
|
|
|
|
|
void Contains(BoundingSphere sphere, out ContainmentType_t result);
|
|
|
|
|
void Contains(Vector3 point, out ContainmentType_t result);
|
|
|
|
|
bool Equals(BoundingFrustrum other);
|
|
|
|
|
Vector3* GetCorners();
|
|
|
|
|
void GetCorners(Vector3 corners[]);
|
|
|
|
|
int GetHashCode();
|
|
|
|
|
bool Intersects(BoundingBox box);
|
|
|
|
|
bool Intersects(BoundingFrustrum frustrum);
|
|
|
|
|
bool Intersects(BoundingSphere sphere);
|
|
|
|
|
PlaneIntersectionType_t Intersects(Plane plane);
|
|
|
|
|
float Intersects(Ray ray);
|
|
|
|
|
void Intersects(BoundingBox box, out bool result);
|
|
|
|
|
void Intersects(BoundingSphere sphere, out bool result);
|
|
|
|
|
void Intersects(Plane plane, out PlaneIntersectionType_t result);
|
|
|
|
|
void Intersects(Ray ray, out float result);
|
|
|
|
|
|
|
|
|
|
bool operator==(BoundingFrustrum other);
|
|
|
|
|
bool operator!=(BoundingFrustrum other);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif //_XFX_BOUNDINGFRUSTRUM_
|