4.4.3 Framework Methods

来源:互联网 发布:网络里魔怔啥意思 编辑:程序博客网 时间:2024/06/11 05:43

对于在这本书中每个示例应用程序,我们始终重载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/ | 虚幻大学

0 0
原创粉丝点击