#include "gxlight.hpp" #include "gxgraphics.hpp" #include "gxscene.hpp" const float PI = 3.14159265359f; //180 degrees const float TWOPI = PI * 2.0f; //360 degrees const float HALFPI = PI * .5f; //90 degrees gxLight::gxLight(gxScene* s, int type) : scene(s) { memset(&d3d_light, 0, sizeof(d3d_light)); switch (type) { case LIGHT_POINT: d3d_light.dltType = D3DLIGHT_POINT; break; case LIGHT_SPOT: d3d_light.dltType = D3DLIGHT_SPOT; break; default: d3d_light.dltType = D3DLIGHT_DIRECTIONAL; } d3d_light.dcvDiffuse.a = 1; d3d_light.dcvDiffuse.r = d3d_light.dcvDiffuse.g = d3d_light.dcvDiffuse.b = 1; d3d_light.dcvSpecular.r = d3d_light.dcvSpecular.g = d3d_light.dcvSpecular.b = 1; d3d_light.dvRange = D3DLIGHT_RANGE_MAX; d3d_light.dvTheta = 0; d3d_light.dvPhi = HALFPI; d3d_light.dvFalloff = 1; d3d_light.dvDirection.z = 1; setRange(1000); } gxLight::~gxLight() {} void gxLight::setRange(float r) { d3d_light.dvAttenuation1 = 1.0f / r; } void gxLight::setPosition(const float pos[3]) { d3d_light.dvPosition.x = pos[0]; d3d_light.dvPosition.y = pos[1]; d3d_light.dvPosition.z = pos[2]; } void gxLight::setDirection(const float dir[3]) { d3d_light.dvDirection.x = dir[0]; d3d_light.dvDirection.y = dir[1]; d3d_light.dvDirection.z = dir[2]; } void gxLight::setConeAngles(float inner, float outer) { d3d_light.dvTheta = inner; d3d_light.dvPhi = outer; }