#include #include #include #include #include "cloud.h" /* * The QAEB procedural ray tracing routine. * * Ray tracing module: samples the virtual screen. * * Copyright 1998 F. Kenton Musgrave * All rights reserved */ extern CameraType camera; extern OptionsType options; extern unsigned long samples; extern unsigned long hits; /* * A very primitive ray tracing routine: * samples a virtual screen at one ray/pixel; * currently checks only for intersection with diplacement map. */ Render( Color *scanline, FILE *outfile ) { int row, column; double increment, density, stride; Ray ray, Gen_Ray(); HitData hit; Color GetLight(), Integrate_Cloud(); ColorChar *outline, CharRGB(); /* allocate memory for output scanline */ outline = (ColorChar *)calloc( (size_t)camera.hres, (size_t)sizeof( ColorChar ) ); /* calculate the all-important ray-creep increment */ increment = options.step_scale * camera.pix_width; for ( row=camera.vres-1; row>=0; row-- ) { for ( column=0; column