【DirectX11】【学习笔记(3)】修改三角形颜色

本文详细介绍了如何在DirectX11中修改着色器以实现顶点颜色的插值,包括创建顶点和像素着色器,修改顶点结构和输入布局以包含颜色信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章内容主要是关于如何修改我们的着色器,顶点结构,包括输入布局(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值