Credits
=======

The 3D-viewer contains parts, source code or adaptations or implementations that should give the following
aknowledgments:


cbvh_packet_traversal.cpp
-------------------------------

Contains an implementation of the algorithm described in the paper:
"Ray Tracing Deformable Scenes Using Dynamic Bounding Volume Hierarchies"
http://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/readings/wald07_packetbvh.pdf
by INGO WALD, SOLOMON BOULOS, and PETER SHIRLEY from University of Utah

Contains an implementation of the algorithm described in the paper:
"Large Ray Packets for Real-time Whitted Ray Tracing" 
http://cseweb.ucsd.edu/~ravir/whitted.pdf
by Ryan Overbeck1, Ravi Ramamoorthi from Columbia University and William R. Mark from
Intel Corporation and University of Texas at Austin



cbvh_pbrt.h
-----------

Contains a BVH implementation from the source code of the book
"Physically Based Rendering" (v2 and v3) http://www.pbrt.org/
Copyright(c) 1998-2015 Matt Pharr, Greg Humphreys, and Wenzel Jakob.
LICENSE: https://github.com/mmp/pbrt-v3/blob/master/LICENSE.txt



cbbox2d.cpp
-----------

bool CBBOX2D::Intersects( const SFVEC2F &aCenter, float aRadiusSquared ) const
Contains an algorithm implementation based on the paper:
"On Faster Sphere-Box Overlap Testing"
http://www.mrtc.mdh.se/projects/3Dgraphics/paperF.pdf
Thomas Larsson, Tomas Akenine-Möller, and Eric Lengyel


bool CBBOX2D::Intersect( const RAY2D &aRay, float *t ) const
Contains an algorithm implementation based on the article:
http://tavianator.com/fast-branchless-raybounding-box-intersections/
"FAST, BRANCHLESS RAY/BOUNDING BOX INTERSECTIONS", 2011 TAVIAN BARNES



cfilledcircle2d.cpp, cring2d.cpp, croundseg.cpp
-----------------------------------------------

bool CFILLEDCIRCLE2D::Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const
bool CRING2D::Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const
bool CROUNDSEG::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const
Contains an algorithm based on:
http://cs665pd.googlecode.com/svn/trunk/photon/sphere.cpp
Steve Marschner's CS667 framework, email: srm at cs.cornell.edu

TODO: ask author about the license of this source code.



citemlayercsg2d.cpp
-------------------

bool CITEMLAYERCSG2D::Intersect( const RAYSEG2D &aSegRay, float *aOutT, SFVEC2F *aNormalOut ) const
Based on ideas and implementation from
http://homepages.paradise.net.nz/nickamy/raytracer/raytracer.htm
Nick Chapman, email: nickamy@paradise.net.nz



ctriangle2d.cpp
---------------

bool CTRIANGLE2D::IsPointInside( const SFVEC2F &aPoint ) const
Contains an algorithm based on:
http://totologic.blogspot.co.uk/2014/01/accurate-point-in-triangle-test.html
2014 Cédric Jules, email: flash dot cedric at Google mail service



cbbox.cpp
---------

bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) const
Contains an algorithm based on:
"Physically Based Rendering" (v2) http://www.pbrt.org/
"Physical Based Ray Tracing" (by Matt Pharr and Greg Humphrey)

https://github.com/mmp/pbrt-v2/blob/master/src/core/geometry.cpp#L68
https://github.com/mmp/pbrt-v2/blob/master/src/accelerators/bvh.cpp#L126
LICENSE: http://www.pbrt.org/LICENSE.txt



cbbox_ray.cpp
-------------

bool CBBOX::Intersect( const RAY &aRay, float *t ) const
Based on the source code from the paper:

"This source code accompanies the Journal of Graphics Tools paper:

  "Fast Ray / Axis-Aligned Bounding Box Overlap Tests using Ray Slopes"
  by Martin Eisemann, Thorsten Grosch, Stefan Müller and Marcus Magnor
  Computer Graphics Lab, TU Braunschweig, Germany and
  University of Koblenz-Landau, Germany

  This source code is public domain, but please mention us if you use it."



ccylinder.cpp
-------------

bool CVCYLINDER::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const
bool CVCYLINDER::IntersectP(const RAY &aRay , float aMaxDistance ) const
Based on the source code from:
http://www.cs.utah.edu/~lha/Code%206620%20/Ray4/Cylinder.cpp
Linh Khanh Ha, University of Utah, email: lha sci.utah.edu

TODO: Ask author about the source code license



ctriangle.cpp
-------------

bool CTRIANGLE::Intersect( const RAY &aRay, HITINFO &aHitInfo ) const
Implements a triangle ray intersection based on article:
http://www.flipcode.com/archives/Raytracing_Topics_Techniques-Part_7_Kd-Trees_and_More_Speed.shtml
by Jacco Bikker, that implement optimizations based on Ingo Wald's thesis.



cfrustum.cpp
------------

bool CFRUSTUM::Intersect( const CBBOX &aBBox ) const
BAsed on the implementation from:
https://github.com/nslo/raytracer/blob/2c2e0ff4bbb6082e07804ec7cf0b92673b98dcb1/src/raytracer/geom_utils.cpp#L66
Nathan Slobody

TODO: Ask author about the source code license



clight.h
--------

Class CPOINTLIGHT Point light based on tutorial:
http://ogldev.atspace.co.uk/www/tutorial20/tutorial20.html
Etay Meiri, email: ogldev1 gmail



mortoncodes.cpp
---------------

Implements Morton Codes base on the implementation of Fabian “ryg” Giesen
https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/



ccamera.h
---------

Frustum structure is based on the tutorial:
http://www.lighthouse3d.com/tutorials/view-frustum-culling/



cpostshader_ssao.cpp
--------------------

SSAO based on an implementation by:
Benjamin Blundell https://github.com/OniDaito/CoffeeGL/blob/master/misc/ssao.frag

Also based from a post by martinsh at:
http://www.gamedev.net/topic/556187-the-best-ssao-ive-seen/?view=findpost&p=4632208

Latter adapter for CPU shader implementation and add other features specific to KiCad implementation.


trackball.h, trackball.cpp
--------------------------

A virtual trackball implementation
Written by Gavin Bell for Silicon Graphics, November 1988.
Original code from: David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli
License are in the files trackball.h and trackball.cpp



3d_fastmath.h
-------------

This file contains some functions from the PBRT 3 source code.
https://github.com/mmp/pbrt-v3/blob/master/src/core/pbrt.h
"Physically Based Rendering" (v3) http://www.pbrt.org/
Copyright(c) 1998-2015 Matt Pharr, Greg Humphreys, and Wenzel Jakob.
LICENSE: https://github.com/mmp/pbrt-v3/blob/master/LICENSE.txt



3d_math.h
---------

inline SFVEC3F CosWeightedRandomHemisphereDirection( SFVEC3F n )
Based on a post in:
https://pathtracing.wordpress.com/2011/03/03/cosine-weighted-hemisphere/

inline bool Refract( const SFVEC3F &aInVector, const SFVEC3F &aNormal, float aRin_over_Rout, SFVEC3F &aOutVector )
https://github.com/mmp/pbrt-v3/blob/master/src/core/reflection.h
"Physically Based Rendering" (v3) http://www.pbrt.org/
Copyright(c) 1998-2015 Matt Pharr, Greg Humphreys, and Wenzel Jakob.
LICENSE: https://github.com/mmp/pbrt-v3/blob/master/LICENSE.txt



openmp_mutex.h
--------------

openMP mutex class based on:
http://bisqwit.iki.fi/story/howto/openmp/
by Joel Yliluoma, email bisqwit iki.fi