Direct3D9初始化
你在网上搜索“Direct3D9初始化”,不得不说文章真多,但是VB6的似乎找不到。这里讲解一下DX9在VB6中的初始化。
Direct3D9初始化步骤如下:
首先,初始化用于创建 Direct3D 设备的 D3DPRESENT_PARAMETERS 结构的值。
D3DPRESENT_PARAMETERS是一个数据结构,是学习DX9的很重要的一项内容,当然,具体参数什么的,大家先看看,了解一下就可以了。
这是C++的语法,
typedef struct D3DPRESENT_PARAMETERS {
UINT BackBufferWidth;
UINT BackBufferHeight;
D3DFORMAT BackBufferFormat;
UINT BackBufferCount;
D3DMULTISAMPLE_TYPE MultiSampleType;
DWORD MultiSampleQuality;
D3DSWAPEFFECT SwapEffect;
HWND hDeviceWindow;
BOOL Windowed;
BOOL EnableAutoDepthStencil;
D3DFORMAT AutoDepthStencilFormat;
DWORD Flags;
UINT FullScreen_RefreshRateInHz;
UINT PresentationInterval;
} D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;
这里简单的解释一下,如下图所示,更多的介绍大家可以去巨硬官方站点查找。
那么在VB6里怎么使用呢?
假设有一个窗口,我们将其作为显示输出设备,比如游戏窗口Form1。那么在VBDX9BAS里就可以定义如下代码:
Public CWD3D9 As Direct3D9
Public CWDpp9 As D3DPRESENT_PARAMETERS '画布
Enum CWDisplayModel '显示模式常量
CW_Windowed = 1 '窗口化
CW_FullScreen = 0 '全屏
End Enum
'初始化DX9
Public Sub CWVBDX9Initialization(ByVal Frm As Object, ByVal ScrWidth As Integer, ByVal ScrHeight As Integer, ByVal IniState As CWDisplayModel, Optional ByVal Zoom As Single = 1!)
Frm.ScaleMode = 3 '窗口显示区大小按像素计算
Frm.BorderStyle = 0
Frm.Caption = Frm.Caption
Frm.Width = ScrWidth * Zoom * 15 '保证窗口显示区符合即将初始化的引擎分辨率,防止图形失真
Frm.Height = ScrHeight * Zoom * 15
If IniState = CW_Windowed Then
Frm.BorderStyle = 1
Frm.Caption = Frm.Caption
End If
On Error GoTo CWIniEHD
Set CWD3D9 = Direct3DCreate9(D3D_SDK_VERSION) '设置DX9对象
with CWDpp9
.BackBufferWidth = Frm.Width '后缓冲区的宽设为Form1的宽
.BackBufferHeight