Windows游戏开发——GameTimer的创建与解析

1.主体思路

在游戏创建中,GameTimer用于计算两个动画帧之间的资源消耗,由于不同机器的CPU的频率(f)不同,即时间周期(T)不同,它们之间计算资源消耗的基本单位数值不同,所以需要获取当前机器处理器的频率,在记录两帧之间的时间间隔Δt后,再计算两帧之间时间周期的消耗ΔT。

T  = 2 GHz   					//当前机器的时钟周期
Δt = CurrentTime - PreviousTime	// 当前t帧的Time - 上一帧t-1帧的Time
ΔT = T*Δt

而如何获取CPU的时钟周期和计时?即通过QueryPerformanceFrequency和QueryPerformanceCounter方法,它们正是构成GameTimer的主要部分。
在这里插入图片描述

2.使用场景

Windows DirectX的文档对计时器的使用如下所示:

  BeginScene();
    ...
    // Start profiling
    LARGE_INTEGER start, stop, freq;
    QueryPerformanceCounter(&start);		//获取t-1帧的counter

    SetTexture(...);
    DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);//绘制动画 t-1帧->t帧

    QueryPerformanceCounter(&stop);			//获取t帧的counter
    stop.QuadPart -= start.QuadPart;
    QueryPerformanceFrequency(&freq);		//获取当前CPU的频率f,与时间周期的关系:T=1/f
    // Stop profiling	
    ...
  EndScene();
  Present();

在Direct3D12的游戏开发中,GameTimer用于在异步消息循环队列中调用,计算上一帧与当前帧的时间周期T的消耗,以此来更新游戏动画场景。如下所示:

int D3DApp::Run()
{
   
   
	MSG msg = {
   
   0};
 
	mTimer.Reset();			//初始化GameTimer计数器

	while(msg.message != WM_QUIT)
	{
   
   
		// If there are Window messages then process them.
		if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值