gxlighting.cc

Go to the documentation of this file.
00001 
00003 
00004 //
00005 // Copyright (c) 2002-2004 California Institute of Technology
00006 // Copyright (c) 2004-2007 University of Southern California
00007 // Rob Peters <rjpeters at usc dot edu>
00008 //
00009 // created: Fri Jul  5 15:17:06 2002
00010 // commit: $Id: gxlighting.cc 10065 2007-04-12 05:54:56Z rjpeters $
00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/gfx/gxlighting.cc $
00012 //
00013 // --------------------------------------------------------------------
00014 //
00015 // This file is part of GroovX.
00016 //   [http://ilab.usc.edu/rjpeters/groovx/]
00017 //
00018 // GroovX is free software; you can redistribute it and/or modify it
00019 // under the terms of the GNU General Public License as published by
00020 // the Free Software Foundation; either version 2 of the License, or
00021 // (at your option) any later version.
00022 //
00023 // GroovX is distributed in the hope that it will be useful, but
00024 // WITHOUT ANY WARRANTY; without even the implied warranty of
00025 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00026 // General Public License for more details.
00027 //
00028 // You should have received a copy of the GNU General Public License
00029 // along with GroovX; if not, write to the Free Software Foundation,
00030 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
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 // actions //
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

The software described here is Copyright (c) 1998-2005, Rob Peters.
This page was generated Wed Dec 3 06:49:38 2008 by Doxygen version 1.5.5.