前言 (更新於 2018/8/12)
從第一次接觸DirectX 11到現在已經有一年時間了。還記得去年的這個時候被要求學習DirectX 11,在用龍書的源碼配置項目運行環境的時候都花了好幾天的時間才搞定,還得忍受上千個編譯警告,不得不視警告爲無物。而且裏面的代碼使用了Microsoft DirectX SDK(June 2010)開發包和裏面的Effects 11框架,這些東西都已經是8年前的產物了。
然後在18年5月的時候,我先是在Github上翻到了微軟對Effects 11庫一直都還在更新,然後發現了DirectX Tool Kit和DirectX SDK Samples,裏面提供的教程寫法和龍書的做法不一樣。然後我才明白,微軟其實已經將DirectX的相關組件隨同Windows SDK一起更新,並且早就已經放棄了對DirectX SDK的任何更新。而我現在使用的是Visual Studio 2017 Community,裏面就已經包含了Windows SDK。經過一段時間的文檔閱讀後,決定嘗試編寫一個全新的教程來過渡到當前DirectX 11的較新版本。當然,更新進度也受限於我當前的學習進度。
但是在轉移的時候也遇到了很多需要解決的問題,比如:
- 沒有了諸如
d3dx11.h
,xnamath.h
,dxerr.h
,xnacollision.h
,DInput.h
等等頭文件 - 使用新的Effects 11框架的話引發編譯器警告,說fx5.0未來會被拋棄
- 不使用Effects 11框架就意味着需要逐個編譯着色器並手工綁定到渲染管線上
- 龍書11的示例代碼有關Effects 11的部分都不能看了,基本上還得靠自己重新編寫
這些問題都可以下面的教程中找到對應的解決/替代方案,在這裏就不一一列舉了。
目錄
由於該文章系列注重的是項目實踐,對一些數學部分不會過於詳細的描述。因此該教程主要面向的用戶是:
- 已經掌握了線性代數的基礎部分(上過線性代數課程,閱讀過龍書1-3章,或3D數學基礎一書)
- 已經初步掌握過一些HLSL基礎(該教程不一定會提供HLSL基礎)
- 苦於配置龍書的示例代碼,尋求更好的解決方案
- 打算脫離Effects 11框架,使用HLSL編譯器
主題 | 版次 | 創建時間 | 修改時間 |
---|---|---|---|
01 DirectX11初始化 | 第5版 | 2018/5/12 | 2018/8/18 |
02 頂點/像素着色器的創建、頂點緩衝區 | 第10版 | 2018/5/13 | 2018/8/30 |
03 索引緩衝區、常量緩衝區 | 第7版 | 2018/5/13 | 2018/8/20 |
04 使用DirectX Tool Kit幫助開發 | 第3版 | 2018/5/13 | 2018/8/22 |
05 鍵盤和鼠標輸入 | 第3版 | 2018/5/14 | 2018/7/28 |
06 DirectXMath數學庫 | 第1版 | 2018/5/15 | 2018/5/15 |
07 添加光照與常用幾何模型 | 第7版 | 2018/5/28 | 2018/8/8 |
08 Direct2D與Direct3D互操作性以及利用DWrite顯示文字 | 第4版 | 2018/5/29 | 2018/8/8 |
09 紋理映射與採樣器狀態 | 第7版 | 2018/7/12 | 2018/8/11 |
10 攝像機類 | 第3版 | 2018/7/16 | 2018/8/8 |
11 混合狀態與光柵化狀態 | 第3版 | 2018/7/21 | 2018/8/8 |
12 深度/模板狀態 | 第4版 | 2018/7/28 | 2018/8/8 |
13 拋棄FX11並初步實現BasicFX類 | 第4版 | 2018/7/29 | 2018/8/8 |
14 深度測試 | 第2版 | 2018/8/5 | 2018/8/6 |
15 幾何着色器初探 | 第1版 | 2018/8/8 | 2018/8/8 |
16 利用幾何着色器可選的流輸出階段幫助繪製多種分形 | 第1版 | 2018/8/11 | 2018/8/11 |
17 利用幾何着色器實現公告板效果 | 第2版 | 2018/8/19 | 2018/8/20 |
18 使用DirectXCollision庫進行碰撞檢測 | 第1版 | 2018/8/29 | 2018/8/29 |
雜項 | 版次 | 修改時間 |
---|---|---|
深入理解HLSL常量緩衝區打包規則 | 第1版 | 2018/7/27 |
參考到的一些網站:
Direct3D 11 Graphics(Windows SDK)
參考書籍:
Introduction to 3D Game Programming with DirectX 11
Practical Rendering and Computation with Direct3D 11