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