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

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

本章內容主要是關於如何修改我們的著色器,頂點結構,包括輸入佈局(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