| author | Radek Brich <radek.brich@devl.cz> | 
| Wed, 26 Mar 2008 17:03:38 +0100 | |
| branch | pyrit | 
| changeset 48 | a4913301c626 | 
| parent 47 | 320d5d466864 | 
| child 49 | 558fde7da82a | 
| permissions | -rw-r--r-- | 
| 47 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 1 | /* | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 2 | * scene.cc: screen sample generation and image reconstruction | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 3 | * | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 4 | * This file is part of Pyrit Ray Tracer. | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 5 | * | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 6 | * Copyright 2008 Radek Brich | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 7 | * | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 8 | * Permission is hereby granted, free of charge, to any person obtaining a copy | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 9 | * of this software and associated documentation files (the "Software"), to deal | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 10 | * in the Software without restriction, including without limitation the rights | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 11 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 12 | * copies of the Software, and to permit persons to whom the Software is | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 13 | * furnished to do so, subject to the following conditions: | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 14 | * | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 15 | * The above copyright notice and this permission notice shall be included in | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 16 | * all copies or substantial portions of the Software. | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 17 | * | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 20 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 21 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 22 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 23 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 24 | * THE SOFTWARE. | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 25 | */ | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 26 | |
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 27 | #include <math.h> | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 28 | |
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 29 | #include "common.h" | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 30 | #include "scene.h" | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 31 | |
| 48 
a4913301c626
begin moving subsampling and oversampling to Sampler
 Radek Brich <radek.brich@devl.cz> parents: 
47diff
changeset | 32 | void DefaultSampler::init() | 
| 
a4913301c626
begin moving subsampling and oversampling to Sampler
 Radek Brich <radek.brich@devl.cz> parents: 
47diff
changeset | 33 | {
 | 
| 
a4913301c626
begin moving subsampling and oversampling to Sampler
 Radek Brich <radek.brich@devl.cz> parents: 
47diff
changeset | 34 | phase = 0; | 
| 
a4913301c626
begin moving subsampling and oversampling to Sampler
 Radek Brich <radek.brich@devl.cz> parents: 
47diff
changeset | 35 | } | 
| 
a4913301c626
begin moving subsampling and oversampling to Sampler
 Radek Brich <radek.brich@devl.cz> parents: 
47diff
changeset | 36 | |
| 47 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 37 | int DefaultSampler::initSampleSet() | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 38 | {
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 39 | if ( phase == 0 ) | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 40 | 	{
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 41 | phase++; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 42 | return w*h; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 43 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 44 | else | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 45 | 	{
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 46 | phase = -1; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 47 | return 0; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 48 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 49 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 50 | |
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 51 | Sample* DefaultSampler::nextSample(Sample *prev) | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 52 | {
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 53 | DefaultSample *s = new DefaultSample; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 54 | if (prev) | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 55 | 	{
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 56 | DefaultSample *sp = static_cast<DefaultSample*>(prev); | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 57 | s->sx = sp->sx + 1; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 58 | s->sy = sp->sy; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 59 | if (s->sx >= w) | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 60 | 		{
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 61 | s->sx = 0; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 62 | s->sy++; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 63 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 64 | if (s->sy >= h) | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 65 | 		{
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 66 | delete s; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 67 | return NULL; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 68 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 69 | s->x = (Float)s->sx/h - (Float)w/h/2.0; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 70 | s->y = (Float)s->sy/h - 0.5; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 71 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 72 | else | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 73 | 	{
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 74 | s->x = -(Float)w/h/2.0; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 75 | s->y = -0.5; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 76 | s->sx = 0; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 77 | s->sy = 0; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 78 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 79 | return s; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 80 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 81 | |
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 82 | void DefaultSampler::saveSample(Sample *samp, Colour &col) | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 83 | {
 | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 84 | DefaultSample *sp = static_cast<DefaultSample*>(samp); | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 85 | Float *buf = buffer + 3*(sp->sy*w + sp->sx); | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 86 | *(buf++) = col.r; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 87 | *(buf++) = col.g; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 88 | *(buf++) = col.b; | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 89 | } | 
| 
320d5d466864
move Sampler classes to sampler.cc
 Radek Brich <radek.brich@devl.cz> parents: diff
changeset | 90 |