gxmaterial.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 16:07:42 2002
00010 // commit: $Id: gxmaterial.cc 10065 2007-04-12 05:54:56Z rjpeters $
00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/gfx/gxmaterial.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_GXMATERIAL_CC_UTC20050626084024_DEFINED
00035 #define GROOVX_GFX_GXMATERIAL_CC_UTC20050626084024_DEFINED
00036 
00037 #include "gfx/gxmaterial.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 GXMATERIAL_SVID = 0;
00051 }
00052 
00053 const FieldMap& GxMaterial::classFields()
00054 {
00055 GVX_TRACE("GxMaterial::classFields");
00056   static const Field FIELD_ARRAY[] =
00057   {
00058     Field("specularColor", Field::ValueType(), &GxMaterial::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(), &GxMaterial::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(), &GxMaterial::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("shininess", &GxMaterial::shininess, 50.0, 0.0, 128.0, 1.0)
00068   };
00069 
00070   static FieldMap FIELD_MAP(FIELD_ARRAY);
00071 
00072   return FIELD_MAP;
00073 }
00074 
00075 GxMaterial* GxMaterial::make()
00076 {
00077 GVX_TRACE("GxMaterial::make");
00078  return new GxMaterial;
00079 }
00080 
00081 GxMaterial::GxMaterial() :
00082   FieldContainer(&sigNodeChanged),
00083   specularColor(1.0, 1.0, 1.0, 1.0),
00084   diffuseColor(1.0, 1.0, 1.0, 1.0),
00085   ambientColor(0.0, 0.0, 0.0, 1.0),
00086   shininess(50.0)
00087 {
00088 GVX_TRACE("GxMaterial::GxMaterial");
00089   setFieldMap(GxMaterial::classFields());
00090 }
00091 
00092 GxMaterial::~GxMaterial() throw()
00093 {
00094 GVX_TRACE("GxMaterial::~GxMaterial");
00095 }
00096 
00097 io::version_id GxMaterial::class_version_id() const
00098 {
00099 GVX_TRACE("GxMaterial::class_version_id");
00100   return GXMATERIAL_SVID;
00101 }
00102 
00103 void GxMaterial::read_from(io::reader& reader)
00104 {
00105 GVX_TRACE("GxMaterial::read_from");
00106   readFieldsFrom(reader, classFields());
00107 }
00108 
00109 void GxMaterial::write_to(io::writer& writer) const
00110 {
00111 GVX_TRACE("GxMaterial::write_to");
00112   writeFieldsTo(writer, classFields(), GXMATERIAL_SVID);
00113 }
00114 
00116 // actions //
00118 
00119 void GxMaterial::getBoundingCube(Gfx::Bbox&) const
00120 {}
00121 
00122 void GxMaterial::draw(Gfx::Canvas& canvas) const
00123 {
00124 GVX_TRACE("GxMaterial::draw");
00125 
00126   GLCanvas* glcanvas = dynamic_cast<GLCanvas*>(&canvas);
00127 
00128   if (glcanvas == 0)
00129     throw rutz::error("can't use GxLighting with non-OpenGL canvas", SRC_POS);
00130 
00131   glcanvas->material(&specularColor,
00132                      &diffuseColor,
00133                      &ambientColor,
00134                      &shininess);
00135 }
00136 
00137 static const char __attribute__((used)) vcid_groovx_gfx_gxmaterial_cc_utc20050626084024[] = "$Id: gxmaterial.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00138 #endif // !GROOVX_GFX_GXMATERIAL_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.