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_head_light 4 #ifndef tools_sg_head_light 5 #define tools_sg_head_light 5 #define tools_sg_head_light 6 6 7 // Directional light following cam direction. 7 // Directional light following cam direction. 8 // It should come after a camera node. 8 // It should come after a camera node. 9 9 10 #include "torche" 10 #include "torche" 11 11 12 namespace tools { 12 namespace tools { 13 namespace sg { 13 namespace sg { 14 14 15 class head_light : public torche { 15 class head_light : public torche { 16 TOOLS_NODE(head_light,tools::sg::head_light, 16 TOOLS_NODE(head_light,tools::sg::head_light,torche) 17 public: 17 public: 18 virtual void render(render_action& a_action) 18 virtual void render(render_action& a_action) { 19 if(!on.value()) return; 19 if(!on.value()) return; 20 state& state = a_action.state(); 20 state& state = a_action.state(); 21 if((state.m_light+1)>=a_action.max_lights( 21 if((state.m_light+1)>=a_action.max_lights()) { 22 a_action.out() 22 a_action.out() 23 << "GL_MAX_LIGHTS (" << a_action.max_l 23 << "GL_MAX_LIGHTS (" << a_action.max_lights() << ") reached." 24 << std::endl; 24 << std::endl; 25 return; 25 return; 26 } 26 } 27 float dx = direction.value()[0]; 27 float dx = direction.value()[0]; 28 float dy = direction.value()[1]; 28 float dy = direction.value()[1]; 29 float dz = direction.value()[2]; 29 float dz = direction.value()[2]; 30 {mat4f mtx; 30 {mat4f mtx; 31 state.m_camera_orientation.value(mtx); 31 state.m_camera_orientation.value(mtx); 32 mtx.mul_dir_3f(dx,dy,dz);} 32 mtx.mul_dir_3f(dx,dy,dz);} 33 state.m_GL_LIGHTING = true; 33 state.m_GL_LIGHTING = true; 34 a_action.enable_light(state.m_light,vec3f( 34 a_action.enable_light(state.m_light,vec3f(dx,dy,dz),color.value(),ambient.value()); 35 state.m_light++; 35 state.m_light++; 36 } 36 } 37 public: 37 public: 38 head_light():torche(){} 38 head_light():torche(){} 39 virtual ~head_light(){} 39 virtual ~head_light(){} 40 public: 40 public: 41 head_light(const head_light& a_from):torche( 41 head_light(const head_light& a_from):torche(a_from){} 42 head_light& operator=(const head_light& a_fr 42 head_light& operator=(const head_light& a_from){ 43 torche::operator=(a_from); 43 torche::operator=(a_from); 44 return *this; 44 return *this; 45 } 45 } 46 }; 46 }; 47 47 48 }} 48 }} 49 49 50 #endif 50 #endif