| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #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;
- }
|