Пример #1
0
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);
	}
}
Пример #2
0
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();
		}
	}
}