Beispiel #1
0
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();
	}

}
Beispiel #2
0
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);
}