62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
|
|
#include "std.h"
|
|
#include "gxlight.h"
|
|
#include "gxscene.h"
|
|
#include "gxgraphics.h"
|
|
|
|
const float PI=3.14159265359f; //180 degrees
|
|
const float TWOPI=PI*2.0f; //360 degrees
|
|
const float HALFPI=PI*.5f; //90 degrees
|
|
const float EPSILON=.000001f;
|
|
|
|
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;
|
|
}
|