网易作业deadline!!!要凉了555

对DirectX初始化完成后,就可以进行渲染了。

1.创建顶点着色器vertex_shader:顶点着色器负责接收顶点数据(位置信息、颜色信息等等)。shader编程使用的是HLSL语言,具体上就是告诉程序数据的格式。如下一个例子。

struct VS_INPUT        //输入数据的格式
{float2 inPos : POSITION;float3 inColor : COLOR;
};struct VS_OUTPUT       //输出数据的格式
{float4 outPos : SV_POSITION;float3 outColor : COLOR;
};VS_OUTPUT main(VS_INPUT input)
{VS_OUTPUT output;output.outPos = float4(input.inPos,0.0f,1.0f);output.outColor = input.inColor;return output;
}

编译之后生成cso文件,使用readfiletoblob函数将文件的数据读入blob中,也可以不预先编译直接使用函数D3DCompileFromFile编译产生blob,之后使用creatvertexshader进行创建顶点着色器即可。

之后再使用该blob创建输入布局,告诉程序数据是以这种格式输入的。

所以生成的顶点着色器cso文件有两个用处:1.创建顶点着色器。2.创建输入布局。

创建布局时要先对布局进行描述。例如:

D3D11_INPUT_ELEMENT_DESC inputDesc[] ={{"POSITION",0,DXGI_FORMAT_R32G32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},{"COLOR",0,DXGI_FORMAT_R32G32B32_FLOAT,0,D3D11_APPEND_ALIGNED_ELEMENT,D3D11_INPUT_PER_VERTEX_DATA,0}};
//输入数据有两个含义:第一个是POSITION,第二个是COLOR,这跟我们shader中的设置是一致的,
//分别对这两个含义进行描述,告诉程序这些含义分别具体是什么意思。

2.其他shader的创建。跟vertex_shader差不多,只是不需要用来创建输入布局了。但是shader渲染步骤要注意,比如vertex_shader中return 的数据类型是float4,所以pixel_shader中的输入数据类型是float4,即顶点着色完送到像素着色器。

3.有了各种shder之后,我们相当于有了工具进行渲染。之后就是如何运用这些工具了。

首先对于输入数据,我们用buffer的形式读入,使用createbuffer创建设备缓存,缓存的数据就是我们的数据数据(这样设备才能用,直接读入的数据是不能被设备使用的)。数据准备完毕后我们就可以调用函数进行渲染了。

先使用ClearRenderTargetView,把上一帧清空。

再使用IASetInputLayout,设置输入布局。

再使用IASetPrimitiveTopology,告诉device要将数据变成什么样子(点、线、三角形)。

在使用RSSetState设置光栅化状态(点对应到屏幕的像素,可以设置采集模式、填充模式等等)。{光栅化(Rasterization)是把顶点数据转换为片元的过程,具有将图转化为一个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的一像素。}

再使用SetShader,装备好我们创建好的Shader。

再使用IASetVertexBuffers,把刚刚设置好的设备缓存传进去。

再使用Draw进行绘画即可完成渲染。

然后让交换链显示我们渲染好的图像swapChain->Present。

至此,就完成了一个简单的渲染过程。

总而言之:

1.准备数据(顶点坐标、颜色、纹理、光照、法向量信息等)。

2.准备对应的shader(用于接收并处理数据,可以快速进行一堆矩阵运算(HLSL面向底层),然后返回结果)。

3.数据准备好了,shader也写好了,但是数据怎么跟shader上的变量对应起来呢?这个时候就需要设置输入布局,把数据跟shader的标识符(如POSITION)联系起来。

4.除了输入数据,一些外部数据(如世界矩阵,视觉矩阵等)可以放到shader的cbuffer中,在程序里面进行绑定(SetConstantBuffer)即可,然后就可用于shader的运算中,比如相机可以用通过在程序中修改视觉矩阵来实现。

5.当中可以添加索引缓存,节约内存,但是要用法向量的时候会比较麻烦,但是也可实现。

6.把数据写到缓存里面去,然后渲染就是各种Set,然后Draw就可以了。

7.Set什么?比如选择什么vertexBuffer,选择什么shader,选择什么inputLayout,选择什么indexBuffer,选择什么constantBuffer,选择什么深度模板视图,选择以什么图形来渲染,都是需要Set的。

8.Set好之后Draw或者present就完事。当然中间还会有一些clear的工作。

DirectX11渲染过程相关推荐

  1. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )

    文章目录 一. GPU 过度绘制优化总结 二. CPU 渲染过程 三. CPU 渲染性能调试工具 Layout Inspector 四. Layout Inspector 组件树 DecorView ...

  2. spring mvc DispatcherServlet详解之四---视图渲染过程

    整个spring mvc的架构如下图所示: 现在来讲解DispatcherServletDispatcherServlet的最后一步:视图渲染.视图渲染的过程是在获取到ModelAndView后的过程 ...

  3. Vue是如何渲染页面的,渲染过程以及原理代码

    Vue是如何渲染页面的,渲染过程以及原理代码:https://www.cnblogs.com/ypinchina/p/7238402.html 转载于:https://www.cnblogs.com/ ...

  4. 通俗的说下浏览器的渲染过程

    最初的模型: 浏览器下载 html 开始解析 html 遇见外链资源, 保存起来, 并且继续解析 html 解析结束 开始下载外链 下载结束 开始处理 css 处理 js 处理 处理完毕, 开始渲染 ...

  5. 彻底搞清楚浏览器渲染过程

    一.概述 在分析浏览器的渲染过程之前,我们先了解一下什么是进程和线程: (1)什么是进程? 进程是CPU进行资源分配的基本单位. (2)什么是线程? 线程是CPU调度的最小单位,是建立在进程的基础上运 ...

  6. weblit渲染过程

    让我们回顾一下这个过程中的数据和模块,数据包括网页内容.DOM.内部表示和图像,模块则包括HTML解释器.CSS解释器.JavaScript引擎以及布局和绘图模块.下面深入这些模块并对它们做进一步的细 ...

  7. 10分钟看懂浏览器的渲染过程及优化

    一.浏览器概述   目前的主流浏览器有5个:Internet Explorer.Firefox.Safari.Chrome和Opera浏览器.根据 StatCounter 浏览器统计数据,目前(截止2 ...

  8. 分析不同类型页面渲染过程

    现在让我们看看浏览器从网络上加载资源所耗费的时间(我们忽略从缓存以及从CDN等中间商网络上加载资源),我们首先要知道的是: 一个到无服务的网路往返 (传播延迟) 大约100ms 服务器对于HTML文档 ...

  9. [html] 如何优化页面的渲染过程?

    [html] 如何优化页面的渲染过程? 将样式表放到head中 将js脚本置底 减少脚本的数量,将多个脚本合并,可以使用webpack等前端工具打包 压缩样式.脚本.图片等的体积 个人简介 我是歌谣, ...

最新文章

  1. python 包用法_Python 基础教程之包和类的用法
  2. 单片机 解释型 c语言脚本,解释型单片机应用程序的研究.pdf
  3. ListDefinition Tips
  4. Hadoop系列四:Hadoop之Hive篇
  5. 2020\Simulation_1\7.音节判断
  6. 【Linux】一步一步学Linux——let命令(223)
  7. 记录一次处理 kdevtmpfsi 挖矿病毒
  8. PyCharm-professional-2018.2.2 - 破解
  9. python中的map对象_python map对象
  10. 读书笔记:余华--《活着--这是一本书》
  11. html设置ie11兼容,ie11浏览器兼容性问题设置方法
  12. IAR 非调试模式直接下载程序
  13. muduo学习笔记:base部分之高性能日志库-Logger
  14. c 循序结构程序设计
  15. AcWing 739. 数组选择
  16. android登录程序代码,android 应用软件注册与自动登录代码
  17. C语言表达式是运算符和,C语言之运算符和表达式
  18. Excel函数之— SUMPRODUCT用法(二),太强大了
  19. 在html中插入层,网页制作问题-在背景上添加一个或多个层(也就是层叠)是怎么做的?...
  20. 2022-2028全球急救和创伤单架行业调研及趋势分析报告

热门文章

  1. vscode自定义插件安装位置(蒙多,想去哪儿就去哪儿!)
  2. dojo.mixin、dojo.extend、dojo.declare
  3. 华为鸿蒙P10plus,华为P10/P10 Plus上手评测:多种配色亮眼 颜值大提升
  4. endnote插入中英文期刊参考文献混排以及模板下载
  5. java入门-五子棋游戏的制作
  6. NVIDIA重新铺货GT 1030/GTX 1650来解市场燃眉之急
  7. 计算机安全3a是什么,电脑中3A什么意思
  8. 推荐:每天工作4小时的程序员
  9. 浏览器console的用法
  10. js 跨 firefox ie 的复制,粘贴功能做法