author | Radek Brich <radek.brich@devl.cz> |
Thu, 03 Jan 2008 18:06:34 +0100 | |
branch | pyrit |
changeset 44 | 3763b26244f0 |
parent 43 | 0b8b968b42d1 |
child 45 | 76b254ce92cf |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/COPYING Thu Jan 03 18:06:34 2008 +0100 @@ -0,0 +1,17 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.
--- a/DEVNOTES Sun Dec 30 00:11:47 2007 +0100 +++ b/DEVNOTES Thu Jan 03 18:06:34 2008 +0100 @@ -1,58 +1,21 @@ -KdTree Algorithm ----------------- - -def build_kdtree(root, shapes): - root = new KdNode - root.shapes = shapes - subdivide(root, bounding_box(shapes), 0) - -def subdivide(node, bbox, depth): - # choose split axis - axis = bbox.largest_extend() +Classes +------- - # find split position - splitpos = find_split_position(axis) +vector.h -- vector of three scalars, also used for colour +matrix.h -- matrix class, currently not used +quaternion.h -- quaternion class for camera rotation - leftnode, rightnode = new KdNode[2] - for each shape: - if (node->intersectleftnode()) leftnode->addprimitive( primitive ) - if (node->intersectrightnode()) rightnode->addprimitive( primitive ) - subdivide(leftnode, bbox.left_split(splitpos), depth+1) - subdivide(rightnode, bbox.right_split(splitpos), depth+1) - -def find_split_position(axis): - mshapes = new ShapeListWithMarks(shapes) - - # sort new shape list according to left boundaries - mshapes.sort(axis) +container.h -- container for shapes, base class for octree and kd-tree +octree.h -- Octree space subdivision structure for acceleration of ray-shape intersection search +kdtree.h -- KdTree space subdivision structure - splitlist = new SplitList() - for each mshape from mshapes: - splitlist.add_extremes(mshape, axis) - splitlist.sort() - for each split from splitlist: - for each mshape from mshapes: - if mshape.marked: - continue +scene.h -- scene objects: Ray, Light, Camera and shapes +raytracer.h -- ray tracer class +common.h -- Float definition (float/double) and some helper functions - # if shape is on left side of split plane - if mshape.r_boundary <= split.pos: - split.lnum++ - mshape.mark() - # if shape is completely contained in split plane - if mshape.l_boundary == mshape.r_boundary == split.pos: - if split.num_smaller_subcell == 0: - split.num_bigger_subcell++ - else: - split.num_smaller_subcell++ - - # if shape is on right side of split plane - if mshape.l_boundary >= split.pos: - split.r_num += mshapes.count - mshape.number - break - - # if shape occupies both sides of split plane - if mshape.l_boundary < split.pos and mshape.r_boundary > split.pos: - split.l_num++ - split.r_num++ +Container Usage +--------------- +(Container|Octree|KdTree) top; +scene.setTop(top) // top object in hierarchy +top.optimize() // build optimization structure
--- a/README Sun Dec 30 00:11:47 2007 +0100 +++ b/README Thu Jan 03 18:06:34 2008 +0100 @@ -2,10 +2,33 @@ Pyrit Ray Tracer ================== -License -------- -Currently unlicensed, you may not redistribute or use this work for any purposes. -Will be MIT licensed when ready. + +File Organization +----------------- +/bin -- output directory for binary objects +/ccdemos -- ray tracer demos in C++ +/demos -- ray tracer demos in Python +/include -- header files +/models -- common models for use by demos +/src -- ray tracing library source code +/tests -- test programs for classes + +Classes organization throughout header files is explained in DEVNOTES. + + +Building +-------- +Type 'make all' to build everything and 'make help' for list of targets. + +Requirements: + pthreads (see bellow) + Python 2.4 or newer for Python module and demos + PIL (Python Imaging Library) for Python demos + SDL for interactive C++ demos + libpng and zlib for rendering to PNG file from C++ demos + +Flags can be adjusted in config.mk. + Pthreads -------- @@ -17,3 +40,14 @@ For Windows + Mingw32, get pthreads library here: http://sources.redhat.com/pthreads-win32/ + + +License +------- +This software is published under terms of MIT license. +See COPYING for full text of license. + + +Website +------- +Latest version can be obtained at http://wiki.fiction.cz/Pyrit
--- a/TODO Sun Dec 30 00:11:47 2007 +0100 +++ b/TODO Thu Jan 03 18:06:34 2008 +0100 @@ -1,33 +1,33 @@ Bugs ==== - * concurrent read? (concurrent write should not occur) + * bad sphere/box transmisivity + Inside-out transition is ignored as every second intersection is ignored to avoid duplicit + intersect points. This solution should be replaced by moving ray origin a little forward, which + should work as well and without side-effects. Future Plans ============ + * namespace * kd-tree: - optimize structures - - optimize construction: do not use bounding boxes of shapes, instead implement box-shape intersection + - optimize construction: use box-shape intersection instead of bounding boxes of shapes - optimize traversal -- no std::vector - save/load - * textures (3D procedural, pixmaps later) - * update Python binding: Camera, new classes - * namespace + * textures (3D procedural, pixmaps) + * update Python binding: Camera, other new classes * stochastic oversampling * absorbtion of refracted rays in dense materials (can be computed using shape distance and some 'absorbance' constant) + * implement efficient AABB-ray intersection using Plucker coordinates + * generalization: Camera "shader" (ray generator), surface shader and maybe light & background shaders New Classes? ============ -container.h -- Container -kdtree.h -- KdTree shapes.h -- Triangle, Sphere scene.h -- Ray, Light, Camera, Scene material.h -- Material, Texture -matrix.h -- Matrix -vector.h -- Vector3 reader.h -- Reader, WavefrontReader -KdTree top wf = new WavefrontReader() wf.setContainer(top) wf.setTransform(monkey_pos_matrix) @@ -35,11 +35,8 @@ // more transform&reads destroy wf -top.optimize() -- i.e. build tree - Scene scene -- container with shapes, a camera and lights scene = new Scene() -scene.setTop(top) -- top object in hierarchy scene.setCamera(new Camera(eye, u, v, p)) scene.addLight(new PointLight(pos, color)) rt.setScene(scene)
--- a/include/common.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/common.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: common.h + * common.h: common functions and definitions + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef COMMON_H
--- a/include/container.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/container.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: container.h + * container.h: Container class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef CONTAINER_H
--- a/include/kdtree.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/kdtree.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: kdtree.h + * kdtree.h: KdTree class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef KDTREE_H
--- a/include/matrix.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/matrix.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,12 +1,29 @@ /* - * Pyrit Ray Tracer - * file: matrix.h + * matrix.h: Matrix class, currently not used + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ -/* not used at this time */ - #ifndef MATRIX_H #define MATRIX_H
--- a/include/noise.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/noise.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: noise.h + * noise.h: noise generators + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef NOISE_H
--- a/include/octree.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/octree.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: octree.h + * octree.h: Octree class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef OCTREE_H
--- a/include/quaternion.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/quaternion.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: quaternion.h + * quaternion.h: Quaternion class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef QUATERNION_H @@ -22,9 +41,9 @@ Quaternion(): a(0), b(0), c(0), d(0) {}; Quaternion(const Float aa, const Float ab, const Float ac, const Float ad): a(aa), b(ab), c(ac), d(ad) {}; - Quaternion(const Vector3& v): a(1), b(v.x), c(v.y), d(v.z) {}; + Quaternion(const Vector3& v): a(0), b(v.x), c(v.y), d(v.z) {}; - Vector3 toVector() { return Vector3(b/a, c/a, d/a); }; + Vector3 toVector() { return Vector3(b, c, d); }; Quaternion normalize() {
--- a/include/raytracer.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/raytracer.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: raytracer.h + * raytracer.h: Raytracer class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef RAYTRACER_H
--- a/include/scene.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/scene.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: scene.h + * scene.h: classes for objects in scene + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef SCENE_H
--- a/include/vector.h Sun Dec 30 00:11:47 2007 +0100 +++ b/include/vector.h Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: vector.h + * vector.h: Vector3 class with Colour alias + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifndef VECTOR_H
--- a/src/container.cc Sun Dec 30 00:11:47 2007 +0100 +++ b/src/container.cc Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: container.cc + * container.cc: Container class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #include "common.h"
--- a/src/kdtree.cc Sun Dec 30 00:11:47 2007 +0100 +++ b/src/kdtree.cc Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: kdtree.cc + * kdtree.cc: KdTree class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #include <algorithm>
--- a/src/noise.cc Sun Dec 30 00:11:47 2007 +0100 +++ b/src/noise.cc Thu Jan 03 18:06:34 2008 +0100 @@ -1,141 +1,108 @@ /* - * Pyrit Ray Tracer - * file: noise.cc + * noise.cc: noise generators + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2008 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ -/* -Based on -JAVA REFERENCE IMPLEMENTATION OF IMPROVED NOISE -by KEN PERLIN (COPYRIGHT 2002) -*/ - #include <math.h> #include "noise.h" +/* +Perlin noise +Based on JAVA REFERENCE IMPLEMENTATION OF IMPROVED NOISE by KEN PERLIN (COPYRIGHT 2002) +*/ + Float fade(Float t) { - return t * t * t * (t * (t * 6 - 15) + 10); + return t * t * t * (t * (t * 6 - 15) + 10); } Float lerp(Float t, Float a, Float b) { - return a + t * (b - a); + return a + t * (b - a); } Float grad(unsigned char hash, Float x, Float y, Float z) { - unsigned char h = hash & 15; // CONVERT LO 4 BITS OF HASH CODE - Float u = h<8 ? x : y, // INTO 12 GRADIENT DIRECTIONS. - v = h<4 ? y : h==12||h==14 ? x : z; - return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v); + unsigned char h = hash & 15; // CONVERT LO 4 BITS OF HASH CODE + Float u = h<8 ? x : y, // INTO 12 GRADIENT DIRECTIONS. + v = h<4 ? y : h==12||h==14 ? x : z; + return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v); } -unsigned char p[512] = { 151,160,137,91,90,15, - 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, - 190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33, - 88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166, - 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, - 102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196, - 135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123, - 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42, - 223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9, - 129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228, - 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107, - 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254, - 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180, +const unsigned char p[512] = +{ + 151,160,137,91,90,15, + 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, + 190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33, + 88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166, + 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, + 102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196, + 135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123, + 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42, + 223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9, + 129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228, + 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107, + 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254, + 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180, - 151,160,137,91,90,15, - 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, - 190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33, - 88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166, - 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, - 102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196, - 135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123, - 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42, - 223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9, - 129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228, - 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107, - 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254, - 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180 - }; + 151,160,137,91,90,15, + 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, + 190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33, + 88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166, + 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, + 102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196, + 135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123, + 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42, + 223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9, + 129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228, + 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107, + 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254, + 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180 +}; Float perlin(Float x, Float y, Float z) { - int X = (int)floor(x) & 255, // FIND UNIT CUBE THAT - Y = (int)floor(y) & 255, // CONTAINS POINT. - Z = (int)floor(z) & 255; - x -= floor(x); // FIND RELATIVE X,Y,Z - y -= floor(y); // OF POINT IN CUBE. - z -= floor(z); - Float u = fade(x), // COMPUTE FADE CURVES - v = fade(y), // FOR EACH OF X,Y,Z. - w = fade(z); - int A = p[X ]+Y, AA = p[A]+Z, AB = p[A+1]+Z, // HASH COORDINATES OF - B = p[X+1]+Y, BA = p[B]+Z, BB = p[B+1]+Z; // THE 8 CUBE CORNERS, - - return lerp(w, lerp(v, lerp(u, grad(p[AA ], x , y , z ), // AND ADD - grad(p[BA ], x-1, y , z )), // BLENDED - lerp(u, grad(p[AB ], x , y-1, z ), // RESULTS - grad(p[BB ], x-1, y-1, z ))),// FROM 8 - lerp(v, lerp(u, grad(p[AA+1], x , y , z-1 ), // CORNERS - grad(p[BA+1], x-1, y , z-1 )), // OF CUBE - lerp(u, grad(p[AB+1], x , y-1, z-1 ), - grad(p[BB+1], x-1, y-1, z-1 )))); -} - - -/* -// JAVA REFERENCE IMPLEMENTATION OF IMPROVED NOISE - COPYRIGHT 2002 KEN PERLIN. + int X = (int)floor(x) & 255, + Y = (int)floor(y) & 255, + Z = (int)floor(z) & 255; + x -= floor(x); + y -= floor(y); + z -= floor(z); + Float u = fade(x), + v = fade(y), + w = fade(z); + int A = p[X ]+Y, AA = p[A]+Z, AB = p[A+1]+Z, + B = p[X+1]+Y, BA = p[B]+Z, BB = p[B+1]+Z; -public final class ImprovedNoise { - static public double noise(double x, double y, double z) { - int X = (int)Math.floor(x) & 255, // FIND UNIT CUBE THAT - Y = (int)Math.floor(y) & 255, // CONTAINS POINT. - Z = (int)Math.floor(z) & 255; - x -= Math.floor(x); // FIND RELATIVE X,Y,Z - y -= Math.floor(y); // OF POINT IN CUBE. - z -= Math.floor(z); - double u = fade(x), // COMPUTE FADE CURVES - v = fade(y), // FOR EACH OF X,Y,Z. - w = fade(z); - int A = p[X ]+Y, AA = p[A]+Z, AB = p[A+1]+Z, // HASH COORDINATES OF - B = p[X+1]+Y, BA = p[B]+Z, BB = p[B+1]+Z; // THE 8 CUBE CORNERS, - - return lerp(w, lerp(v, lerp(u, grad(p[AA ], x , y , z ), // AND ADD - grad(p[BA ], x-1, y , z )), // BLENDED - lerp(u, grad(p[AB ], x , y-1, z ), // RESULTS - grad(p[BB ], x-1, y-1, z ))),// FROM 8 - lerp(v, lerp(u, grad(p[AA+1], x , y , z-1 ), // CORNERS - grad(p[BA+1], x-1, y , z-1 )), // OF CUBE - lerp(u, grad(p[AB+1], x , y-1, z-1 ), - grad(p[BB+1], x-1, y-1, z-1 )))); - } - static double fade(double t) { return t * t * t * (t * (t * 6 - 15) + 10); } - static double lerp(double t, double a, double b) { return a + t * (b - a); } - static double grad(int hash, double x, double y, double z) { - int h = hash & 15; // CONVERT LO 4 BITS OF HASH CODE - double u = h<8 ? x : y, // INTO 12 GRADIENT DIRECTIONS. - v = h<4 ? y : h==12||h==14 ? x : z; - return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v); - } - static final int p[] = new int[512], permutation[] = { 151,160,137,91,90,15, - 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, - 190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33, - 88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166, - 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, - 102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196, - 135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123, - 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42, - 223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9, - 129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228, - 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107, - 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254, - 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180 - }; - static { for (int i=0; i < 256 ; i++) p[256+i] = p[i] = permutation[i]; } + return lerp(w, lerp(v, lerp(u, grad(p[AA ], x , y , z ), + grad(p[BA ], x-1, y , z )), + lerp(u, grad(p[AB ], x , y-1, z ), + grad(p[BB ], x-1, y-1, z ))), + lerp(v, lerp(u, grad(p[AA+1], x , y , z-1 ), + grad(p[BA+1], x-1, y , z-1 )), + lerp(u, grad(p[AB+1], x , y-1, z-1 ), + grad(p[BB+1], x-1, y-1, z-1 )))); } -*/
--- a/src/octree.cc Sun Dec 30 00:11:47 2007 +0100 +++ b/src/octree.cc Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: octree.cc + * octree.cc: Octree class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #include "octree.h"
--- a/src/raytracer.cc Sun Dec 30 00:11:47 2007 +0100 +++ b/src/raytracer.cc Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: raytracer.cc + * raytracer.cc: Raytracer class + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #ifdef PTHREADS
--- a/src/raytracermodule.cc Sun Dec 30 00:11:47 2007 +0100 +++ b/src/raytracermodule.cc Thu Jan 03 18:06:34 2008 +0100 @@ -1,9 +1,27 @@ /* - * Pyrit Ray Tracer - * file: raytracermodule.cc - * a module for Python + * raytracermodule.cc: Python module + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #include <Python.h>
--- a/src/scene.cc Sun Dec 30 00:11:47 2007 +0100 +++ b/src/scene.cc Thu Jan 03 18:06:34 2008 +0100 @@ -1,8 +1,27 @@ /* - * Pyrit Ray Tracer - * file: scene.cc + * scene.cc: classes for objects in scene + * + * This file is part of Pyrit Ray Tracer. + * + * Copyright 2006, 2007 Radek Brich * - * Radek Brich, 2006-2007 + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. */ #include <math.h>