Click on the filename to display or download the file.
equirectangular.mi
declare shader
color "equirectangular" ()
version 1
apply lens
scanline off
trace on
end declare
equirectangular.c
#include "shader.h"
#include "miaux.h"
DLLEXPORT
int equirectangular_version(void) { return 1; }
DLLEXPORT
miBoolean equirectangular (
miColor *result, miState *state, void *params )
{
miMatrix matrix;
miVector eye_ray_direction = {0, 0, -1};
miScalar x_fractional_position =
state->raster_x / state->camera->x_resolution;
miScalar y_fractional_position =
state->raster_y / state->camera->y_resolution;
mi_matrix_rotate(
matrix,
miaux_fit(y_fractional_position, 0, 1, -M_PI/2, M_PI/2),
miaux_fit(x_fractional_position, 0, 1, M_PI, -M_PI),
0);
mi_vector_transform(&eye_ray_direction, &eye_ray_direction, matrix);
return mi_trace_eye(result, state, &state->org, &eye_ray_direction);
}
equirectangular_util.c
double miaux_fit(
double v, double oldmin, double oldmax, double newmin, double newmax)
{
return newmin + ((v - oldmin) / (oldmax - oldmin)) * (newmax - newmin);
}
22 April 2008 23:40:59