VS2022 + DirectX9 开发环境搭建
Direct9虽然已经很老了,但是,还是遇到很多它开发出来的游戏还在运行,所以,它的兼容性毋庸置疑,从WinXP到Win11都有它的身影,另外,Direct 自身包含了2D和3D的相关功能,着重区分GDI渲染方式,加深对direct的了解,就从经典的Direct9开始开发了解。
环境搭建
主要环境为
操作系统: Win10
IDE: VS2022
Direct SDK: DXSDK_Jun10
开发语言: C++
VS2022安装和工作负荷选择
首先根据我所提供的资源[VS2022下载地址]进行选择下载:

然后下一步下一步
最重要的地方是选择需要什么样的工作负荷,截图如下:

主要选择 使用C++的桌面开发就可以了。其他都是副选(C++的游戏开发)
Direct SDK 安装
下载我提供的资源[DXSDK_Jun10.exe下载地址]进行下载然后双击安装

选择下一步

然后 ,选择 accept(同意)选项

是否改善,选择否即可

然后,选择目录即可(尽量默认路径)

直接下一页,让它开始安装

这个步骤,选择让它安装,要不然,就安装不了

选择之后,它就会自己安装

基础安装完毕

关闭窗口后,它继续安装

完成后,就可以了

Direct SDK 安装失败如何处理
可能会出现这样或那样的异常情况
实际上这个SDK我们只需要用到它的帮助文档、示例,以及C++头文件和相关的lib库文件,所以,可以直接拷贝这个SDK文件放入到指定目录下即可
下载[Microsoft DirectX SDK (June 2010).zip 下载地址]内的资源,解压到此文件夹即可.
另外还需要设置环境变量

点击高级系统设置

点击环境变量按钮

然后,填入相关环境变量信息,然后,点击确定

具体内容如下:
DXSDK_DIR
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\
Direct9 SDK 目录详情
默认会在这个路径下
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)
大致如下所示

具体需要关注的是以下几个文件夹

- 帮助文档,里面有很详细的帮助文档
- 头文件,后面需要引用的C++头文件
- 相关的链接库,也是需要C++引用的分为86和64版本
- 最后是一些官方示例,可以作为参考和学习
简单示例
为了证明环境是否正常来用一个案例验证一下
新建C++项目
打开VS2022,新建Windows桌面向导

配置基础信息,点创建

选择桌面应用.exe,点空项目,点确定

就转到了默认项目窗口

开始添加一个项目文件main.cpp

点击添加即可

Direct9的 示例代码
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
// 窗口类名和标题
const wchar_t CLASS_NAME[] = L"DirectX9 Window Class";
const wchar_t WINDOW_TITLE[] = L"DirectX9 简单示例";
// 全局变量
HWND hWnd; // 窗口句柄
LPDIRECT3D9 d3d; // Direct3D 对象
LPDIRECT3DDEVICE9 d3dDevice;// Direct3D 设备
// 三角形顶点结构(位置 + 颜色)
struct Vertex {
float x, y, z; // 位置
DWORD color; // 颜色(ARGB)
};
#define D3DFVF_VERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE) // 顶点格式
// 窗口过程(消息处理)
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
}
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
// 初始化窗口
bool InitWindow(HINSTANCE hInstance, int nCmdShow) {
// 注册窗口类
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
wc.style = CS_HREDRAW | CS_VREDRAW;
if (!RegisterClass(&wc)) return false;
// 创建窗口
hWnd = CreateWindowEx(
0,
CLASS_NAME,
WINDOW_TITLE,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
NULL, NULL, hInstance, NULL
);
if (hWnd == NULL) return false;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return true;
}
// 初始化 Direct3D
bool InitD3D() {
// 创建 Direct3D 对象
d3d = Direct3DCreate9(D3D_SDK_VERSION);
if (!d3d) return false;
// 获取窗口客户区大小
RECT rc;
GetClientRect(hWnd, &rc);
int width = rc.right - rc.left;
int height = rc.bottom - rc.top;
// 设备参数设置
D3DPRESENT_PARAMETERS d3dpp = {};
d3dpp.Windowed = TRUE; // 窗口模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 交换链模式
d3dpp.hDeviceWindow = hWnd; // 渲染窗口
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; // 后缓冲区格式
d3dpp.BackBufferCount = 1; // 后缓冲区数量
d3dpp.BackBufferWidth = width; // 宽度
d3dpp.BackBufferHeight = height; // 高度
d3dpp.EnableAutoDepthStencil = TRUE; // 启用深度测试
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 深度缓冲区格式
// 创建 Direct3D 设备
HRESULT hr = d3d->CreateDevice(
D3DADAPTER_DEFAULT, // 默认显卡
D3DDEVTYPE_HAL, // 硬件加速
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING, // 硬件顶点处理
&d3dpp,
&d3dDevice
);
if (FAILED(hr)) return false;
// 设置渲染状态(关闭光照,使用顶点颜色)
d3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
return true;
}
// 渲染函数
void Render() {
if (!d3dDevice) return;
// 清屏(黑色背景)
d3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
// 开始渲染
if (SUCCEEDED(d3dDevice->BeginScene())) {
// 三角形顶点数据(位置和颜色)
Vertex vertices[] = {
{ 0.0f, 0.5f, 0.0f, D3DCOLOR_XRGB(255, 0, 0) }, // 上顶点(红色)
{ 0.5f, -0.5f, 0.0f, D3DCOLOR_XRGB(0, 255, 0) }, // 右下(绿色)
{ -0.5f, -0.5f, 0.0f, D3DCOLOR_XRGB(0, 0, 255) } // 左下(蓝色)
};
// 设置顶点格式和数据
d3dDevice->SetFVF(D3DFVF_VERTEX);
d3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, vertices, sizeof(Vertex));
// 结束渲染
d3dDevice->EndScene();
}
// 交换缓冲区(显示渲染结果)
d3dDevice->Present(NULL, NULL, NULL, NULL);
}
// 释放资源
void Cleanup() {
if (d3dDevice) d3dDevice->Release();
if (d3d) d3d->Release();
}
// 程序入口
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// 初始化窗口
if (!InitWindow(hInstance, nCmdShow)) return 0;
// 初始化 Direct3D
if (!InitD3D()) {
MessageBox(hWnd, L"Direct3D 初始化失败", L"错误", MB_OK);
return 0;
}
// 消息循环
MSG msg = {};
while (msg.message != WM_QUIT) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
// 渲染
Render();
}
}
// 释放资源
Cleanup();
return 0;
}
VS2022 Direct 项目设置
选择刚才新建的项目右键属性,打开属性页

选择C++ 目录页

- 可执行目录修改为
$(DXSDK_DIR)Utilities\bin\x64;$(VC_ExecutablePath_x64);$(CommonExecutablePath)
- 包含目录修改为
$(DXSDK_DIR)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath);
- 库目录修改为
$(DXSDK_DIR)Lib\x64;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
修改后是这样的

接下来修改 链接器->输入->附加依赖项

dxerr.lib;dxguid.lib;d3dx9d.lib;d3d9.lib;winmm.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
开始运行项目
按F5 或者 点击 本地Windows调试器就可以运行起来了

结果如下:

至此一个常规的Direct9的环境就部署好了,当然DirectX其他系列部署方式都差不多。
git仓库
https://github.com/kesshei/direct9Demo
https://gitee.com/kesshei/direct9Demo
资源
VS2022下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/?cid=learn-onpage-download-install-visual-studio-page-cta
DXSDK_Jun10.exe下载地址: https://www.microsoft.com/en-us/download/details.aspx?id=6812
Microsoft DirectX SDK (June 2010).zip 下载地址:https://pan.baidu.com/s/1xAHwutm-eAf5-_UyLYz5cQ?pwd=43is

浙公网安备 33010602011771号