首页 > 其他 > 详细

基于Dx11写一个自己的游戏引擎--4

时间:2019-04-14 20:14:27      阅读:149      评论:0      收藏:0      [点我收藏+]

编写图形模块

在项目目录下新建 Platform 文件夹用于编写不同平台的代码(虽然我只打算写windows下的,不过将来万一呢...)
在Platform下创建 Windows 文件夹,代码都放在这个下面。

图形模块由于初衷还是课程设计,所以用Dx11编写。项目结构会参考Dx11龙书以及博客园@X-Jun的文章。

这里创建了一个类 WindowsApp。

class WindowsApp {

public:
    
    WindowsApp( HINSTANCE hInstance );  //构造函数,注意要在初始化列表中设置好参数,不然会链接错误。
    virtual ~WindowsApp();


    virtual LRESULT MsgProc( HWND hWND, UINT msg, WPARAM wParam, LPARAM lParam );   //消息处理的回调函数,这个函数的用处在cpp里面
    virtual bool Init();                //初始化函数,在WinMain入口中调用以初始化
    virtual void OnResize();            //窗口大小更新时调用

    
    HINSTANCE AppInst() const;     //获取应用实例句柄,子类通过此函数获取句柄
    HWND      MainWnd() const;     //获取主窗口句柄,子类用
    float     AspectRatio() const; //获取屏幕宽高比,子类用

protected:
    bool InitMainWindow();          //窗口初始化
    bool InitDirect3D();            //D3D初始化

    void CalculateFrameStats();     //计算每秒帧数并在窗口显示

protected:

    HINSTANCE m_hAppInst;       //应用实例句柄
    HWND      m_hMainWnd;       //主窗口句柄
    bool      m_AppPaused;      //应用是否暂停



    //子类在构造函数更改这些参数
    LPCWSTR     m_MainWndCaption;   //主窗口标题
    int         m_ClientWidth;      //视口宽带
    int         m_ClientHeight;     //视口高度

};

具体实现方法可以参考
github,需要注意的主要有两点:

  1. 构造函数必须使用参数列表的形式传参;
  2. 窗口类初始化时,要使用如下格式,或者初始化时将wc.hIconSm显式初始.
    WNDCLASSEX wc = {sizeof( wc )}; "

WNDCLASSEX.hIconSm必须设置的原因是,在你的程序中作为局部变量它的值是随意的,错误的值造成RegisterClassEx失败。(这里卡了好久还以为前面写错了)

参考文章:

  1. 从零开始手敲次世代游戏引擎(六)
  2. DirectX11 With Windows SDK--01 DirectX11初始化

基于Dx11写一个自己的游戏引擎--4

原文:https://www.cnblogs.com/amaduse/p/10706616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!