00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __MATERIAL_H__
00030 #define __MATERIAL_H__
00031
00032 #include "X3DMaterialNode.h"
00033 #include "SFFloat.h"
00034 #include "SFColor.h"
00035
00036 namespace H3D {
00037
00075 class H3DAPI_API Material : public X3DMaterialNode {
00076 public:
00077
00079 Material( Inst< DisplayList > _displayList = 0,
00080 Inst< SFFloat > _ambientIntensity = 0,
00081 Inst< SFColor > _diffuseColor = 0,
00082 Inst< SFColor > _emissiveColor = 0,
00083 Inst< SFNode > _metadata = 0,
00084 Inst< SFFloat > _shininess = 0,
00085 Inst< SFColor > _specularColor = 0,
00086 Inst< SFFloat > _transparency = 0 );
00087
00089 virtual void render();
00090
00095 virtual void preRender() {
00096 glPushAttrib( GL_COLOR_BUFFER_BIT | GL_LIGHTING_BIT );
00097 }
00098
00102 virtual void postRender() {
00103 glPopAttrib();
00104 }
00105
00108 virtual bool isTransparent() {
00109 return transparency->getValue() > 0;
00110 }
00111
00123 auto_ptr< SFFloat > ambientIntensity;
00124
00134 auto_ptr< SFColor > diffuseColor;
00135
00145 auto_ptr< SFColor > emissiveColor;
00146
00156 auto_ptr< SFFloat > shininess;
00157
00165 auto_ptr< SFColor > specularColor;
00166
00175 auto_ptr< SFFloat > transparency;
00176
00178 static H3DNodeDatabase database;
00179 };
00180 }
00181
00182 #endif