Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Color.h"
00026 #include "cinder/gl/gl.h"
00027 #include "cinder/Vector.h"
00028 #include "cinder/Camera.h"
00029
00030 namespace cinder {
00031 namespace gl {
00032
00033 class Light {
00034 public:
00035 Light( int aType, int aID ) : mType( aType ), mID( aID ), mEnabled( false ) { setDefaults(); }
00036
00037 void setAmbient( const Color &aAmbient );
00038 void setDiffuse( const Color &aDiffuse );
00039 void setSpecular( const Color &aSpecular );
00040
00041 void lookAt( const Vec3f &eye, const Vec3f &target );
00042 void setDirection( const Vec3f &aDirection );
00043 Vec3f getPosition() const { return mPosition; }
00044 void setPosition( const Vec3f &aPosition );
00045
00046 void setAttenuation( float aConstantAttenuation, float aLinearAttenuation = 1.0f, float aQuadraticAttenuation = 1.0f );
00047 void setConstantAttenuation( float aConstantAttenuation );
00048 void setLinearAttenuation( float aLinearAttenuation );
00049 void setQuadraticAttenuation( float aQuadraticAttenuation );
00050
00051 void setSpotExponent( float aSpotExponent );
00052 void setSpotCutoff( float aSpotCutoff );
00053
00054 void enable();
00055 void disable();
00056 void update( const Camera &relativeCamera ) const;
00057
00058 void setShadowParams( float aShadowFOV, float aShadowNear, float aShadowFar );
00059 void setShadowRenderMatrices() const;
00060 Matrix44f getShadowTransformationMatrix( const Camera &camera ) const;
00061 const CameraPersp& getShadowCamera() const { return mShadowCam; }
00062
00063 enum Type { POINT, DIRECTIONAL, SPOTLIGHT };
00064
00065 protected:
00066 void setDefaults();
00067
00068 int mType;
00069 int mID;
00070 bool mEnabled;
00071 Color mAmbient, mDiffuse, mSpecular;
00072 Vec3f mPosition, mDirection;
00073 float mSpotExponent, mSpotCutoff;
00074 float mConstantAttenuation, mLinearAttenuation, mQuadraticAttenuation;
00075
00076 CameraPersp mShadowCam;
00077 float mShadowFOV, mShadowNear, mShadowFar;
00078 };
00079
00080 }
00081 }