DirectX入门之初始化Direct3D及常见问题

news/2025/3/15 13:57:01/

这篇文章主要讲解如何初始化Direct3D。Direct3D初始化成功后,我们将的到一个代表显卡的C++对象(类型:IDrect3DDevice9)。

初始化流程图:

这里写图片描述

完整代码:

//全局变量IDirect3DDevice9 *device = 0 ;// Step 1: Create the IDirect3D9 object.IDirect3D9* d3d9 = 0;d3d9 = Direct3DCreate9(D3D_SDK_VERSION);if (!d3d9){return false;}// Step 2: Check for hardware vp.D3DCAPS9 caps;d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);int vp = 0;if (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;elsevp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;// Step 3: Fill out the D3DPRESENT_PARAMETERS structure.D3DPRESENT_PARAMETERS d3dpp;d3dpp.BackBufferWidth = 800;d3dpp.BackBufferHeight = 600;d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;d3dpp.BackBufferCount = 1;d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;d3dpp.MultiSampleQuality = 0;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.hDeviceWindow = hWnd;d3dpp.Windowed = false;d3dpp.EnableAutoDepthStencil = true;d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;d3dpp.Flags = 0;d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;///////////////////////////////// Step 4: Create the device.(device代表的是物理显卡)//////////////////////////////HRESULT hr = d3d9->CreateDevice(D3DADAPTER_DEFAULT, // primary adapterD3DDEVTYPE_HAL,         // device typehWnd,               // window associated with devicevp,                 // vertex processing&d3dpp,             // present parameters&device);            // return created deviceif (FAILED(hr)){d3d9->Release(); // done with d3d9 objectreturn false;}else {::MessageBox(0, L"显卡对象创建成功",0,0);}}d3d9->Release(); // done with d3d9 object

可能会遇到的错误:

错误类型:

无法解析的外部符号 Direct3DCreate9@4

这里写图片描述
解决方案一:
在VS.NET中的项目/属性/配置属性/连接器/输入/附加依赖项中添加以下文件名,d3dx9.lib d3dxof.lib d3d9.lib winmm.lib dxguid.lib comctl32.lib 就可以了.
解决方案二:

    #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"winmm.lib") #pragma comment(lib,"d3dx9.lib")

http://www.ppmy.cn/news/918134.html

相关文章

Direct3D 11编程总结

一、Direct3D 11 知识 1. Direct3D 11资源 1.1 Direct3D资源简介 Direct3D 11利用资源来存储输入输出数据。资源分为:几何、纹理、着色数据。资源可以是有类型的,也可以是无类型的;可以控制资源的读写访问方式,也可以限定是被CPU还是GPU访问。在图形管道阶段最多可以创建…

Direct3D 12 尝鲜(五): SDK 更新

(转载请注明出处) 又是一个月, 微软在Build2015中公布了不少关于Win10的新闻, 又在N卡公布的支持DX12显卡中看到了我的垃圾显卡(GT640M LE)居然在支持范围,高高兴兴地直接换物理机安装上Win10, 升级了SDK, VS2015变成了RC版. 不过失望了是显卡支持的仅仅是D3D12 level11.0, 不…

DirectX、Direct3D、OpenGL的区别(DX、D3D、OpenGL)

翻译自:https://www.extremetech.com/computing/54604-top-tip-what-are-opengl-direct3d-directx-etc 首先一点澄清:DX包含D3D,D3D是DX的主要图形处理部分,OpenGl从某方面来说是一个API。 一个游戏开发者,或者任何图…

Direct3D 12 尝鲜: 基本呈现

(转载请注明出处) 请叫我挖坑狂魔_(:3」∠)_ 微软前几天发布了Win10的开发工具,希望使用的童鞋可以加入windows insider计划 进行下载. 下面是我的环境: Windows 10 Technical Preview Build 10041Visual Studio 2015 CTP 6Visual Studio Tools for Windows 10 当然,使用的…

Direct3d 设备丢失 (device lost)

1.什么时候设备丢失 一个Direct3D设备, 有两种状态: 操作状态或丢失状态。 操作状态: 是设备的正常状态, 设备按预期运行, 并且能present所有渲染效果 丢失状态: 所有渲染操作悄然失败, IDirect3DDevice9::present返回错误码D3DERR_DEVICELOST 查帮助Lost Devices (Direct3D 9)…

Direct3D 12入门教程之 ---- Direct3D 12初始化流程

注:以下内容参考自 书籍:《DirectX 12 3D》游戏开发实战, 微软官方的 DirectX样例程序;DirectX-Graphics-Samples, 参见github链接:https://github.com/Microsoft/DirectX-Graphics-Samples Direct3D 12对于开发者来说…

Direct3D 12 CreateSwapChain失败

DXGI ERROR: IDXGIFactory::CreateSwapChain: Flip model swapchains (DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL and DXGI_SWAP_EFFECT_FLIP_DISCARD) do not support multisampling. DXGI_SWAP_CHAIN_DESC{ SwapChainType 以上是D3D12 调用CreateSwapChain失败后的报错信息&#xf…

Direct3D基础——Direct3D概述

概述 Direct3D是一套底层图形API,借助该API我们可以利用硬件加速功能来实现3D场景的绘制,Direct3D可以视为应用程序和底层设备的交互。下图展示了Direct3D和硬件之间的交互关系: 图中Direct3D部分是一套已经定义好的,由Direct3D提…