|
JK2eA
|
00001 #pragma once 00002 00003 #include "CurveGraph.h" 00004 #include "Interpolators.h" 00005 00010 template<class T> 00011 class CCurveGraphCatmullRom : public CCurveGraph<T> { 00012 public: 00016 CCurveGraphCatmullRom() 00017 { 00018 } 00024 virtual T Interpolate(float time) 00025 { 00026 //time musi by 0, 1 !! o OOR se stara controller 00027 00028 //TESTOVACI 00029 int i; 00030 for(i = 0; i < (int)m_nodes.size(); i++) { 00031 //t je mezi last a next 00032 if(m_nodes[i].t > time) { 00033 break; 00034 } 00035 } 00036 00037 float local_time = (m_nodes[i].t - m_nodes[i-1].t); 00038 local_time = (time - m_nodes[i-1].t) / local_time; 00039 00040 00041 // FIXME - tento zpusob je spatny, viz FirstControllerTest = spravne reseni 00042 00043 if(i-2 >= 0 && i+1 < (int)m_nodes.size()) { 00044 return CatmulRomInterpolation(local_time, m_nodes[i - 2].value, m_nodes[i - 1].value, m_nodes[i].value, m_nodes[i + 1].value); 00045 } else if(i-2 < 0 && i+1<(int) m_nodes.size()){ 00046 return CatmulRomInterpolation(local_time, m_nodes[i - 1].value, m_nodes[i - 1].value, m_nodes[i].value, m_nodes[i+1].value); 00047 } else{ 00048 return CatmulRomInterpolation(local_time, m_nodes[i - 1].value, m_nodes[i - 1].value, m_nodes[i].value, m_nodes[i].value); 00049 } 00050 return 0; 00051 } 00052 00053 };
1.8.0