This is sampling.c in view mode; [Download] [Up]
/*
* sampling.c
*
* Copyright (C) 1989, 1991, Craig E. Kolb, Rod G. Bogart
* All rights reserved.
*
* This software may be freely copied, modified, and redistributed
* provided that this copyright notice is preserved on all copies.
*
* You may not distribute this software, in whole or in part, as part of
* any commercial product without the express consent of the authors.
*
* There is no warranty or other guarantee of fitness of this software
* for any purpose. It is provided solely "as is".
*
* $Id$
*
* $Log$
*/
#include "common.h"
#include "sampling.h"
SampleInfo Sampling; /* sampling information */
/*
* Set sampling options.
* Current limited to sqrt of # samples/pixel.
*/
void
SamplingSetOptions(n)
int n;
{
Sampling.sidesamples = n;
Sampling.totsamples = n*n;
Sampling.weight = 1. / (Float)Sampling.totsamples;
Sampling.spacing = 1. / (Float)Sampling.sidesamples;
}
/*
* Find a point on a unit circle that is separated from other random
* points by some jitter spacing.
*
* It should do the above, but the temporary hack below just finds a
* jittered point in a unit square.
*/
void
UnitCirclePoint(pnt, sample)
Vector *pnt;
{
/*
* This picks a random point on a -1 to 1 square. The jitter stuff
* is correct enough to avoid excessive noise. An extremely blurry
* bright highlight will look squarish, not roundish. Sorry.
*/
Float jit;
if (sample >= 0) {
jit = 2. * Sampling.spacing;
pnt->x = nrand()*jit - 1.0 +
(sample % Sampling.totsamples) * jit;
pnt->y = nrand()*jit - 1.0 +
(sample / Sampling.totsamples) * jit;
pnt->z = 0.0;
} else {
pnt->x = nrand() * 2.0 - 1.0;
pnt->y = nrand() * 2.0 - 1.0;
pnt->z = 0.0;
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.