(4)Render函数

默认定义在CubeRenderer.cpp源文件中的Render函数用于绘制立体图形,此函数的实现代码如下所示:

void CubeRenderer::Render()

{

    //背景色

    const float midnightBlue[] = {0.098f,0.098f,0.439f,1.000f};

    //设置背景

    m_d3dContext->ClearRenderTargetView(

        m_renderTargetView.Get(),

        midnightBlue

    );

    //清空深度缓存和模版缓存

    m_d3dContext->ClearDepthStencilView(

        m_depthStencilView.Get(),

        D3D11_CLEAR_DEPTH,

        1.0f,

        0

    );

    if (!m_loadingComplete)

    {

        return;

    }

    //绑定到图形管线的output-merger stage阶段

    m_d3dContext->OMSetRenderTargets(

        1,

        m_renderTargetView.GetAddressOf(),

        m_depthStencilView.Get()

    );

    m_d3dContext->UpdateSubresource(

        m_constantBuffer.Get(),

        0,

        NULL,

        &m_constantBufferData,

        0,

        0

    );

    UINT stride = sizeof(VertexPositionColor);

    UINT offset = 0;

    //将顶点缓存绑定到图形管线的input-assembler stage阶段

    m_d3dContext->IASetVertexBuffers(

        0,

        1,

        m_vertexBuffer.GetAddressOf(),

        &stride,

        &offset

    );

    //将顶点索引的缓存绑定到图形管线的input-assembler stage阶段

    m_d3dContext->IASetIndexBuffer(

        m_indexBuffer.Get(),

        DXGI_FORMAT_R16_UINT,

        0

    );

    //设置图元的拓扑结构为为三角形列表

    m_d3dContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

    //设置输入格式

    m_d3dContext->IASetInputLayout(m_inputLayout.Get());

    //设置顶点着色器

    m_d3dContext->VSSetShader(

        m_vertexShader.Get(),

        nullptr,

        0

    );

    //顶点着色器的常量缓存

    m_d3dContext->VSSetConstantBuffers(

        0,

        1,

        m_constantBuffer.GetAddressOf()

    );

    //设置像素着色器

    m_d3dContext->PSSetShader(

        m_pixelShader.Get(),

        nullptr,

        0

    );

    //绘制立体图型

    m_d3dContext->DrawIndexed(

        m_indexCount,

        0,

        0

    );

}

在上面的代码中,首先定义一个const float类型的数组midnightBlue,用来存储一个RGBA颜色值,并在ClearRenderTargetView函数中使用这个颜色值来设置应用窗口的背景。接着调用ClearDepthStencilView函数清空深度缓存和模版缓存,其中深度缓存用于进行深度测试,经过深度测试以后在应用窗口中将实现靠近屏幕的物体遮挡远离屏幕的物体的效果,而模版缓存则用于将像素进行模版测试,经过模版测试后此像素将可以写入到后台缓存中。

接下来将相应的数据绑定到图形管线的output-merger stage阶段,以便于最终将图形绘制到应用窗口中。调用OMSetRenderTargets函数将渲染目标视图和深度模版视图绑定到图形管线的output-merger stage阶段,这两个视图是绘制立体图形的过程中所需要的资源。然后调用IASetVertexBuffers函数和IASetIndexBuffer函数分别将顶点缓存和顶点索引缓存绑定到图形管线的output-merger stage阶段。

调用IASetPrimitiveTopology函数设置图元的拓扑结构为三角形列表,并调用VSSetShader函数和VSSetConstantBuffers函数来分别设置顶点着色器和顶点着色器的常量缓存,接着调用PSSetShader函数来设置像素着色器,最后调用DrawIndexed函数来绘制立体图形。

Win10系列:VC++ Direct3D模板介绍3的更多相关文章

  1. Win10系列:VC++ Direct3D模板介绍1

    Visual Studio为开发Direct3D应用程序提供了便捷的模版,读者可以不必手动去新建Direct3D中所使用到的基础资源,而只需专注于图形的绘制.本小节主要为读者介绍这个模版中用于绘制图形 ...

  2. Win10系列:VC++ Direct3D模板介绍2

    (3)CreateDeviceResources函数 CreateDeviceResources函数默认添加在CubeRenderer.cpp源文件中,此函数用于创建着色器和立体图形顶点.接下来分别介 ...

  3. Win10系列:JavaScript 模板绑定

    WinJS库模板提供了一种格式化显示多条数据的便捷方式,通过这种方式可以将模板与ListView或FlipView等控件结合使用以控制数据的显示格式.定义一个WinJS库模板的方法与定义WinJS库控 ...

  4. Java 集合系列 05 Vector详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2): ...

  6. Spring Cloud系列(二) 介绍

    Spring Cloud系列(一) 介绍 Spring Cloud是基于Spring Boot实现的微服务架构开发工具.它为微服务架构中涉及的配置管理.服务治理.断路器.智能路由.微代理.控制总线.全 ...

  7. Docker系列之原理简单介绍

    目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...

  8. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. MVC数据列表展示【三】

    一.控制器向视图传递参数的两种形式:使用到的技术有EF,linq表达式,StringBuilder,相关技术都可以在我的博客园中找到详细的技术介绍. 1. 第一种是通过字符通过foreach循环拼接将 ...

  2. ButterKnife RadioGroup选择事件

    ButterKnife 的点击事件都很清晰,在使用RadioGroup控件时的方法: <!-- 定义一组单选框 --> <RadioGroup android:id="@+ ...

  3. Go使用protobuf

    WIN7 + Go1.9.2+protobuf3.5.1 1.首先定义一个用于测试的proto文件test.proto,内容如下: syntax = "proto3"; packa ...

  4. java 数据导入xls

    @RequestMapping("admin/doorDesign/getexcel.do") public void getExcel(String name,String ph ...

  5. 第 5 章 网络 - 031 - none和host网络的适用场景

    none和host网络的适用场景 Docker 安装时会自动在 host 上创建三个网络,用 docker network ls 命令查看: root@ubuntu:~# docker network ...

  6. eclipse报错:Could not resolve bean definition resource pattern [classpath:spring/applicationContext-*.xml]或者找不到

    1.把xml文件复制到WEB-INF下 2.路径改成 [/WEB-INF/spring/applicationContext-*.xml]

  7. vSphere 扩展硬盘空间

    把所有的snapshot都删除了之后,ssh上去之后,进vmfs目录到client machine的目录. 然后执行下面的方法. 虽然成功了,却没看到有扩展的. 唯一的好处是, vSphone Cli ...

  8. 雷林鹏分享:jQuery EasyUI 树形菜单 - 使用标记创建树形菜单

    jQuery EasyUI 树形菜单 - 使用标记创建树形菜单 一个树形菜单(Tree)可以从标记创建.easyui 树形菜单(Tree)也可以定义在 元素中.无序列表的 元素提供一个基础的树(Tre ...

  9. 文献导读 - Machine Learning Identifies Stemness Features Associated with Oncogenic Dedifferentiation

    参考: Machine Learning Identifies Stemness Features Associated with Oncogenic Dedifferentiation 前所未有!1 ...

  10. tomcat ----> 启动,关闭和配置等等

    1.启动 在tomcat安装目录的bin文件中双击startup.bat. 2.关闭 在tomcat安装目录的bin文件中双击shutdown.bat. 3.配置tomcat-user.xml文件 ( ...