【DirectX11】【學習筆記(3)練習】修改三角形顏色
阿新 • • 發佈:2018-12-22
本節主要學習瞭如何通過利用輸入佈局,VS 和PS來給三角形上色。
Exercise 1:
畫一個紫色三角形。
步驟:更改vertex陣列中的顏色值就可以做到。
(紫色顏色值為0.5f,0.5f,0.5f)
Exercise 2:
向VS傳入兩個顏色,使得最終顏色值為兩個顏色向量相乘。
首先更改頂點結構和輸入佈局。
struct Vertex { Vertex() {} XMFLOAT3 pos; XMFLOAT4 color; XMFLOAT4 color2; Vertex( float x,float y,float z,float r,float g,float b,float a, float cr, float cg, float cb, float ca):pos(x, y, z),color(r,g,b,a),color2(cr,cg,cb,ca) {} }; D3D11_INPUT_ELEMENT_DESC layout[] { {"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0}, {"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT,0,12,D3D11_INPUT_PER_VERTEX_DATA,0}, { "COLOR",1,DXGI_FORMAT_R32G32B32A32_FLOAT,0,28,D3D11_INPUT_PER_VERTEX_DATA,0 }, };
第二個顏色的輸入佈局名字還是COLOR,但是後面的第二個引數為1,這一點在之前的章節提到過。對於同樣屬性,可以在後面第二個引數上加數字。
注意:對應的這個引數在VS中的名字就是第一個引數名字+第二個引數的數字
修改後的VS如下:
VS_OUTPUT VS(float4 inPos : POSITION, float4 color : COLOR,float4 color2 :COLOR1) { VS_OUTPUT output; output.Pos = inPos; output.Color.r = color.r * color2.r; output.Color.g = color.g * color2.g; output.Color.b = color.b * color2.b; output.Color.a = color.a * color2.a; return output; }
其實這部分程式碼非常簡單,但是由於fx檔案中編寫程式碼,沒有報錯資訊,所以還是要很小心。