www.pudn.com > raytracer4.zip > raytracer.h
// -----------------------------------------------------------
// raytracer.h
// 2004 - Jacco Bikker - jacco@bik5.com - www.bik5.com - <><
// -----------------------------------------------------------
#ifndef I_RAYTRACER_H
#define I_RAYTRACER_H
#include "common.h"
namespace Raytracer {
// -----------------------------------------------------------
// Ray class definition
// -----------------------------------------------------------
class Ray
{
public:
Ray() : m_Origin( vector3( 0, 0, 0 ) ), m_Direction( vector3( 0, 0, 0 ) ), m_ID( 0 ) {};
Ray( vector3& a_Origin, vector3& a_Dir, int a_ID );
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; }
void SetID( int a_ID ) { m_ID = a_ID; }
int GetID() { return m_ID; }
private:
vector3 m_Origin;
vector3 m_Direction;
int m_ID;
};
// -----------------------------------------------------------
// Engine class definition
// Raytracer core
// -----------------------------------------------------------
class Scene;
class Primitive;
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, float& a_Dist, Primitive*& a_Prim );
Primitive* Raytrace( Ray& a_Ray, Color& a_Acc, int a_Depth, float a_RIndex, float& a_Dist );
void InitRender();
Primitive* RenderRay( vector3 a_ScreenPos, Color& a_Acc );
bool Render();
protected:
// renderer data
float m_WX1, m_WY1, m_WX2, m_WY2, m_DX, m_DY, m_SX, m_SY;
Scene* m_Scene;
Pixel* m_Dest;
int m_Width, m_Height, m_CurrLine, m_PPos;
Primitive** m_LastRow;
// data for regular grid stepping
vector3 m_SR, m_CW;
int m_CurID;
};
}; // namespace Raytracer
#endif