这是我建立自己的D3D程序的第一篇文章,也算是自学龙书11的学习一个阶段性总结,尽管认真看了龙书11,但还是有很多代码要一边敲,以便参考龙书配套的代码。这个程序是在已经把程序框架建好了(程序框架包括初始化窗口,消息处理函数,时间函数,运行步骤)的基础之上做出的。
(一)
首先,我们要用一个结构定义点(点由 位置 颜色 纹理等构成),然后对构成点的元素(位置 颜色 纹理等)进行描述。
然后,我们建立effect文件,实现基本的操作(坐标变换)和一些特效(光照,纹理等)。
最后,我们运用上面的“描述”和“effect文件”建立inputlayout,并将inputlayout绑定到输入装配阶段,这样管线就可以访问到了。
(二)
具体数据(每个顶点具体位置,颜色值等)我们应该把它存到缓存里面,让管线可以访问,结合上面的effect,就可以渲染了。
首先,描述我们要建立的”缓存“
然后,描述我们要的具体点,具体索引。
最后,用建立缓存,并绑定到输入装配阶段。
上面两大步就完成了输入装配阶段。其实effect文件也把vs阶段和ps阶段给”描述“了。
(一)
结构定义点
//Vertex.h
namespace Vertex
{
struct CubeVertex
{
XMFLOAT3 pos; //XMFLOAT3在xnamath里面,这两个变量对应
XMFLOAT4 Color; //元素描述,和顶点着色器的输入(用语义(语义在顶点描述那里定义)对应)
}
}
构成点的元素(位置 颜色 纹理等)进行描述
//Vertex.h
class InputLayoutDec
{
public:
static const D3D11_INPUT_ELEMENT_DESC CubeVertexs[];
};
//Vertex.cpp
const D3D11_INPUT_ELEMENT_DESC InputLayoutDec::CubeVertexs[] =
{
{"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}
};
建立effect文件
//effect.fx