DirectX11 With Windows SDK--00 目錄

前言 (更新於 2019/4/10)

從第一次接觸DirectX 11到如今已經有將近兩年的時間了。還記得前年暑假被要求學習DirectX 11,在用龍書的源碼配置項目運行環境的時候都花了好幾天的時間才搞定,還得忍受上千個沒法避免的編譯警告,不得不視警告爲無物。並且裏面的代碼使用了Microsoft DirectX SDK(June 2010)開發包和裏面的Effects 11框架,這些東西都已是8年前的產物了。html

而後在18年5月的時候,我先是在Github上翻到了微軟對FX11(原Effects11)庫一直都還在更新,而後發現了DirectX Tool KitDirectX SDK Samples,裏面提供的教程寫法和龍書的作法不同。而後我才明白,微軟其實已經將DirectX的相關組件隨同Windows SDK一塊兒更新。而我如今使用的是Visual Studio 2019 Community,裏面就已經包含了Windows SDK。通過一段時間的文檔和樣例閱讀後,決定嘗試編寫一個全新的教程來過渡到當前DirectX 11的較新版本。git

可是在轉移的時候也遇到了不少須要解決的問題,好比:github

  1. 沒有了諸如d3dx11.h, xnamath.h, dxerr.h, xnacollision.h等這些老舊的頭文件
  2. 使用新的Effects 11框架的話引起編譯器警告:X4717: Effects deprecated for D3DCompiler_47,提示Effects11將來可能不受D3DCompiler的支持
  3. 着色器須要手工進行管理,而且HLSL的寫法上和FX有些差別(好比Sampler不能在HLSL中直接定義)
  4. 龍書11的示例代碼有關Effects 11的部分基本上還得靠本身從新編寫

這些問題均可如下面的教程中找到對應的解決/替代方案,在這裏就不一一列舉了。



windows

十分重要!因爲該文章系列注重的是項目實踐,並非面向零基礎的初學者。在學習本教程以前須要:api

  1. 熟悉C++,最好是瞭解C++11,語言基礎決定我的代碼質量
  2. 對線性代數和3D數學基礎有所掌握,好比閱讀過3D數學基礎一書,或者龍書11的第1章到第3章
  3. 瞭解渲染管線基礎,能夠閱讀過龍書11的第4章到第5章,用過遊戲引擎進行開發,又或者是以前學過DirectX9/11 或 OpenGL
  4. 自行學習HLSL基礎語法



本教程的特色以下:框架

  1. 徹底脫離對DirectX SDK的依賴,配置難度大幅下降,而且兼容Win7-Win10平臺
  2. 使用原生的HLSL編譯器,而不是使用FX11框架和fx5.0
  3. 對Direct3D 11的一系列API有較爲詳細的講解

儘管這邊提供了大量的學習Demo,但仍是鼓勵你們邊學習邊搭建本身的軟引擎,多動手實踐,只有踩過的坑纔是你本身的。



函數

如何讓你的DirectX 11學習之路更爲平坦?在此我給出幾點調試相關的建議:佈局

  1. 沒學會單步調試、斷點調試的必定要先去學會
  2. 在調試程序的時候必定要留意輸出窗口(來源爲調試),一些D3D相關的函數運行失敗都會在這裏有十分詳細的反饋。瞭解這個能夠省去你不少開發的時間,避免沒必要要的查找,這一點十分重要!
  3. 學會使用Visual Studio自帶的圖形調試器,若是你如今使用的是別的圖形調試器則能夠跳過。
  4. 善於利用一些函數返回的HRESULT類型錯誤碼,可使用我這邊的DXTrace庫來了解錯誤碼的具體含義,也可使用DirectX SDK中的Utilities\bin\x86\DXErr.exe來查詢

下面是一個嘗試使用顯示適配器建立D3D設備引起的錯誤:




學習

注意:
1. 考慮到如今DXTK庫只是用到了它裏面的鍵鼠類和紋理加載,如今已經單獨提取出來使用。
2. 該教程在Github有專門配套的項目源碼,讀者能夠自行下載。
3. 如今某些章節會有一些練習題,除了龍書裏面有的部分進行挑選外,本身也嘗試出了一些題目。
4. 本教程並不能表明Direct3D的方方面面,你還須要善於利用下面參考資料中給予的MSDN文檔來查詢信息。
5. 教程的閱讀順序從入門篇開始,並須要先閱讀裏面提到的前置章節。測試

因爲博主如今要開始準備考研了,所以本教程將會長期暫停出新內容直到明年再繼續

GitHub項目瀏覽與下載
GitHub watchersGitHub starsGitHub forks
歡迎加入QQ羣: 727623616 能夠一塊兒探討DX11,以及有什麼問題也能夠在這裏彙報。

項目概述

語言:
-C++11和少許C++14
-HLSL Shader Model 5.0

目前全部項目無需依賴第三方庫的編譯,而是從微軟官方項目中提取了下述模塊到項目中:
DirectXTex/DDSTextureLoader
DirectXTex/WICTextureLoader
DirectXTex/ScreenGrab
DXTK/Mouse(源碼上有所修改)
DXTK/Keyboard(源碼上有所修改)

教程需求與配置表

IDE VS2019 VS2017 VS2015
D3DComplier版本 47 47 47
Windows SDK版本 10.0.17763.0 10.0.17763.0 10.0.14393.0
Windows開發/運行環境 Windows 10 Windows 10 Windows 7 SP1及更高版本
平臺 x86/x64支持 x86/x64支持 x86/x64支持
配置 Debug/Release支持 Debug/Release支持 Debug/Release支持

注意:

  1. 教程不支持VS2013及更低版本!
  2. VS2015在安裝時須要勾選VS2015 更新 3, 以及Tools(1.4.1)和Windows 10 SDK(10.0.14393)
  3. Win7系統須要安裝Service Pack 1以及KB2670838補丁以支持Direct3D 11.1
  4. 建議安裝配置表列出的VS所使用的對應版本的Windows SDK

博客和項目維護不易,若是本系列教程對你有所幫助,但願可以掃碼支持一下博主。

目錄

雜項篇(優先度從高到低)

目錄 版次 建立時間 修改時間
教程項目沒法編譯、運行的解決方法 第4版 2018/12/28 2019/3/20
HR宏關於dxerr庫的替代方案 第1版 2018/12/24 2018/12/24
ComPtr智能指針 第2版 2018/12/28 2019/3/20
HLSL編譯着色器的三種方法 第5版 2018/12/4 2019/9/26
Visual Studio圖形調試器詳細使用教程 第6版 2018/9/13 2019/9/26
深刻理解HLSL常量緩衝區打包規則 第1版 2018/7/27 2018/7/27
HLSL中矩陣的內存佈局和mul函數探討 第2版 2018/10/19 2019/1/10
深刻理解與使用2D紋理資源 第8版 2019/1/13 2019/5/19
深刻理解與使用緩衝區資源 第3版 2019/2/11 2019/5/13


實戰篇

目錄 版次 建立時間 修改時間
實現一個3D魔方(1) 第1版 2019/1/7 2019/1/7
實現一個3D魔方(2) 第1版 2019/1/8 2019/1/8
實現一個3D魔方(3) 第1版 2019/1/10 2019/1/10


入門篇

目錄 版次 建立時間 修改時間
01 DirectX11初始化 第18版 2018/5/12 2019/4/12
02 頂點/像素着色器的建立、頂點緩衝區 第17版 2018/5/13 2019/4/18
03 索引緩衝區、常量緩衝區 第14版 2018/5/13 2019/4/18
04 使用DirectX Tool Kit幫助開發 第6版 2018/5/13 2018/11/4
05 鍵盤和鼠標輸入 第5版 2018/5/14 2019/3/20
06 DirectXMath數學庫 第4版 2018/5/15 2019/3/11
07 添加光照與經常使用幾何模型、光柵化狀態 第20版 2018/5/28 2019/5/6
08 Direct2D與Direct3D互操做性以及利用DWrite顯示文字 第8版 2018/5/29 2019/5/1
09 紋理映射與採樣器狀態 第18版 2018/7/12 2019/5/13
10 攝像機類 第17版 2018/7/16 2019/4/23


進階篇

目錄 版次 建立時間 修改時間
11 混合狀態 第13版 2018/7/21 2019/5/1
12 深度/模板狀態、平面鏡反射繪製 第15版 2018/7/28 2019/4/23
13 動手實現一個簡易Effects框架、陰影效果繪製 第17版 2018/7/29 2019/4/23
14 深度測試 第7版 2018/8/5 2019/4/23
15 幾何着色器初探 第7版 2018/8/8 2019/4/23
16 流輸出階段 第10版 2018/8/11 2019/5/22
17 利用幾何着色器實現公告板效果 第11版 2018/8/19 2019/4/23
18 使用DirectXCollision庫進行碰撞檢測 第1版 2018/8/29 2018/8/29
19 模型加載:obj格式的讀取及使用二進制文件提高讀取效率 第14版 2018/9/11 2019/9/26
20 硬件實例化與視錐體裁剪 第8版 2018/9/25 2019/4/23
21 鼠標拾取 第2版 2018/10/17 2018/12/20
22 立方體映射:靜態天空盒的讀取與實現 第8版 2018/10/28 2019/4/23
23 立方體映射:動態天空盒的實現 第3版 2018/11/3 2019/4/23
24 Render-To-Texture(RTT)技術的應用 第6版 2018/11/18 2019/4/23
25 法線貼圖 第2版 2019/1/6 2019/3/20


高級篇

目錄 版次 建立時間 修改時間
26 計算着色器:入門 第3版 2019/1/31 2019/3/20
27 計算着色器:雙調排序 第2版 2019/2/19 2019/3/20
----長期停更---- ------ -------- --------

內容儲備

如下是內容儲備,但今年不會開坑,也不會保證下面這些坑都能開。

目錄
Win32 窗口初始化
渲染管線和變換
HLSL
DirectX + ImGui
DirectX + Assimp

參考資料

MSDN文檔,同時推薦你們收藏以隨時查閱:

Direct3D 11 Graphics API(Windows SDK)

Direct3D 11 Graphics(Windows SDK)

DXGI API(Windows SDK)

DXGI(Windows SDK)

HLSL

參考到的一些網站:

DirectX SDK Samples

Rastertek--DX11

DirectX Tool Kit

Windows SDK

DirectXMath

DirectXTex

龍書網站

DXUT

參考書籍:

Introduction to 3D Game Programming with DirectX 11

Practical Rendering and Computation with Direct3D 11

相關文章
相關標籤/搜索