1. 程式人生 > >【DirectX11】【學習筆記(3)練習】修改三角形顏色

【DirectX11】【學習筆記(3)練習】修改三角形顏色

本節主要學習瞭如何通過利用輸入佈局,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檔案中編寫程式碼,沒有報錯資訊,所以還是要很小心。