# Home    # nevrax.com   
Nevrax
Nevrax.org
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
Docs
 
Documentation  
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  

track_sampled_vector.cpp

Go to the documentation of this file.
00001 
00007 /* Copyright, 2000-2002 Nevrax Ltd.
00008  *
00009  * This file is part of NEVRAX NEL.
00010  * NEVRAX NEL is free software; you can redistribute it and/or modify
00011  * it under the terms of the GNU General Public License as published by
00012  * the Free Software Foundation; either version 2, or (at your option)
00013  * any later version.
00014 
00015  * NEVRAX NEL is distributed in the hope that it will be useful, but
00016  * WITHOUT ANY WARRANTY; without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00018  * General Public License for more details.
00019 
00020  * You should have received a copy of the GNU General Public License
00021  * along with NEVRAX NEL; see the file COPYING. If not, write to the
00022  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
00023  * MA 02111-1307, USA.
00024  */
00025 
00026 #include "std3d.h"
00027 
00028 #include "nel/misc/common.h"
00029 #include "3d/track_sampled_vector.h"
00030 
00031 using namespace NLMISC;
00032 using namespace std;
00033 
00034 
00035 namespace NL3D 
00036 {
00037 
00038 // ***************************************************************************
00039 // ***************************************************************************
00040 // CTrackSampledVector
00041 // ***************************************************************************
00042 // ***************************************************************************
00043 
00044 
00045 // ***************************************************************************
00046 CTrackSampledVector::CTrackSampledVector()
00047 {
00048 }
00049 
00050 // ***************************************************************************
00051 CTrackSampledVector::~CTrackSampledVector()
00052 {
00053 }
00054 
00055 // ***************************************************************************
00056 const IAnimatedValue&   CTrackSampledVector::getValue () const
00057 {
00058         return _Value;
00059 }
00060 
00061 // ***************************************************************************
00062 void                                    CTrackSampledVector::serial(NLMISC::IStream &f)
00063 {
00064         /*
00065         Version 0:
00066                 - base version.
00067         */
00068         (void)f.serialVersion(0);
00069 
00070         // serial Time infos.
00071         CTrackSampledCommon::serialCommon(f);
00072 
00073         // serial Keys.
00074         f.serial(_Keys);
00075 
00076 }
00077 
00078 // ***************************************************************************
00079 void    CTrackSampledVector::build(const std::vector<uint16> &timeList, const std::vector<CVector> &keyList, 
00080         float beginTime, float endTime)
00081 {
00082         nlassert( endTime>beginTime || (beginTime==endTime && keyList.size()<=1) );
00083         nlassert( keyList.size()==timeList.size() );
00084         uint i;
00085 
00086         // reset.
00087         uint    numKeys= keyList.size();
00088         _Keys.clear();
00089         _TimeBlocks.clear();
00090 
00091         // Build Common time information
00092         CTrackSampledCommon::buildCommon(timeList, beginTime, endTime);
00093 
00094 
00095         // Compute All Key values.
00096         //===================
00097         _Keys.resize(numKeys);
00098         for(i=0; i<numKeys;i++)
00099         {
00100                 // no compression for now
00101                 _Keys[i]= keyList[i];
00102         }
00103 
00104 }
00105 
00106 // ***************************************************************************
00107 void    CTrackSampledVector::eval (const TAnimationTime& date)
00108 {
00109         // Eval time, and get key interpolation info
00110         uint    keyId0;
00111         uint    keyId1;
00112         float   interpValue;
00113         TEvalType       evalType= evalTime(date, _Keys.size(), keyId0, keyId1, interpValue);
00114 
00115         // Discard? 
00116         if( evalType==EvalDiscard )
00117                 return;
00118         // One Key? easy, and quit.
00119         else if( evalType==EvalKey0 )
00120         {
00121                 _Value.Value= _Keys[keyId0];
00122         }
00123         // interpolate
00124         else if( evalType==EvalInterpolate )
00125         {
00126                 const CVector   &valueKey0= _Keys[keyId0];
00127                 const CVector   &valueKey1= _Keys[keyId1];
00128 
00129                 // interpolate
00130                 _Value.Value= valueKey0*(1-interpValue) + valueKey1*interpValue;
00131         }
00132         else
00133         {
00134                 nlstop;
00135         }
00136 
00137 }
00138 
00139 
00140 } // NL3D