⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buildbsp.h

📁 3D游戏开发需要用到BSP树来经行场景渲染的管理。本代码包含完整的BSP及文件生成实现
💻 H
字号:
#pragma once

#include "bspconv.h"

class CBSPBuilder : public IBSPTreeVisitor {
public:
	// visitor interface
	void			VisitNodeBegin(_CBSPSplitNode *n);
	void			VisitNodeEnd(_CBSPSplitNode *n) {};
	void			VisitLeaf(_CBSPLeafNode *l) {};

	// public interface
	bool			BuildTree(_CBSPTree *tree);
	void			RebuildTree();
private:
	void			InitTree();
	void			CalcInitialTreeBounds();
	void			CreateSplitNode(_CBSPSplitNode *n);
	void			PickSplitPlane(_CBSPSplitNode *n);
	bool			ExtractMapData();

	_CBSPTree*		tree;
	CVector<_CBSPFace>	faces;	// temporary
	int				nLeafs;
};

inline void	CBSPBuilder::VisitNodeBegin(_CBSPSplitNode *n) {
	CreateSplitNode(n);
}

class CBSPReachableExtractor : public IBSPTreeVisitor {
public:
	// visitor interface
	void			VisitNodeBegin(_CBSPSplitNode *n) {};
	void			VisitNodeEnd(_CBSPSplitNode *n);
	void			VisitLeaf(_CBSPLeafNode *l);

	void			ExtractReachableAndDeallocate(_CBSPTree *old_tree);
private:

	_CBSPTree*				tree;
	CVector<_CBSPBrush*>	brushes;
	CVector<_CBSPFace*>		faces;
};

inline void CBSPReachableExtractor::VisitNodeEnd(_CBSPSplitNode *n) {
	delete n->children[0];
	delete n->children[1];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -