百度了,狗狗了,必应了,然而,并没有什么卵用.
扭头问老大,老大一声令下:不许问别人,这个问题单独解决,顺便提交个解决方式我.
真羡慕你们的好记性...
羡慕虽好,然而,并没有什么卵用.还得靠自己多锻炼.
对,我近期是加入了着色器程序,那我执行没有着色器的程序试试看
void Application::Run()
{
	MSG msg;
	static float lastTime = (float)timeGetTime();//上一次的时间
	ZeroMemory(&msg, sizeof(MSG));
	while (msg.message != WM_QUIT)
	{
		if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			float currTime = (float)timeGetTime();//当前的时间
			float timedelta = (currTime - lastTime)*0.001f;	//时间间隔
			//世界更新
			m_GameWorld->Update((float)timedelta);
			//更新fps
			UpdateFPS();
			//画一帧
			DrawOneFrame();
			lastTime = currTime;
		}
	}
}
ok,配置完成,赶紧看下输出数据吧:
结果:
     
一大堆的0.000000,然后突然0.128000
结论:罪魁祸首原来在这里,这就是导致不孕不...不是,呸,导致画面不平滑,一愣一愣的根本原因.
更新,渲染,一圈下来时间竟然为0?
怎么可能...
所以寻找高精度的计时函数QueryPerformanceFrequency()和QueryPerformanceCounter()
这两函数牛逼啊,根硬件时钟的晶振是一个级别的,资料上说,精确到了千分之中的一个毫秒,也就是微秒级别的...
好啊,要的就是你啊....
下面便是改动的消息循环run的代码:
void Application::Run()
{
	MSG msg;
	LARGE_INTEGER nFreq;
	LARGE_INTEGER nBeginTime, nEndTime;
	QueryPerformanceFrequency(&nFreq);//获得时钟频率
	QueryPerformanceCounter(&nBeginTime);//開始的时间
	
	ZeroMemory(&msg, sizeof(MSG));
	while (msg.message != WM_QUIT)
	{
		if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			QueryPerformanceCounter(&nEndTime);//结束的时间		 
			float timedelta = (float)(nEndTime.QuadPart - nBeginTime.QuadPart) / (float)nFreq.QuadPart;
			_cprintf("timedelta = %f\n", timedelta);//控制台输出结果
			//世界更新
			m_GameWorld->Update((float)timedelta);	
			//d3d设备指针一个项目里仅仅能有唯一一个
			UpdateFPS();
			//画一帧
			DrawOneFrame();
			nBeginTime = nEndTime;
		}		
	}	
}结果:      
唉,整个人心情都好了,摄像机移动,画面流畅得一笔啊...
原文:http://www.cnblogs.com/cynchanpin/p/6782506.html