Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_sg_torche 5 #define tools_sg_torche 6 7 // directional light 8 9 #include "node" 10 #include "sf_vec3f" 11 #include "render_action" 12 13 #include "../colorfs" 14 15 namespace tools { 16 namespace sg { 17 18 class torche : public node { 19 TOOLS_NODE(torche,tools::sg::torche,node) 20 public: 21 sf_vec<colorf,float> color; 22 sf_vec<colorf,float> ambient; 23 sf_vec3f direction; 24 sf<bool> on; 25 public: 26 virtual const desc_fields& node_desc_fields() const { 27 TOOLS_FIELD_DESC_NODE_CLASS(tools::sg::torche) 28 static const desc_fields s_v(parent::node_desc_fields(),4, //WARNING : take care of count. 29 TOOLS_ARG_FIELD_DESC(color), 30 TOOLS_ARG_FIELD_DESC(ambient), 31 TOOLS_ARG_FIELD_DESC(direction), 32 TOOLS_ARG_FIELD_DESC(on) 33 ); 34 return s_v; 35 } 36 private: 37 void add_fields(){ 38 add_field(&color); 39 add_field(&ambient); 40 add_field(&direction); 41 add_field(&on); 42 } 43 public: 44 virtual void render(render_action& a_action) { 45 if(!on.value()) return; 46 state& state = a_action.state(); 47 if((state.m_light+1)>=a_action.max_lights()) { 48 a_action.out() 49 << "GL_MAX_LIGHTS (" << a_action.max_lights() << ") reached." 50 << std::endl; 51 return; 52 } 53 state.m_GL_LIGHTING = true; 54 a_action.enable_light(state.m_light,direction.value(),color.value(),ambient.value()); 55 state.m_light++; 56 } 57 public: 58 torche() 59 :parent() 60 ,color(colorf_white()) 61 ,ambient(colorf_black()) 62 ,direction(vec3f(0,0,-1)) 63 ,on(true) 64 { 65 add_fields(); 66 } 67 virtual ~torche(){} 68 public: 69 torche(const torche& a_from) 70 :parent(a_from) 71 ,color(a_from.color) 72 ,ambient(a_from.ambient) 73 ,direction(a_from.direction) 74 ,on(a_from.on) 75 { 76 add_fields(); 77 } 78 torche& operator=(const torche& a_from){ 79 parent::operator=(a_from); 80 color = a_from.color; 81 ambient = a_from.ambient; 82 direction = a_from.direction; 83 on = a_from.on; 84 return *this; 85 } 86 }; 87 88 }} 89 90 #endif