Example #1
0
void RenderRayTracer::renderiza(Escena escena, Camara c) {

	RGB color;

	// float i,j;
	int i,j;

	float alfa = (c.fov*PI)/360.0;
	float dist = 0.5/tan(alfa);

	float incx = 1.0/(float)ancho*1.0;
	float incy = 1.0/(float)alto*1.0;

	float aspectratio = (float)ancho/(float)alto;
	float alfaw = alfa*aspectratio;
	float ancho_a = tan(alfaw)*dist;


	Punto centro = c.posicion + (c.look - c.posicion).normalizar()*dist;

	// Vector horizontal y vertical por los que se mueve 
	Punto horizontal = up^(c.look - c.posicion);
	horizontal.normalizar();
	Punto vertical = (c.look - c.posicion).normalizar()^horizontal;
	vertical.normalizar();

	Punto direccion = centro - horizontal*ancho_a - vertical*0.5;
	for(i=0;i<ancho;i++) {
		for(j=0;j<alto;j++) {
			// trazamos un rayo desde centro hasta x,y -> devuelve un color
			//
			// (direccion+horizontal*i*incx+vertical*j*incy - c.posicion).escribir();
			// 
			color = escena.trazarRayo(c.posicion,(direccion+horizontal*i*incx+vertical*j*incy - c.posicion).normalizar(),1,-1,1);
			raster.push_back(color);
		}
	}
	cerr << "Tiempo renderizado:  ";
};