这两天忙,没有更新进度,今天周日,要不上。
突然觉得我写的东西太自我为中心,应该把我的心得写的清楚点,让更多的人从中受益。
前两天遇到的问题,用四元数旋转世界矩阵的时候为什么要把四元数旋转矩阵乘在世界矩阵的前面呢?研究中…
未果。
说一下我的引擎现在能完成的功能吧。
它现在可以加载.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;/
}/
}