Sorry, for double-posting, but I want to give it another try:
I've been trying around to programm a test tool to practice with Key frames.
The tool is very simple, it simply draws a line, the only animation is a rotation of the line around (0,0,0).
There is a total of 100 Frames in the loop. There are 4 Keyframes:
KeyFrame #0 (Frame #0): Rotation value: 0°
KeyFrame #1 (Frame #10): Rotation value: -45°
KeyFrame #2 (Frame #20): Rotation value: 0°
KeyFrame #3 (Frame #60): Rotation value: 45°
Member explanation:
m_iKeyFramesIndex tells the frame offset of a keyframe (e.g. m_iKeyFramesIndex[1] = 10 )
m_fKeyFrames is the rotation of the keyframe.
Here's the code I used:
Code: [Select]
Code:
void COpenGLView::Render(void){ glColor3f(1, 1, 1); if(m_bAnimate) { // Get elapsed time long lTime = clock() - m_StartTime; // Convert to frame offset double dFrameOff = double(lTime) / 1000 * double(m_iFramesPerSec); // Simulate modulo: dFrameOff % m_iTotalFrames dFrameOff -= double(int(dFrameOff / m_iTotalFrames) * m_iTotalFrames); // Find the 2 neighbours int iKey1 = 0; int iKey2 = 0; // Find left neighbour for(int i = 0; i < m_iNumKeyFrames; i++) { if(double(m_iKeyFramesIndex[i]) <= dFrameOff) iKey1 = i; if(double(m_iKeyFramesIndex[i]) > dFrameOff) break; } // Find right neighbour if((iKey1+1) >= m_iNumKeyFrames) iKey2 = 0; else iKey2 = iKey1 + 1; // Calculate frame position double dFramePos = dFrameOff - double(m_iKeyFramesIndex[iKey1]); if(iKey2 > 0) dFramePos /= double(m_iKeyFramesIndex[iKey2] - m_iKeyFramesIndex[iKey1]); else dFramePos /= double(m_iTotalFrames - m_iKeyFramesIndex[iKey1]); // Calculate current frame float fCurFrame = (m_fKeyFrames[iKey1] * (1.0 - dFramePos)) + (m_fKeyFrames[iKey2] * dFramePos); // Rotate glRotatef(fCurFrame, 0, 0, 1.0f); } // Render our line glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(0, -3, 0); glEnd();}
Surprisingly, the code does what it should do

However, I have problem:
When I start the app, the frame rate is ~120 FPS. After a minute of running it goes down to ~50 FPS...
Does anyone know why? And does anyone have suggestions to improve the code?
- Alhexx
- edit -
I have uploaded the compiled tool incl. source code here:
http://www.alhexx.com/stuff/OpenGL_Anim.rar