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: "; };