本节主要学习了如何通过利用输入布局,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文件中编写代码,没有报错信息,所以还是要很小心。