void Light::applyTransform(int projection_nb) { if(m_type == OMNI) { Transformf trans(node()->getGlobalTransform()); float transx = -trans.getPosition().x; float transy = -trans.getPosition().y; float transz = -trans.getPosition().z; glTranslatef(transx, transy, transz); } else if(m_type == SPOT) { node()->getGlobalTransform().getInverse().glMultd(); } else if(m_type == SUN) { #ifdef MERGEFORSUN return; #endif Viewpoint* targetVp = RENDER_MANAGER.getRenderPassInfo()->lod_viewpoint; targetVp->applyTransform(projection_nb); } }
void Light::drawDebug(const GLWidget* widget, const RenderManager::DebugGizmosFilter& filter) const { if(filter.draw_lights) { widget->qglColor(Qt::yellow); glBegin(GL_LINE_LOOP); for(int i=0 ; i<360 ; i+=10) { float sin = fastSin(i)/10; float cos = fastCos(i)/10; glVertex3d(0,sin,cos); } glEnd(); glBegin(GL_LINE_LOOP); for(int i=0 ; i<360 ; i+=10) { float sin = fastSin(i)/10; float cos = fastCos(i)/10; glVertex3d(sin,0,cos); } glEnd(); glBegin(GL_LINE_LOOP); for(int i=0 ; i<360 ; i+=10) { float sin = fastSin(i)/10; float cos = fastCos(i)/10; glVertex3d(sin,cos,0); } glEnd(); if(m_type == SPOT || m_type == SUN) { glPushMatrix(); if(m_type == SUN) { glLoadIdentity(); #ifndef MERGEFORSUN Viewpoint* targetVp = RENDER_MANAGER.getRenderPassInfo()->lod_viewpoint; targetVp->applyTransform(0); #endif } Matrix4d mat; if(m_type == SUN) { computePSSM(mat, 0); } else { computeLightFrustum(mat); } mat.invert(); glMultMatrixd(mat.values); glBegin(GL_LINES); glVertex3d(-1,-1,-1); glVertex3d( 1,-1,-1); glVertex3d(-1,-1,-1); glVertex3d(-1, 1,-1); glVertex3d(-1,-1,-1); glVertex3d(-1,-1, 1); glVertex3d( 1,-1,-1); glVertex3d( 1, 1,-1); glVertex3d( 1,-1,-1); glVertex3d( 1,-1, 1); glVertex3d(-1, 1,-1); glVertex3d( 1, 1,-1); glVertex3d(-1, 1,-1); glVertex3d(-1, 1, 1); widget->qglColor(Qt::red); glVertex3d(-1,-1, 1); glVertex3d( 1,-1, 1); glVertex3d(-1,-1, 1); glVertex3d(-1, 1, 1); glVertex3d( 1, 1, 1); glVertex3d(-1, 1, 1); glVertex3d( 1, 1, 1); glVertex3d( 1,-1, 1); widget->qglColor(Qt::yellow); glVertex3d( 1, 1, 1); glVertex3d( 1, 1,-1); glEnd(); glPopMatrix(); } } }