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

📄 raytracer.h

📁 蒙特卡罗方法可以有效地解决复杂的工程问题
💻 H
字号:
// -----------------------------------------------------------
// raytracer.h
// 2004 - Jacco Bikker - jacco@bik5.com - www.bik5.com -   <><
// -----------------------------------------------------------

#ifndef I_RAYTRACER_H
#define I_RAYTRACER_H

#include "common.h"
#include "twister.h"

namespace Raytracer {

// -----------------------------------------------------------
// Ray class definition
// -----------------------------------------------------------
class Ray
{
public:
	Ray() : m_Origin( vector3( 0, 0, 0 ) ), m_Direction( vector3( 0, 0, 0 ) ) {};
	Ray( vector3& a_Origin, vector3& a_Dir );
	void SetOrigin( vector3& a_Origin ) { m_Origin = a_Origin; }
	void SetDirection( vector3& a_Direction ) { m_Direction = a_Direction; }
	vector3& GetOrigin() { return m_Origin; }
	vector3& GetDirection() { return m_Direction; }
private:
	vector3 m_Origin;
	vector3 m_Direction;
};

// -----------------------------------------------------------
// Engine class definition
// Raytracer core
// -----------------------------------------------------------
class KdTreeNode;
struct kdstack
{
	KdTreeNode* node;
	real t;
	vector3 pb;
	int prev, dummy1, dummy2;
};

class Scene;
class Primitive;
class Light;
class Engine
{
public:
	Engine();
	~Engine();
	void SetTarget( Pixel* a_Dest, int a_Width, int a_Height );
	Scene* GetScene() { return m_Scene; }
	int FindNearest( Ray& a_Ray, real& a_Dist, Primitive*& a_Prim );
	int FindOccluder( Ray& a_Ray, real& a_Dist );
	Primitive* Raytrace( Ray& a_Ray, Color& a_Acc, int a_Depth, real a_RIndex, real& a_Dist, real a_Samples, real a_SScale );
	real CalcShade( Light* a_Light, vector3 a_IP, vector3& a_Dir, real a_Samples, real a_SScale );
	void InitRender( vector3& a_Pos, vector3& a_Target );
	Primitive* RenderRay( vector3 a_ScreenPos, Color& a_Acc );
	bool RenderTiles();
protected:
	// renderer data
	Scene* m_Scene;
	Pixel* m_Dest;
	int m_Width, m_Height, m_CurrLine, m_PPos;
	Twister m_Twister;
	vector3 m_Origin, m_P1, m_P2, m_P3, m_P4, m_DX, m_DY;
	int* m_Mod;
	kdstack* m_Stack;
	// tile renderer data
	int m_CurrCol, m_CurrRow;
	int m_XTiles, m_YTiles;
public:
	// counters
	int m_RaysCast, m_Intersections;
};

}; // namespace Raytracer

#endif

⌨️ 快捷键说明

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