網易作業deadline!!!要涼了555
對directx初始化完成後,就可以進行渲染了。
struct vs_input //輸入資料的格式
;struct vs_output //輸出資料的格式
;vs_output main(vs_input input)
編譯之後生成cso檔案,使用readfiletoblob函式將檔案的資料讀入blob中,也可以不預先編譯直接使用函式d3dcompilefromfile編譯產生blob,之後使用creatvertexshader進行建立頂點著色器即可。
之後再使用該blob建立輸入布局,告訴程式資料是以這種格式輸入的。
所以生成的頂點著色器cso檔案有兩個用處:1.建立頂點著色器。2.建立輸入布局。
建立布局時要先對布局進行描述。例如:
d3d11_input_element_desc inputdesc =
, };
//輸入資料有兩個含義:第乙個是position,第二個是color,這跟我們shader中的設定是一致的,
//分別對這兩個含義進行描述,告訴程式這些含義分別具體是什麼意思。
2.其他shader的建立。跟vertex_shader差不多,只是不需要用來建立輸入布局了。但是shader渲染步驟要注意,比如vertex_shader中return 的資料型別是float4,所以pixel_shader中的輸入資料型別是float4,即頂點著色完送到畫素著色器。
3.有了各種shder之後,我們相當於有了工具進行渲染。之後就是如何運用這些工具了。
首先對於輸入資料,我們用buffer的形式讀入,使用createbuffer建立裝置快取,快取的資料就是我們的資料資料(這樣裝置才能用,直接讀入的資料是不能被裝置使用的)。資料準備完畢後我們就可以呼叫函式進行渲染了。
先使用clearrendertargetview,把上一幀清空。
再使用iasetinputlayout,設定輸入布局。
再使用iasetprimitivetopology,告訴device要將資料變成什麼樣子(點、線、三角形)。
在使用rssetstate設定光柵化狀態(點對應到螢幕的畫素,可以設定採集模式、填充模式等等)。
再使用setshader,裝備好我們建立好的shader。
再使用iasetvertexbuffers,把剛剛設定好的裝置快取傳進去。
再使用draw進行繪畫即可完成渲染。
然後讓交換鏈顯示我們渲染好的影象swapchain->present。
至此,就完成了乙個簡單的渲染過程。
總而言之:
1.準備資料(頂點座標、顏色、紋理、光照、法向量資訊等)。
2.準備對應的shader(用於接收並處理資料,可以快速進行一堆矩陣運算(hlsl面向底層),然後返回結果)。
3.資料準備好了,shader也寫好了,但是資料怎麼跟shader上的變數對應起來呢?這個時候就需要設定輸入布局,把資料跟shader的識別符號(如position)聯絡起來。
4.除了輸入資料,一些外部資料(如世界矩陣,視覺矩陣等)可以放到shader的cbuffer中,在程式裡面進行繫結(setconstantbuffer)即可,然後就可用於shader的運算中,比如相機可以用通過在程式中修改視覺矩陣來實現。
5.當中可以新增索引快取,節約記憶體,但是要用法向量的時候會比較麻煩,但是也可實現。
6.把資料寫到快取裡面去,然後渲染就是各種set,然後draw就可以了。
7.set什麼?比如選擇什麼vertexbuffer,選擇什麼shader,選擇什麼inputlayout,選擇什麼indexbuffer,選擇什麼constantbuffer,選擇什麼深度模板檢視,選擇以什麼圖形來渲染,都是需要set的。
8.set好之後draw或者present就完事。當然中間還會有一些clear的工作。
DirectX11學習筆記 4 文字的渲染
遊戲中的文字有多種實現方式,比如在螢幕上進行幾何貼圖,使用向量繪製,甚至僅僅使用標準訊息盒。在2d和3d遊戲中,文字通常使用貼圖的幾何圖形進行繪製 動態文字系統通重載入在字型中包含的任何字母的單一貼圖來構建那些文字字串 這裡的建立頂點快取是動態的 設定如下 hresult d3dtextdemo c...
軟渲染器 Directx11 一之向量,頂點,矩陣
最近我完成了乙個3d軟體光柵器,也就是用cpu執行的小型3d渲染引擎,下面我就分為幾個章節分別說下我實現的思路 通常我們的向量和頂點都是用 x,y,z 表示,但是在3d圖形學裡,我們用 x,y,z,w 表示,那麼在3d圖形學裡頂點和向量有什麼區別呢?在3d圖形學裡,頂點 vertex 用 x,y,z...
DirectX11 學習筆記(14) 點光源
好久沒有更新部落格了。最近一直在忙一些其他的事情 dx都快忘了 今天繼續更新!上次說到簡單光照,今天我們就學習乙個點光源 影響點光源的因素主要有 範圍,位置,衰減 其中衰減用乙個二次方程來表達 attenuation att0 att1 d att2 d att0 常量修飾符 由於此值未乘以任何值,...