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