void PlayAnimation() { MSG main_msg; g_StartTime = 0; ZeroMemory(&main_msg, sizeof(main_msg)); while (main_msg.message != WM_QUIT) { if (::PeekMessage(&main_msg, NULL, 0, 0, PM_NOREMOVE)) { if (::GetMessage(&main_msg, NULL, 0, 0)) { ::TranslateMessage(&main_msg); ::DispatchMessage(&main_msg); } } if (!g_StartTime) g_StartTime = GetTickCount(); float time = (float)(GetTickCount() - g_StartTime)/1000.0f; if (time>=(g_Scene.dwFrameStop-g_Scene.dwFrameStart+1)/33.3f) g_StartTime = GetTickCount(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); g_Scene.RenderFrame( 33.3f*time ); SwapBuf(); } }
void CMyWindow::OnIdle() { static float rotate = 0.0f; static DWORD prev = GetTickCount(); DWORD time, span; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1, 1, 1, 1); glEnable(GL_DEPTH_TEST); //glEnable(GL_CULL_FACE); //glCullFace(GL_CW); glEnable(GL_BLEND); glEnable(GL_POLYGON_SMOOTH); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glShadeModel(GL_SMOOTH); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glBegin(GL_TRIANGLES); { glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(0.0f, 1.0f, 0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(-0.7f, -0.87f, 0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(0.7f, -0.87f, 0.8f); } glEnd(); glRotatef(rotate, 0.8f, 1, 0.5f); time = GetTickCount(); span = time - prev; if (span >= 100) { rotate += 0.0125f * (span / 100); prev += span % 100; } struct Vertex { float vertex[3]; float color[4]; }; static Vertex data[] = { { { -0.5f, 0.5f, -0.5f }, { 0.0f, 0.0f, 1.0f, 0.6f } }, { { 0.5f, 0.5f, -0.5f }, { 0.0f, 1.0f, 0.0f, 0.6f } }, { { 0.5f, 0.5f, 0.5f }, { 0.0f, 1.0f, 1.0f, 0.6f } }, { { -0.5f, 0.5f, 0.5f }, { 1.0f, 0.0f, 0.0f, 0.6f } }, { { -0.5f, -0.5f, -0.5f }, { 1.0f, 0.0f, 1.0f, 0.6f } }, { { 0.5f, -0.5f, -0.5f }, { 1.0f, 1.0f, 0.0f, 0.6f } }, { { 0.5f, -0.5f, 0.5f }, { 1.0f, 1.0f, 1.0f, 0.6f } }, { { -0.5f, -0.5f, 0.5f }, { 0.0f, 0.0f, 0.0f, 0.6f } } }; static int index[][3] = { { 3, 1, 0 }, { 2, 1, 3 }, { 0, 5, 4 }, { 1, 5, 0 }, { 3, 4, 7 }, { 0, 4, 3 }, { 1, 6, 5 }, { 2, 6, 1 }, { 2, 7, 6 }, { 3, 7, 2 }, { 6, 4, 5 }, { 7, 4, 6 } }; for (int *ar : index) { glBegin(GL_TRIANGLES); { for (int *p = ar; p < ar + 3; p++) { glColor4fv(data[*p].color); glVertex3fv(data[*p].vertex); } } glEnd(); } SwapBuf(); TCHAR buf[1024]; wsprintf(buf, L"FPS : %u", GetFPS()); HDC hdc = GetDC(*this); TextOut(hdc, 0, 0, buf); ReleaseDC(*this, hdc); unsigned fps = CalcFPS(); //if (fps >= 300) // Sleep(1); }