00001 // Copyright NVIDIA Corporation 2002-2004 00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED 00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS 00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY 00005 // AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS 00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES 00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, 00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) 00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS 00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 00011 00012 #pragma once 00013 00015 #include "nvsgcommon.h" 00016 00017 #include "nvmath/nvmath.h" 00018 #include "nvmath/Vec3f.h" 00019 00020 namespace nvsg 00021 { 00022 00024 00026 class VNVector 00027 { 00028 public: 00029 std::vector<nvmath::Vec3f> normals; 00030 std::vector<nvmath::Vec3f> vertices; 00031 }; 00032 00034 00038 inline VNVector lerp( float alpha 00039 , const VNVector &v0 00040 , const VNVector &v1 00041 ) 00042 { 00043 VNVector vnv; 00044 00045 __ASSERT( v0.vertices.size() == v1.vertices.size() ); 00046 vnv.vertices.resize( v0.vertices.size() ); 00047 for ( size_t i=0 ; i<v0.vertices.size() ; i++ ) 00048 { 00049 vnv.vertices[i] = nvmath::lerp( alpha, v0.vertices[i], v1.vertices[i] ); 00050 } 00051 00052 __ASSERT( v0.normals.size() == v1.normals.size() ); 00053 vnv.normals.resize( v0.normals.size() ); 00054 for ( size_t i=0 ; i<v0.normals.size() ; i++ ) 00055 { 00056 vnv.normals[i] = normalize( lerp( alpha, v0.normals[i], v1.normals[i] ) ); 00057 } 00058 00059 return( vnv ); 00060 } 00061 00062 }