// Light.cpp: implementation of the Light class. // ////////////////////////////////////////////////////////////////////// #include "Light.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Light::Light() { } Light::~Light() { } void Light::SetLight(GLenum light) { //glLightfv(light,GL_AMBIENT,m_Ambient_Color.GetArrayf()); glLightfv(light,GL_DIFFUSE,m_Diffuse_Color.GetArrayf()); //glLightfv(light,GL_AMBIENT,m_Diffuse_Color.GetArrayf()); glLightfv(light,GL_SPECULAR,m_Specular_Color.GetArrayf()); if(this->m_type==LIGHT_TYPE_DIRECTIONAL) { m_Position.z=0; m_Position.x=-1*m_Spot_Direction.x; m_Position.y=-1*m_Spot_Direction.y; m_Position.z=-1*m_Spot_Direction.z; } glLightfv(light,GL_POSITION,m_Position.GetArrayf()); if(m_type==LIGHT_TYPE_SPOT) { glLightfv(light,GL_SPOT_DIRECTION,m_Spot_Direction.GetArrayf()); glLightf(light,GL_SPOT_EXPONENT,m_Exponent); glLightf(light,GL_SPOT_CUTOFF,m_Cutoff); } if(this->m_type==LIGHT_TYPE_POINT) { m_Cutoff=180; glLightf(light,GL_SPOT_CUTOFF,m_Cutoff); } glEnable(light); } void Light::Load(ifstream *file) { fprintf(stderr, "Loading Light...\n"); char* tempchar=new char[500]; file->getline(tempchar,500,' '); file->getline(tempchar,500,'\n'); //pointlight if(tempchar[0]=='p') { m_type=0; } //directionallight if(tempchar[0]=='d') { m_type=1; } //spotlight if(tempchar[0]=='s') { m_type=2; } file->getline(tempchar,500,'\n'); sscanf(tempchar,"color %f %f %f",&m_Diffuse_Color.x,&m_Diffuse_Color.y,&m_Diffuse_Color.z); m_Specular_Color=m_Diffuse_Color; switch(m_type) { case 0: file->getline(tempchar,500,'\n'); sscanf(tempchar,"position %f %f %f",&m_Position.x,&m_Position.y,&m_Position.z); m_Position.w=1; file->getline(tempchar,500,'\n'); break; case 1: file->getline(tempchar,500,'\n'); sscanf(tempchar,"position %f %f %f",&m_Position.x,&m_Position.y,&m_Position.z); m_Position.w=0; sscanf(tempchar,"direction %f %f %f",&m_Position.x,&m_Position.y,&m_Position.z); break; case 2: file->getline(tempchar,500,'\n'); sscanf(tempchar,"position %f %f %f",&m_Position.x,&m_Position.y,&m_Position.z); m_Position.w=1; sscanf(tempchar,"direction %f %f %f",&m_Spot_Direction.x,&m_Spot_Direction.y,&m_Spot_Direction.z); break; } }