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

📄 radgen.h

📁 赫赫大名的 OGRE 游戏引擎
💻 H
字号:
// ---------------------------------------------------------------------------------------------------------------------------------
//  _____            _  _____                _     
// |  __ \          | |/ ____|              | |    
// | |__) | __ _  __| | |  __  ___ _ __     | |__  
// |  _  / / _` |/ _` | | |_ |/ _ \ '_ \    | '_ \ 
// | | \ \| (_| | (_| | |__| |  __/ | | | _ | | | |
// |_|  \_\\__,_|\__,_|\_____|\___|_| |_|(_)|_| |_|
//                                                 
//                                                 
//
// Description:
//
//   Radiosity generation main code
//
// Notes:
//
//   Best viewed with 8-character tabs and (at least) 132 columns
//
// History:
//
//   08/17/2001 by Paul Nettle: Original creation
//
// Restrictions & freedoms pertaining to usage and redistribution of this software:
//
//   This software is 100% free. If you use this software (in part or in whole) you must credit the author. This software may not be
//   re-distributed (in part or in whole) in a modified form without clear documentation on how to obtain a copy of the original
//   work. You may not use this software to directly or indirectly cause harm to others. This software is provided as-is and without
//   warrantee -- Use at your own risk. For more information, visit HTTP://www.FluidStudios.com/
//
// Copyright 2002, Fluid Studios, Inc., all rights reserved.
// ---------------------------------------------------------------------------------------------------------------------------------

#ifndef	_H_RADGEN
#define _H_RADGEN

// ---------------------------------------------------------------------------------------------------------------------------------

class	SOctree;
#include "GeomDB.h"

// ---------------------------------------------------------------------------------------------------------------------------------

class	RadGen
{
public:
	// Construction/Destruction

				RadGen()
				: _octreeThreshold(200), _octreeMaxDepth(50), _octreeMinRadius(5.0f), _bspMinSplitRange(5.0f),
				_bspGaussianResolution(8), _leaveResults(false), _writeRawLightmaps(false), _writeOctFile(false),
				_gamma(0), _ambient(0,0,0), _clamping(ClampNone), _convergence(1), _maxIterationsCount(0),
				_maxIterations(false), _ambientTerm(true), _useNusselt(false), _directLightOnly(false),
				_areaLightMultiplier(1000000), _pointLightMultiplier(0.6f), _subdivisionU(4), _subdivisionV(4), _progress(NULL) {}

		enum		ClampType {ClampNone, ClampSaturate, ClampRetain};

	// Operators

	// Implementation

virtual		void		calcVisiblePieces(const RadPatch & emitter, const RadPrimPointerListGrainy & potentialReceivers, RadPrimListGrainy & visiblePieces);
virtual		void		emit(RadPatch & emitter, const RadPrimPointerListGrainy & potentialReceivers, RadLMapArray & storedEnergy);
virtual		void		emitNusselt(RadPatch & emitter, const RadPrimPointerListGrainy & potentialReceivers, RadLMapArray & storedEnergy);
virtual		void		emitPointLight(RadPatch & emitter, const RadPrimPointerListGrainy & potentialReceivers, RadLMapArray & storedEnergy);
virtual		RadPatch *	findBrightestEmitter();
virtual		bool		processEnergy(SOctree & node);
virtual		geom::Color3	calcTotalEnergy();
virtual		geom::Color3	calcRemainingEnergy();
virtual		bool		updateStats(ProgressDlg & prog, const bool checkConvergence = true);
virtual		void		distributeInitialEnergy();
virtual		void		countPatchesAndElements();
virtual		geom::Color3	calcAmbientTerm();
virtual		void		expandEdges();
virtual		void		addAmbient();
virtual		void		doGammaCorrection();
virtual		void		doClamping();
//SK:virtual		void		go(CDialog * owner = NULL);
virtual		void		go(ProgressDlg * owner = NULL);
virtual		void		readDefaultParms();

	// Accessors

inline		GeomDB &	geometry()				{return _geometry;}
inline	const	GeomDB		geometry() const			{return _geometry;}
inline		unsigned int &	octreeThreshold()			{return _octreeThreshold;}
inline	const	unsigned int	octreeThreshold() const			{return _octreeThreshold;}
inline		unsigned int &	octreeMaxDepth()			{return _octreeMaxDepth;}
inline	const	unsigned int	octreeMaxDepth() const			{return _octreeMaxDepth;}
inline		float &		octreeMinRadius()			{return _octreeMinRadius;}
inline	const	float		octreeMinRadius() const			{return _octreeMinRadius;}
inline		float &		bspMinSplitRange()			{return _bspMinSplitRange;}
inline	const	float		bspMinSplitRange() const		{return _bspMinSplitRange;}
inline		unsigned int &	bspGaussianResolution()			{return _bspGaussianResolution;}
inline	const	unsigned int	bspGaussianResolution()	const		{return _bspGaussianResolution;}
inline		bool &		leaveResults()				{return _leaveResults;}
inline	const	bool		leaveResults()	const			{return _leaveResults;}
inline		bool &		writeRawLightmaps()			{return _writeRawLightmaps;}
inline	const	bool		writeRawLightmaps()	const		{return _writeRawLightmaps;}
inline		fstl::string &	writeRawLightmapsFolder()		{return _writeRawLightmapsFolder;}
inline	const	fstl::string &	writeRawLightmapsFolder()	const	{return _writeRawLightmapsFolder;}
inline		bool &		writeOctFile()				{return _writeOctFile;}
inline	const	bool		writeOctFile()	const			{return _writeOctFile;}
inline		fstl::string &	writeOctFilename()			{return _writeOctFilename;}
inline	const	fstl::string &	writeOctFilename()	const		{return _writeOctFilename;}
inline		fstl::string &	inputFilename()				{return _inputFilename;}
inline	const	fstl::string &	inputFilename()	const			{return _inputFilename;}
inline		float &		gamma()					{return _gamma;}
inline	const	float		gamma() const				{return _gamma;}
inline		geom::Color3 &	ambient()				{return _ambient;}
inline	const	geom::Color3 &	ambient() const				{return _ambient;}
inline		ClampType &	clamping()				{return _clamping;}
inline	const	ClampType	clamping() const			{return _clamping;}
inline		unsigned int &	convergence()				{return _convergence;}
inline	const	unsigned int	convergence() const			{return _convergence;}
inline		unsigned int &	iterationsProcessed()			{return _iterationsProcessed;}
inline	const	unsigned int	iterationsProcessed() const		{return _iterationsProcessed;}
inline		unsigned int &	maxIterationsCount()			{return _maxIterationsCount;}
inline	const	unsigned int	maxIterationsCount() const		{return _maxIterationsCount;}
inline		bool &		maxIterations()				{return _maxIterations;}
inline	const	bool		maxIterations() const			{return _maxIterations;}
inline		bool &		ambientTerm()				{return _ambientTerm;}
inline	const	bool		ambientTerm() const			{return _ambientTerm;}
inline		bool &		useNusselt()				{return _useNusselt;}
inline	const	bool		useNusselt() const			{return _useNusselt;}
inline		bool &		directLightOnly()			{return _directLightOnly;}
inline	const	bool		directLightOnly() const			{return _directLightOnly;}
inline		unsigned int &	areaLightMultiplier()			{return _areaLightMultiplier;}
inline	const	unsigned int	areaLightMultiplier() const		{return _areaLightMultiplier;}
inline		float &		pointLightMultiplier()			{return _pointLightMultiplier;}
inline	const	float		pointLightMultiplier() const		{return _pointLightMultiplier;}
inline		unsigned int &	subdivisionU()				{return _subdivisionU;}
inline	const	unsigned int	subdivisionU() const			{return _subdivisionU;}
inline		unsigned int &	subdivisionV()				{return _subdivisionV;}
inline	const	unsigned int	subdivisionV() const			{return _subdivisionV;}
inline		ProgressDlg *&	progress()				{return _progress;}
inline	const	ProgressDlg *	progress() const			{return _progress;}
inline		geom::Color3 &	initialEnergy()				{return _initialEnergy;}
inline	const	geom::Color3 &	initialEnergy() const			{return _initialEnergy;}
inline		geom::Color3 &	totalAbsorbedEnergy()			{return _totalAbsorbedEnergy;}
inline	const	geom::Color3 &	totalAbsorbedEnergy() const		{return _totalAbsorbedEnergy;}
inline		geom::Color3 &	totalEscapedEnergy()			{return _totalEscapedEnergy;}
inline	const	geom::Color3 &	totalEscapedEnergy() const		{return _totalEscapedEnergy;}
inline		geom::Color3 &	energyAbsorbedThisIteration()		{return _energyAbsorbedThisIteration;}
inline	const	geom::Color3 &	energyAbsorbedThisIteration() const	{return _energyAbsorbedThisIteration;}
inline		geom::Color3 &	energyEscapedThisIteration()		{return _energyEscapedThisIteration;}
inline	const	geom::Color3 &	energyEscapedThisIteration() const	{return _energyEscapedThisIteration;}
inline		unsigned int &	adaptiveMaxSubdivisionU()		{return _adaptiveMaxSubdivisionU;}
inline	const	unsigned int	adaptiveMaxSubdivisionU() const		{return _adaptiveMaxSubdivisionU;}
inline		unsigned int &	adaptiveMaxSubdivisionV()		{return _adaptiveMaxSubdivisionV;}
inline	const	unsigned int	adaptiveMaxSubdivisionV() const		{return _adaptiveMaxSubdivisionV;}
inline		bool &		adaptivePatchSubdivision()		{return _adaptivePatchSubdivision;}
inline	const	bool		adaptivePatchSubdivision() const	{return _adaptivePatchSubdivision;}
inline		unsigned int &	adaptiveThreshold()			{return _adaptiveThreshold;}
inline	const	unsigned int	adaptiveThreshold() const		{return _adaptiveThreshold;}
inline		unsigned int &	totalPatches()				{return _totalPatches;}
inline	const	unsigned int	totalPatches() const			{return _totalPatches;}
inline		unsigned int &	totalElements()				{return _totalElements;}
inline	const	unsigned int	totalElements() const			{return _totalElements;}
inline		float &		energyThisPass()			{return _energyThisPass;}
inline	const	float		energyThisPass() const			{return _energyThisPass;}
inline		float &		uTexelsPerUnit()			{return _uTexelsPerUnit;}
inline	const	float		uTexelsPerUnit() const			{return _uTexelsPerUnit;}
inline		float &		vTexelsPerUnit()			{return _vTexelsPerUnit;}
inline	const	float		vTexelsPerUnit() const			{return _vTexelsPerUnit;}
inline		unsigned int &	lightmapWidth()				{return _lightmapWidth;}
inline	const	unsigned int	lightmapWidth() const			{return _lightmapWidth;}
inline		unsigned int &	lightmapHeight()			{return _lightmapHeight;}
inline	const	unsigned int	lightmapHeight() const			{return _lightmapHeight;}
inline		geom::Color3 &	defaultReflectivity()			{return _defaultReflectivity;}
inline	const	geom::Color3	defaultReflectivity() const		{return _defaultReflectivity;}
inline		bool &		lightsToProcess()			{return _lightsToProcess;}
inline	const	bool		lightsToProcess() const			{return _lightsToProcess;}

private:
	// Data members

		GeomDB		_geometry;
		unsigned int	_octreeThreshold;
		unsigned int	_octreeMaxDepth;
		float		_octreeMinRadius;
		float		_bspMinSplitRange;
		unsigned int	_bspGaussianResolution;
		bool		_leaveResults;
		bool		_writeRawLightmaps;
		fstl::string	_writeRawLightmapsFolder;
		bool		_writeOctFile;
		fstl::string	_writeOctFilename;
		fstl::string	_inputFilename;
		float		_gamma;
		geom::Color3	_ambient;
		ClampType	_clamping;
		unsigned int	_convergence;
		unsigned int	_iterationsProcessed;
		unsigned int	_maxIterationsCount;
		bool		_maxIterations;
		bool		_ambientTerm;
		bool		_useNusselt;
		bool		_directLightOnly;
		unsigned int	_areaLightMultiplier;
		float		_pointLightMultiplier;
		unsigned int	_subdivisionU;
		unsigned int	_subdivisionV;
		ProgressDlg *	_progress;
		geom::Color3	_initialEnergy;
		geom::Color3	_totalAbsorbedEnergy;
		geom::Color3	_totalEscapedEnergy;
		geom::Color3	_energyAbsorbedThisIteration;
		geom::Color3	_energyEscapedThisIteration;
		unsigned int	_adaptiveMaxSubdivisionU;
		unsigned int	_adaptiveMaxSubdivisionV;
		bool		_adaptivePatchSubdivision;
		unsigned int	_adaptiveThreshold;
		unsigned int	_totalPatches;
		unsigned int	_totalElements;
		float		_energyThisPass;
		float		_uTexelsPerUnit;
		float		_vTexelsPerUnit;
		unsigned int	_lightmapWidth;
		unsigned int	_lightmapHeight;
		geom::Color3	_defaultReflectivity;
		bool		_lightsToProcess;
};

#endif // _H_RADGEN
// ---------------------------------------------------------------------------------------------------------------------------------
// RadGen.h - End of file
// ---------------------------------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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