【DirectX11】【學習筆記(3)】修改三角形顏色
阿新 • • 發佈:2018-12-22
本章內容主要是關於如何修改我們的著色器,頂點結構,包括輸入佈局(layout)
賦值給每個頂點的顏色,最終會在整個三角形上進行插值。
Effects File
在fx檔案中我們建立了頂點和畫素著色器。
首先我們在檔案裡建立一個新的結構體,這個結構體是VS的返回型別,同時也是PS的輸入型別。
我們只需要在VS裡把接收到的顏色,傳遞給下一個階段。顏色在傳到PS之前會先經過RS,在RS階段每一個頂點的顏色會在整個圖元上插值,之後傳到PS,把顏色傳到OM階段,之後再放到rendertarget上。
VS_OUTPUT VS(float4 inPos : POSITION, float4 inColor : COLOR) { VS_OUTPUT output; output.Pos = inPos; output.Color = inColor; return output; } float4 PS(VS_OUTPUT input) : SV_TARGET { return input.Color; }
Vertex Structure
修改頂點結構,加上顏色成員。
struct Vertex //Overloaded Vertex Structure
{
Vertex(){}
Vertex(float x, float y, float z,
float cr, float cg, float cb, float ca)
: pos(x,y,z), color(cr, cg, cb, ca){}
XMFLOAT3 pos;
XMFLOAT4 color;
};
Input Layout
再輸入佈局中加入一個新的顏色元素。
第一個位置元素的偏移是0,第二個顏色元素的偏移是12個位元組,大小是16個位元組。因為顏色格式我們使用了DXGI_FORMAT_R32G32B32A32_FLOAT,佔128位,也就是16個位元組。
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 }, };
Initializing the Scene
修改頂點資訊
bool InitScene()
Vertex v[] =
{
Vertex( 0.0f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f ),
Vertex( 0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f ),
Vertex( -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f ),
};
本節內容就到這裡拉。
本節內容程式碼可以在我的Github倉庫找到!Github傳送門
遊戲開發路途遙遠,但我相信只要堅持,總能到達彼岸!
如果我的文章對於你學習DirectX11有點幫助,歡迎評論給出建議,讓我們一起學習進步!
———————— 小明 2018.11.15 14.53