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