3D游戏引擎开发心得(3)

这两天忙,没有更新进度,今天周日,要不上。

突然觉得我写的东西太自我为中心,应该把我的心得写的清楚点,让更多的人从中受益。

 

前两天遇到的问题,用四元数旋转世界矩阵的时候为什么要把四元数旋转矩阵乘在世界矩阵的前面呢?研究中

 

未果。

 

说一下我的引擎现在能完成的功能吧。

它现在可以加载.x模型,进行输入处理,功能还不多。贴一下代码吧:

首先是D3D_Application.h 这个文件中包含ilangge CD3D_Settings

CD3D_Application

CD3D_Settings可以根据Window Settings.ini控制屏幕分辨率、色深、是否全屏等。

CD3D_Application 是程序基础类,完成了基础D3D程序的创建,并声明了一系列虚函数,在子类CGame中实现。CGame累将在下面介绍。

代码这里不多说,有兴趣的朋友可以给我留言,我对您感兴趣的部分给出注释,并希望您提出宝贵意见。整个项目的源代码将随着进度陆续贴出。敬请关注。

 

#pragma once

#include "globle.h"

#include <d3d9.h>

#include <d3dx9.h>

 

//=====================================================================================

// 类名:CD3D_Settings

//

// 功能:d3d程序相关配置信息,如程序窗口宽高等

//=====================================================================================

class CD3D_Settings

{

private:

    bool            m_windowed;     // 是否是窗口模式

    int         m_wnd_width;        // 窗口宽度

    int         m_wnd_height;   // 窗口高度

    int         m_wnd_bpp;      // 窗口位宽

    int         m_refresh_rate; // 显示器刷新率

    TCHAR       *m_wnd_name;        // 窗口标题

    CIni        ini;                    // ini配置文件

 

private:

    //------------------------------------------------------------------

    // 私有成员函数

    //------------------------------------------------------------------

    void    Get_Settings_From_Ini(void);

    void    Set_Default(void);

 

public:

    //------------------------------------------------------------------

    // 构造函数和析构函数

    //------------------------------------------------------------------

    CD3D_Settings(void);

    ~CD3D_Settings(void);

 

public:

    //------------------------------------------------------------------

    // 自定义成员函数

    //------------------------------------------------------------------

    const   TCHAR* Get_Wnd_Name(void) const { return    m_wnd_name; }

    int     Get_Wnd_Width(void) const       { return    m_wnd_width; }

    int     Get_Wnd_Height(void) const      { return    m_wnd_height; }

    int     Get_Wnd_Bpp(void) const         { return    m_wnd_bpp; }

    int     Get_Refresh_Rate(void) const    { return    m_refresh_rate; }

    bool   Get_Windowed(void) const          { return    m_windowed; }

};

 

 

//=====================================================================================

// 类名:CD3D_Application

//

// 功能:d3d应用程序框架

//=====================================================================================

class CD3D_Application

{

public:

    //------------------------------------------------------------------

    // 构造函数和析构函数

    //------------------------------------------------------------------

    CD3D_Application();

    ~CD3D_Application();

 

public:

    //------------------------------------------------------------------

    // 公共方法

    //------------------------------------------------------------------

    bool        Init(void);

    void        Run(void);

    HRESULT     Create( HINSTANCE hinst );

   

    virtual LRESULT     Msg_Proc( HWND h_wnd, UINT msg, WPARAM wparam, LPARAM lparam );

   

 

protected:

    //------------------------------------------------------------------

    // 不需要用户重写的保护方法

    //------------------------------------------------------------------

    void        Cleanup(void);

    HRESULT     Render_3D_Environment(void);

   

 

    //------------------------------------------------------------------

    // 程序状态变量

    //------------------------------------------------------------------

    bool        m_device_lost;              // 是否丢失设备

    bool        m_minimized;                    // 是否最小化

    bool        m_maximized;                    // 是否最大化

    bool        m_active;                   // 程序是否是激活状态

    bool        m_ended;                        // 程序结束

    bool        m_pause;                        // 程序是否暂停

    int     m_fps;                      // FPS

    CD3D_Settings   m_settings;         // D3D程序配置信息

    //-------------------------------------------------------------------

    // 程序相关

    //-------------------------------------------------------------------

    HWND        m_wnd;                          // 程序窗口句柄

    HINSTANCE   m_instance;                 // 程序句柄

   

    D3DCAPS9            m_dev_caps;             // d3d device 设备能力

    LPDIRECT3D9         m_d3d;              // direct3d 对象

    LPDIRECT3DDEVICE9   m_d3d_device;       // direct3d device 对象

    D3DPRESENT_PARAMETERS   m_d3dpp;            // d3d设备描述

 

 

    //-------------------------------------------------------------------

    // 需要用户重写的虚函数

    //-------------------------------------------------------------------

    virtual HRESULT     On_Create_Normal_Objects(void)      { return S_OK; }

    virtual HRESULT     On_Create_Device_Objects(void)      { return S_OK; }

    virtual HRESULT     On_Destroy_Objects(void)                { return S_OK; }

    virtual HRESULT     On_Lost_Device(void)                    { return S_OK; }

    virtual HRESULT     On_Reset_Device(void)               { return S_OK; }

    virtual HRESULT     On_Input_Deal(void)                 { return S_OK; }

    virtual HRESULT     On_Frame_Move(void)                 { return S_OK; }

    virtual HRESULT     On_Frame_Render(void)               { return S_OK; }

    virtual HRESULT     On_Final_Cleanup(void)              { return S_OK; }

};

 

 

 

// DirectX用全局宏

#define SAFE_RELEASE(p)/

{/

    if( NULL != p )/

    {/

        p->Release();/

        p       = NULL;/

    }/

}

 

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值