使用Dx11渲染纹理3——渲染矩形

2022-01-12  本文已影响0人  上官宏竹

渲染矩形

渲染矩形只需要将顶点及顶点索引做修改,建立两个三角形,并且修改图元拓扑为:IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST),其余在渲染三角形的基础上即可完成。

顶点坐标系
// 1. 顶点集合  
VertexType vertexs1[] = {
    //    顶点   |     颜色
    {-1.0f, -1.0f, 0.0f, 0.0f, 1.0f},   // 左下角
    {1.0f, 1.0f, 0.0f, 1.0f, 0.0f},     // 右上角
    {1.0f, -1.0f, 0.0f, 1.0f, 1.0f},    // 右下角
    {-1.0f, 1.0f, 0.0f, 0.0f, 0.0f}     // 左上角
};

// 2. 顶点索引集合
unsigned int indices[] = {
    0, 1, 2,    // 第一个三角形(左下顶点起顺时针)
    0, 3, 1     // 第二个三角形
};

常量缓存

多个常量缓存使用,可参考:Direct3D 11教程7:纹理映射和常量缓存

着色器增加头文件编译

将通用着色器里的结构体定义在一个头文件中,然后在着色器中include引用它。
需要注意,应该使用如下的着色器编译方法:

D3DCompileFromFile(vsFilename, NULL, D3D_COMPILE_STANDARD_FILE_INCLUDE,
    "ColorVsMain",  // 着色器入口函数 
    "vs_5_0", 
    D3D10_SHADER_ENABLE_STRICTNESS, 
    0,
    &m_vertexShaderBuffer, &errorMessage);

第三个参数修改为D3D_COMPILE_STANDARD_FILE_INCLUDE。该字段用于决定如何处理包含文件,会按照当前着色器代码的相对路径搜索对应的头文件并包含进来。
如果将第三个参数默认设置为nullptr,则编译着色器时会报错:error X1505: No include handler specified, can't perform a #include. Use D3DX APIs or provide your own include handler.

完整代码见:使用git log可以查看渲染矩形的过程

上一篇下一篇

猜你喜欢

热点阅读