buildbsp.h

来自「3D游戏开发需要用到BSP树来经行场景渲染的管理。本代码包含完整的BSP及文件生」· C头文件 代码 · 共 49 行

H
49
字号
#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 + =
减小字号Ctrl + -
显示快捷键?