如果要画一个如下图的四边形,是不是应该很简单呢?
给这4个顶点标个序号,这个需要也是顶点信息传入buffer的顺序。
左上:0 右上:1 左下:2 右下:3
在DX11中Draw的方式有很多种,但是大致可以分为两类:根据顶点绘制图形和根据索引绘制图形。顶点是可以直接绘制图形的,但是大部分情况下我们还是使用索引绘制,这是因为绘制时有些顶点可能会重复使用。
图形绘制的规则是由D3D11_PRIMITIVE_TOPOLOGY(原语)控制的,原语的枚举信息是在IA阶段传入渲染管线的,在VS之后的primitive(体元)信息处理阶段会根据枚举的类型,对顶点进行组装,组装成基本的几何体元。最基本的几何体元有点,线,三角形。
这里我们只讨论以三角形为体元,画四边形,使用的是索引绘制的方式。主要是列举不同的原语类型时,顶点与索引的关系。
1.STRIP:D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP
STRIP这种类型的原语,在组装几何体元的时候,它采用一种重叠的方式 012 123,所以如果使用这种方式绘制四边形,顶点和索引的个数相等都是4个。索引传递的顺序是0 1 2 3 而不是 0 1 3 2,这里0123中012是顺时针方向的三角形,而3是一个单独的,这里的算法我也不太理解,它是怎样处理第二个三角形的。但是不能是0132这种四个顶点顺时针的那种,反正吧,这样记住就行了,因为微软也不会对你做任何的解释,规则就是这样的。(左上 右上 左下 右下)
这里需要补充一点的是,绘制的时候有一个过程叫做背面剔除,而面向视点时,如果三角形的三个顶点是以顺时针顺序绘制的,那么这个三角形就是面向视点的也就是正面,反之就是背面。这也是上面的顺序为左上 右上 左下 右下的原因。
2.LIST:D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST
LIST与STRIP的最大区别就是顶点不共用,每个三角形的绘制都是顶点不共用的,这样画四边形的时候,顶点的个数为4,而索引的个数为6。这也是索引的好处,减少了顶点的重复次数,当然索引的好处不只是这些。这样在绘制的时候就是012 213这是顶点的顺序,索引跟顶点的对应关系:0:0 1:1 2:2 3:2 4 :1 5:3。
3.三角形细分:D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST
所有的CONTROL_POINT_PATCH都是用来做Tess的
这个是三个控制点,虽然它并不一定是用来绘制三角形的,但是它可以绘制三角形 - -。三个控制点tess分的时候就是对三角形进行细分,也正好是三个点。所以,体现到顶点上来,其实是跟LIST是一样的。因为是每个三角形作为单位进行细分的。
4.四边形细分:D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST
四边形细分是以四边形为单位的,也就是说每次细分的时候,有四个顶点参入。当然了,本质上来说你在细分的时候可以对这四个顶点做任意的控制。这个的意思是传入4个控制点,而四边形要表示成2个三角形,如果只是有4个控制点的话,那么肯定只能选择STRIP这种方式了。所以,索引的顺序与STRIP是一致的。
这里也可以延伸一下,体元里面只有点,线,面这三种元素。点是肯定不需要细分的,而线和面还是需要的。这个时候对于每次细分传入的控制点的数量可以是0-32的,也就是说,没人规定细分三角形的时候只能使用3个控制点。当你使用四个控制点的时候,完全可以做到细分四边形,细分四边形其实就是组合细分2两个三角形而已。同理,你也可以传入6个控制点来细分四边形。也可以传入更多来细分更复杂的多边形。
总结:本篇的目的是理清一下顶点,索引以及体元之间的关系。这也是自己在tess的时候,通过多次试探的一点点经验的总结。
1.模型是由点绘制的,而这里的点可以有多种表现形式,顶点,索引,控制点。索引并不是完全依附于顶点的,它只是像指针一样指向某个顶点的位置,这个位置是由顶点输入的顺序决定的。在使用索引绘制的时候,尽管它指向了一个顶点,但是这个顶点并不需要一定存在。你可以在VS里面通过索引ID来计算出点的位置,也可以通过索引的值也就是顶点ID来计算出点的位置,这样只要你没有用到顶点的描述信息,顶点是可以不用传入到管线的。
2.tess的时候有些常用的用法,如果我们不去发散的思考,或许只会停留在那些常见的使用方式。但是,事实上tess是一个很灵活的东西,从它的输入信息仅仅是一个个独立的控制点就可以看出。具体的扩展性的用法,以后再研究,暂时还不知道UV信息是否会对它产生约束。至少PN的时候已经用到了多个顶点了。
相关推荐
个人博客中讲OpenGLES入门课程的第10章,关于drawElements和vertex buffer以及index buffer的代码
Vertex Shader Instructions 顶点着色器指令集
顶点缓存数组(Vertex Buffer Object)的示例程序 VBO允许把顶点数据存储在GPU缓存中,并且只传输一次,前提是有足够的内存资源可以保存这些顶点数据。
快速设置面、顶点或对象的顶点颜色 将顶点颜色映射到所有选定对象中的材质 从纹理烘焙顶点颜色! 按颜色拆分 Use vertex paint colors as a form of grouping and organization Use vertex paint in materials and/...
vertex-theme, 顶点是 GTK 3 GTK 2.Gnome shell 和肉桂的主题 顶点主题顶点是 GTK 3 。GTK 2.gnome外壳和肉桂的主题。 它支持基于 GTK 3和 GTK 2的桌面环境,包括 Gnome 。肉桂。Mate 。Budgie 。等等 。主题,包括...
vertex-icons, 与Vertex主题匹配的Gnome icon 主题 顶点图标( 测试版)注意:这是一个未完成的测试版。 在某些情况下,它可能无法正常工作。顶点 icon 主题被设计成与顶点Gtk主题很好地结合在一起。 目前它主要包括...
用来查找顶点序号 以及邻接点 顶点的最大个数 typedef struct //定义顶点类型 { int num; //顶点序号 char data; //顶点信息 }VERTEX; typedef struct //定义图的类型 { int n; //定点数目 int e; //边或弧的...
Vertex AI:Google Vertex AI 是一套机器学习工具和服务的集成套件,用于构建和使用带有 AutoML 或自定义代码的 ML 模型。它为新手和专家提供了适用于整个机器学习开发生命周期的最佳工作台。 快速开始 为了使用这...
DirectX 3D HLSL高级实例精讲_VertexShader深入探讨
* 基于邻接边表实现图的顶点结构 */ package dsa; public class Vertex_List implements Vertex { //变量 protected Object info;//当前顶点中存放的数据元素 protected Position vPosInV;//当前顶点在所属的...
添加shaders:顶点着色器和片段着色器 编译 Vertex shader 和 Fragment shader
顶点覆盖 在葛霞的指导下,拉斐特学院正在进行的顶点覆盖研究。
Vertex Component Analysis:A Fast Algorithm to Vertex Component Analysis:A Fast Algorithm to Vertex Component Analysis:A Fast Algorithm to
Unity Shader - Vertex and fragment shader examples 顶点和片段着色器的例子-附件资源
Xilinx Vertex-6系列芯片配置文档
最新的vca的改进方法 vertex component analysis
顶点成分分析的文章,vca做高光谱端元提取
第六节:图(上)6.1 图1.关于图图表示的是“多对多”的关系。它包含:(1)一组顶点:通常用 V(Vertex)表示顶点集合。(2)一组边:通常用 E(Edg
半导体行业 vertex有毒气体侦测器说明书,1998M0391 Vertex manual ENG rev20
顶点成分分析求解高光谱、多光谱数据的端元曲线