第十章及第十二章
混合兩步即可實現
首先建立乙個pipeline stage
d3d12_graphics_pipeline_state_desc transparentpsodesc = opaquepsodesc;
d3d12_render_target_blend_desc transparencyblenddesc;
transparencyblenddesc.blendenable =
true
; transparencyblenddesc.logicopenable =
false
; transparencyblenddesc.srcblend = d3d12_blend_src_alpha;
transparencyblenddesc.destblend = d3d12_blend_inv_src_alpha;
transparencyblenddesc.blendop = d3d12_blend_op_add;
transparencyblenddesc.srcblendalpha = d3d12_blend_one;
transparencyblenddesc.destblendalpha = d3d12_blend_zero;
transparencyblenddesc.blendopalpha = d3d12_blend_op_add;
transparencyblenddesc.logicop = d3d12_logic_op_noop;
transparencyblenddesc.rendertargetwritemask = d3d12_color_write_enable_all;
transparentpsodesc.blendstate.rendertarget[0]
= transparencyblenddesc;
throwiffailed
(md3ddevice-
>
creategraphicspipelinestate
(&transparentpsodesc,
iid_ppv_args
(&mtranspso)))
;
接著在渲染透明物體時切換到這個pipeline stage
幾何著色器
輸入乙個三角形,幾何著色器輸出兩個三角形,第二個三角形相當於第0個頂點沿12邊反射得到的頂點4與頂點12形成的三角形
兩步即可實現
首先設定幾何著色器**
[
maxvertexcount(16
)]void
gs(******** vertexout gin[3]
,inout ********streamtristream)
float3 v0tov2 =
normalize
(gout[2]
.posw - gout[0]
.posw)
; gout[3]
.posw = gout[2]
.posw + v0tov2;
gout[3]
.posh =
mul(
float4
(gout[3]
.posw,
1.0)
, **iewproj)
; gout[3]
.normalw = gin[2]
.normalw;
gout[3]
.texc = gin[0]
.texc;
tristream.
restartstrip()
; tristream.
(gout[2]
);tristream.
(gout[1]
);tristream.
(gout[3]);}
編譯該著色器並將其放到pipeline上
幾何著色器(一) 基本概念
最近想做一些渲染的東西,接觸到了幾何著色器,發現了幾何著色器的強大之處,幾何著色器位於頂點和片元著色器之間,幾何著色器能夠產生0個以上的基礎圖元,它能起到一定的裁剪作用 同時也能產生比頂點著色器輸入更多的基礎圖元。它可以做的事情非常的酷炫,例如 表面法線的視覺化和實現三維物體的 效果。基本知識 輸入...
DX10中的幾何著色器的簡單實用介紹
幾何著色器是dx10 中剛剛加入的內容,在 dx9中從未有過,其渲染過程中是介於頂點著色器與畫素著色器之間。幾何著色器的使用主要目的是為了可以在著色器程式中改變頂點的數量和型別。下面是乙個幾何著色器的定義 maxvertexcount n void shadername primitivetype ...
DX11渲染管道 著色器的編譯和建立
在不使用效果框架的時候,整個渲染管道其實挺簡單的,建立資源,輸入資源。編譯著色器輸入著色器,其實著色器本身也是一種資料,只不過這個資料描述的是邏輯。最後呼叫一下draw方法畫一下就ok 了。這裡說說著色器的編譯和建立,很簡單。d3dx11compilefromfile hresult d3dx11c...