00001 /* 00002 toxic - A Global Illumination Renderer 00003 Copyright (C) 2003-2004 Francois Beaune 00004 Contact: http://toxicengine.sourceforge.net/ 00005 00006 This file is part of toxic. 00007 00008 toxic is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation; either version 2 of the License, or 00011 (at your option) any later version. 00012 00013 toxic is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with toxic; if not, write to the Free Software 00020 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00021 */ 00022 00023 inline 00024 void Hit::ExtractIntersection(const Ray &ray, 00025 sheep::Point3 *point, 00026 sheep::Vector3 *geometric_normal, 00027 sheep::Vector3 *shading_normal) const 00028 { 00029 // Compute world space intersection point. 00030 if(point) { 00031 *point = ray.GetPointAt(m_abscissa); 00032 } 00033 00034 // Compute world space geometric normal. 00035 if(geometric_normal) { 00036 const sheep::Vector3 gn = m_object->TransformNormalToWorld(m_geometric_normal); 00037 assert(gn.IsUnitLength()); 00038 *geometric_normal = (ray.m_direction * gn > 0.0) ? -gn : gn; 00039 } 00040 00041 // Compute world space shading normal. 00042 if(shading_normal) { 00043 const sheep::Vector3 sn = m_object->TransformNormalToWorld(m_shading_normal); 00044 assert(sn.IsUnitLength()); 00045 *shading_normal = (ray.m_direction * sn > 0.0) ? -sn : sn; 00046 } 00047 }
1.3.6