kd-tree building - check all axes for best split, add additional shape-bbox check
extent Container bounds by Eps to fix invisible triangles on borders
new Camera constructor with more intuitive lookat/up vectors
fix camera axes (mirrored images)
better camera angle-of-view
change capitalization of addShape and addLight
/* * common.h: common functions and definitions * * This file is part of Pyrit Ray Tracer. * * Copyright 2006, 2007, 2008 Radek Brich * * 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#define COMMON_H#include <stdio.h>#include <stdarg.h>#include <float.h>#include <pthread.h>#ifdef PYRIT_DOUBLE# define Float double# define Eps DBL_EPSILON# define Inf DBL_MAX#else# define Float float# define Eps 1e-6# define Inf FLT_MAX#endif/* verbosity level:0: only errors (E)1: major status messages (*)2: minor status, progress (-)3: debug messages (D)4: thread debugdefault = 2*/extern int pyrit_verbosity;inline void dbgmsg(const int vlevel, const char *format, ...){ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; if (pyrit_verbosity >= vlevel) { if (pyrit_verbosity >= 4) pthread_mutex_lock(&mutex); va_list ap; va_start(ap, format); vprintf(format, ap); va_end(ap); fflush(stdout); if (pyrit_verbosity >= 4) pthread_mutex_unlock(&mutex); }}template<typename Type> const Type &min3(const Type &a, const Type &b, const Type &c){ if (a <= b) { if (a <= c) return a; else return c; } else { if (b <= c) return b; else return c; }}template<typename Type> const Type &max3(const Type &a, const Type &b, const Type &c){ if (a >= b) { if (a >= c) return a; else return c; } else { if (b >= c) return b; else return c; }}#endif