4.4.3 Framework Methods

对于在这本书中每个示例应用程序,我们始终重载D3DApp的五个虚函数这个设置的好处是,初始化代码,消息处理等均在D3DApp类中实现,因此派生类只需要关注特定的示例应用程序的代码。以下给出框架方法的描述:

1.Init:使用这种方法将应用程序初始化,如分配资源,初始化对象和设置光照。D3DApp初始化函数的实现通过调用InitMainWindow InitDirect3D;因此,您应该像这样在继承类中调用D3DApp函数版本:

bool TestApp::Init()
{
	if(!D3DApp::Init())
	return false;
	/* Rest of initialization code goes here */
}

2.OnResize:当D3DApp:MsgProcWM_SIZE消息接收时,调用此方法。当窗口的大小改变,一些Direct3D属性需要改变,因为他们依赖于客户区尺寸。特别是,后置缓冲区和背面深度/模板缓冲区需要重新匹配新窗口的客户区域。通过调用IDXGISwapChain::ResizeBuffers方法可以调整后置缓冲区大小。根据新的尺寸,深度/模板缓冲区需要被摧毁,然后重建此外,渲染目标和深度/模板视图也需要被重新创建。缓冲区之外,还有其他属性取决于客户区的大小(如。投影矩阵)。

3.UpdateScene:这种抽象方法在每一帧调用一次,用于更新3D应用程序(如,执行动画,移动相机,碰撞检测,检查用户输入,等等)。

4.DrawScene:这个抽象方法每一帧被调用,根据我们的渲染命令绘制当前帧到后置缓冲当我们完成帧的绘制,我们调用IDXGISwapChain::Present方法呈现后置缓冲区到屏幕上。

5.MsgProc:这种方法为主应用程序窗口实现窗口过程函数一般来说,当你有消息需要处理,但D3DApp::MsgProc不能处理(或不按你想要的处理),则你需要重载这个方法D3DApp的实现将在§4.4.5讨论。如果你重载此方法,你不处理的任何消息应转发到D3DApp::MsgProc上。

除了前面的五个方法,我们提供其他三个虚函数处理事件的鼠标按键被按下时,释放,鼠标移动的事件:

virtual void OnMouseDown(WPARAM btnState, int x, int y){ }
virtual void OnMouseUp(WPARAM btnState, int x, int y) { }
virtual void OnMouseMove(WPARAM btnState, int x, int y){ }

通过这种方式,如果你想处理鼠标消息,您可以重写这些方法而不是覆盖MsgProc方法。第一个参数是WPARAM,用于存储鼠标按钮的状态(即。鼠标按钮被按下时,事件响应)。第二个和第三个参数是客户区(x,y)鼠标光标的坐标。

本文固定链接:http://www.oxox.work/web/directx11/framework-methods/ | 虚幻大学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚坏叔叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值