我想要做的是开发自己的路径跟踪器。实际上我使用的是我的教授在c ++中提供的框架,这是一个非常基本的路径跟踪器。我要做的是通过修改此路径跟踪器并检查结果来应用新的梯度域算法。根据算法,我有时会检查我正在击中的物体是镜面反射还是漫反射。 该文明确指出: 我们根据BRDF粗糙度 的阈值将所有路径顶点分类为镜面或非镜面。我不知道要做的是如何检查出来。根据框架,材料的规定如下:
public:
// constructor / destructor
Material();
~Material();
// get / set
void SetName( const char* _Name );
char* GetName() { return name; }
void SetColor( vec3 _Color ) { color = _Color; }
vec3& GetColor() { return color; }
void SetTexture( Texture* _Texture ) { texture = _Texture; }
Texture* GetTexture() { return texture; }
void SetNormalMap( Texture* _Normals ) { normalMap = _Normals; }
Texture* GetNormalMap() { return normalMap; }
void SetIndex( int _Idx ) { idx = _Idx; }
int GetIndex() { return idx; }
// methods
void Init( char* _Texture );
void Init( char* _Texture, char* _NormalMap = 0 );
// data members
私人: 纹理*纹理; Texture * normalMap; vec3颜色; char * name; int idx; };
和Texture是一个定义如下的对象:
class Texture
{
public:
// constructor / destructor
Texture();
Texture( const char* _File );
~Texture();
// get / set
uint GetID() { return id; }
void SetID( uint _ID ) { id = _ID; }
void SetName( const char* _Name );
char* GetName() { return name; }
bool HasAlpha() { return hasAlpha; }
void SetAlpha( bool _Alpha ) { hasAlpha = _Alpha; }
// methods
void Load( const char* _File );
void sRGBtoLinear( unsigned char* _Data, uint _Size, uint _Stride );
// data members
uint id, width, height;
uint* idata;
float* fdata;
char* name;
bool hasAlpha;
};
现在,根据这些数据,我该如何检查材料是漫反射还是镜面反射?