ray.hpp
Go to the documentation of this file.
00001 /*
00002 **    TP 4ETI CPE Lyon
00003 **    Copyright (C) 2012 Damien Rohmer
00004 **
00005 **    This program is free software: you can redistribute it and/or modify
00006 **    it under the terms of the GNU General Public License as published by
00007 **    the Free Software Foundation, either version 3 of the License, or
00008 **    (at your option) any later version.
00009 **
00010 **   This program is distributed in the hope that it will be useful,
00011 **    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 **    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 **    GNU General Public License for more details.
00014 **
00015 **    You should have received a copy of the GNU General Public License
00016 **    along with this program.  If not, see <http://www.gnu.org/licenses/>.
00017 */
00018 
00019 
00020 
00021 
00022 
00023 #ifndef RAY_HPP
00024 #define RAY_HPP
00025 
00026 #include <v3.hpp>
00027 
00028 namespace cpe
00029 {
00030 
00031 class camera;
00032 
00034 class ray
00035 {
00036     public:
00037 
00038         // ********************************************* //
00039         // ********************************************* //
00040         //  CONSTRUCTOR
00041         // ********************************************* //
00042         // ********************************************* //
00043 
00045         ray();
00047         ray(const v3& _x0,const v3& _u);
00048 
00049         // ********************************************* //
00050         // ********************************************* //
00051         //  DATA ACCESS
00052         // ********************************************* //
00053         // ********************************************* //
00054 
00056         const v3& x0() const;
00058         v3& x0();
00060         const v3& u() const;
00062         v3& u();
00063 
00064         // ********************************************* //
00065         // ********************************************* //
00066         //  RAY EVALUATION
00067         // ********************************************* //
00068         // ********************************************* //
00069 
00071         v3 operator()(const double& t) const;
00072 
00073         // ********************************************* //
00074         // ********************************************* //
00075         //  HELPER RAY CONSTRUCTION
00076         // ********************************************* //
00077         // ********************************************* //
00078 
00080         static ray generate_ray_from_camera(const camera& cam,const double& alpha_x,const double& alpha_y);
00081 
00083         ray reflected_ray(const v3& n) const;
00084 
00086         void offset(const double& epsilon=1e-8);
00087 
00088 
00089     private:
00090 
00091         // ********************************************* //
00092         // ********************************************* //
00093         //  INTERNAL DATA
00094         // ********************************************* //
00095         // ********************************************* //
00096 
00098         v3 internal_x0;
00100         v3 internal_u;
00101 
00102 };
00103 }
00104 
00105 #endif