Bsp树的实现(非OpenGL)

这篇博客介绍了作者在游戏作业中实现BSP树的过程,虽然由于时间紧张未涉及OpenGL的实现,但详细阐述了BSP树的基本原理。
摘要由CSDN通过智能技术生成

游戏作业一大堆,都没时间复习了,写了个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值