游戏作业一大堆,都没时间复习了,写了个bsp树,代码描述的只是原理,OpenGL弄起来太麻烦就没去搞了。
#include<iostream>
#include<stdio.h>
#include<map>
#include<vector>
#include<tchar.h>
using namespace std;
//首先建立要用到的结构——>点,面,节点,包围盒以及bsp树结构
//点
class Point
{
public:
double x,y,z;
Point():x(0),y(0),z(0){}
Point(double A,double B,double C):x(A),y(B),z(C){}
};
//面
class Face
{
public:
Point Points[3];
};
//包围盒结构
class Box
{
public:
Point Max,Min;
Box():Max(),Min(){}
};
//节点结构
class Node
{
public:
int Depth;
double CutPoint;
Box box;
int Axis;
vector<int> IdOfFace;
Node *Lchild,*Rchild;
Node():Depth(0),CutPoint(0),box(),Axis(0),Lchild(NULL),Rchild(NULL){IdOfFace.reserve(20);}
};
//Bsp树结构
class Bsp
{
public:
Node *Root;
Bsp():Root(NULL){}
~Bsp()
{
if(Root)
Free(Root);
}
void Init(Node *Pnode);
void Free(Node *Pnode);
void CreateBox(Node *Pnode);
void CutSpace(Node *Pnode,int Depth);
void CutFace(int FaceId,double CutPoint,int Axis,int *Lcount,int *Rcount,int *Bcount);
void Travel(Node *Pnode);
};
//构造一个map用于存储面
map<int,Face>SFace;
//定义Bsp内函数
//init 函数
void Bsp::Init(Node *Pnode)
{
Root=Pnode;
}
//释放树资源函数
void Bsp::Free(Node *Pnode)
{
if(Pnode!=NULL)
{
Free(Pnode->Lchild);
Free(Pnode->Rchild);
}
free(Pnode);
}
//建立包围盒函数
void