00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_GFX_GXLIGHTING_CC_UTC20050626084024_DEFINED
00035 #define GROOVX_GFX_GXLIGHTING_CC_UTC20050626084024_DEFINED
00036
00037 #include "gfx/gxlighting.h"
00038
00039 #include "gfx/glcanvas.h"
00040
00041 #include "io/reader.h"
00042 #include "io/writer.h"
00043
00044 #include "rutz/error.h"
00045
00046 #include "rutz/trace.h"
00047
00048 namespace
00049 {
00050 const int GXLIGHTING_SVID = 0;
00051 }
00052
00053 const FieldMap& GxLighting::classFields()
00054 {
00055 GVX_TRACE("GxLighting::classFields");
00056 static const Field FIELD_ARRAY[] =
00057 {
00058 Field("specularColor", Field::ValueType(), &GxLighting::specularColor,
00059 "0.0 0.0 0.0 0.0", "0.0 0.0 0.0 0.0", "1.0 1.0 1.0 1.0",
00060 "0.01 0.01 0.01 0.01", Field::NEW_GROUP | Field::MULTI),
00061 Field("diffuseColor", Field::ValueType(), &GxLighting::diffuseColor,
00062 "0.0 0.0 0.0 0.0", "0.0 0.0 0.0 0.0", "1.0 1.0 1.0 1.0",
00063 "0.01 0.01 0.01 0.01", Field::MULTI),
00064 Field("ambientColor", Field::ValueType(), &GxLighting::ambientColor,
00065 "0.0 0.0 0.0 0.0", "0.0 0.0 0.0 0.0", "1.0 1.0 1.0 1.0",
00066 "0.01 0.01 0.01 0.01", Field::MULTI),
00067 Field("position", Field::ValueType(), &GxLighting::position,
00068 "1.0 1.0 1.0", "-1.0 -1.0 -1.0", "1.0 1.0 1.0",
00069 "0.01 0.01 0.01", Field::NEW_GROUP | Field::MULTI),
00070 Field("spotDirection", Field::ValueType(), &GxLighting::spotDirection,
00071 "1.0 1.0 1.0", "-1.0 -1.0 -1.0", "1.0 1.0 1.0",
00072 "0.01 0.01 0.01", Field::MULTI),
00073 Field("attenuation", &GxLighting::attenuation, 0.0, 0.0, 1.0, 0.01),
00074 Field("spotExponent", &GxLighting::spotExponent, 0.0, 0.0, 128.0, 1.0),
00075 Field("spotCutoff", &GxLighting::spotCutoff, 180.0, 0.0, 180.0, 1.0),
00076 };
00077
00078 static FieldMap FIELD_MAP(FIELD_ARRAY);
00079
00080 return FIELD_MAP;
00081 }
00082
00083 GxLighting* GxLighting::make()
00084 {
00085 GVX_TRACE("GxLighting::make");
00086 return new GxLighting;
00087 }
00088
00089 GxLighting::GxLighting() :
00090 FieldContainer(&sigNodeChanged),
00091 specularColor(1.0, 1.0, 1.0, 1.0),
00092 diffuseColor(1.0, 1.0, 1.0, 1.0),
00093 ambientColor(0.0, 0.0, 0.0, 1.0),
00094 position(1.0, 1.0, 1.0),
00095 spotDirection(-1.0, -1.0, -1.0),
00096 attenuation(0.0),
00097 spotExponent(0.0),
00098 spotCutoff(180.0)
00099 {
00100 GVX_TRACE("GxLighting::GxLighting");
00101 setFieldMap(GxLighting::classFields());
00102 }
00103
00104 GxLighting::~GxLighting() throw()
00105 {
00106 GVX_TRACE("GxLighting::~GxLighting");
00107 }
00108
00109 io::version_id GxLighting::class_version_id() const
00110 {
00111 GVX_TRACE("GxLighting::class_version_id");
00112 return GXLIGHTING_SVID;
00113 }
00114
00115 void GxLighting::read_from(io::reader& reader)
00116 {
00117 GVX_TRACE("GxLighting::read_from");
00118 readFieldsFrom(reader, classFields());
00119 }
00120
00121 void GxLighting::write_to(io::writer& writer) const
00122 {
00123 GVX_TRACE("GxLighting::write_to");
00124 writeFieldsTo(writer, classFields(), GXLIGHTING_SVID);
00125 }
00126
00128
00130
00131 void GxLighting::getBoundingCube(Gfx::Bbox&) const
00132 {}
00133
00134 void GxLighting::draw(Gfx::Canvas& canvas) const
00135 {
00136 GVX_TRACE("GxLighting::draw");
00137
00138 GLCanvas* glcanvas = dynamic_cast<GLCanvas*>(&canvas);
00139
00140 if (glcanvas == 0)
00141 throw rutz::error("can't use GxLighting with non-OpenGL canvas", SRC_POS);
00142
00143 glcanvas->light(0,
00144 &specularColor,
00145 &diffuseColor,
00146 &ambientColor,
00147 &position,
00148 &spotDirection,
00149 attenuation,
00150 spotExponent,
00151 spotCutoff);
00152 }
00153
00154 static const char __attribute__((used)) vcid_groovx_gfx_gxlighting_cc_utc20050626084024[] = "$Id: gxlighting.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00155 #endif // !GROOVX_GFX_GXLIGHTING_CC_UTC20050626084024_DEFINED