Files
computer-graphics/HouseTextureMapping/Light.cpp
T
2024-11-26 10:51:13 +08:00

79 lines
1.5 KiB
C++

// Light.cpp: implementation of the CLight class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Test.h"
#include "Light.h"
#include "math.h"
#define PI 3.14159265
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLight::CLight()
{
L_Diffuse=CRGB(0.0,0.0,0.0);//光源的漫反射颜色
L_Specular=CRGB(1.0,1.0,1.0);//光源镜面高光颜色
L_Position.x=0.0,L_Position.y=0.0,L_Position.z=1000;//光源位置直角坐标
L_R=1000,L_Phi=0,L_Theta=0;//光源位置球坐标
L_C0=1.0;//常数衰减系数
L_C1=0.0;//线性衰减系数
L_C2=0.0;//二次衰减系数
L_OnOff=TRUE;//光源开启
}
CLight::~CLight()
{
}
void CLight::SetDiffuse(CRGB dif)
{
L_Diffuse=dif;
}
void CLight::SetSpecular(CRGB spe)
{
L_Specular=spe;
}
void CLight::SetPosition(double x,double y,double z)
{
L_Position.x=x;
L_Position.y=y;
L_Position.z=z;
}
void CLight::SetGlobal(double r,double phi,double theta)
{
L_R=r;
L_Phi=phi;
L_Theta=theta;
}
void CLight::SetOnOff(BOOL onoff)
{
L_OnOff=onoff;
}
void CLight::SetCoef(double c0,double c1,double c2)
{
L_C0=c0;
L_C1=c1;
L_C2=c2;
}
void CLight::GlobalToXYZ()
{
L_Position.x=L_R*sin(L_Phi*PI/180)*sin(L_Theta*PI/180);
L_Position.y=L_R*cos(L_Phi*PI/180);
L_Position.z=L_R*sin(L_Phi*PI/180)*cos(L_Theta*PI/180);
}