Rendering from Vertex and Index Buffers (Direct3D 9)
2010-05-05 15:52
453 查看
Rendering from Vertex and Index Buffers (Direct3D 9)
Direct3D提供了索引和非索引两种绘制方式,索引方式使用一组索引(表示)所有的顶点组成,顶点数据是存储在顶点缓冲区中,索引数据是存储 在索引缓冲区中。下面是一小部分使用顶点缓冲区和索引缓冲区时所具有的公共说明。
这些例子比较IDirect3DDevice9::DrawPrimitive 和 IDirect3DDevice9::DrawIndexedPrimitive的使用方式。
Scenario 1: Drawing Two Triangles without Indexing
现在假如你要渲染下面这样的四边形:
如果你使用Triangle List 图元类型渲染两个三角形,每个三角形需要存储三个单独的顶点,最终的顶点缓冲区可能像这样:
绘图函数是很容易懂的;从顶点缓冲区的0位置开始,画两个三角形。如果裁剪是开启,顶点的使用顺序是很重要的。
这个例子我们假如默认裁剪状态是逆时针,所以可见三角形的渲染必须是顺时针的。 Triangle List 图元类型简单的从缓冲区顺序读取三个顶点为每一个三角形,所以画的三角形是(0, 1, 2)和(3, 4, 5):
DrawPrimitive( D3DPT_TRIANGLELIST, // PrimitiveType
0, // StartVertex
2 ); // PrimitiveCount
Scenario 2: Drawing Two Triangles with Indexing
你可能注意到了,顶点缓冲区包含了重复数据在0和4,2和5这些位置。这样产生场景是因为两个三角形共用了两个顶点。这些重复的数据是浪费的,顶点缓冲区能够压缩用索引缓冲区。一个减少了顶点数据的更小的顶点缓冲区送入了graphics adapter。更重要的是,使用索引缓冲区时允许适配器存储顶点在顶点缓存中,如果图元绘制时包含了一个刚使用过的顶点,顶点能够从缓存中取来而不是顶点缓冲区中,结果性能是一个很大的提升。
索引缓冲区(定位)顶点缓冲区,所以每一个单独的顶点只需要存储在顶点缓冲区一次。(下面是对上面一段的描叙):
索引缓冲区中存储的是VB Index 值,VB Index 引用的是顶点缓冲区中一个特定的顶点,一个顶点缓冲区可以看成是一组顶点,所以VB Index 可以看成是顶点缓冲区中一个目标顶点的索引(位置)。相同的,IB Index 是索引缓存区的一个索引。这个很容易让人迷惑,如果不仔细,所以确信你是清晰的对这些词汇:VB Index 的值是顶点缓冲区的索引,IB Index 的值是索引缓存区的索引,而索引缓冲区的值是VB Index 的值(具体看上图)。
绘制函数的使用方式是下面。所有参数的函数在下一段落中具体描叙,现在,你只要知道调用这个方法是要Direct3D渲染一个包含两个三角形的triangle list,开始位置在索引缓冲区是0。为了能绘出和上面相同的两个三角形,请记住要是顺时针的。
DrawIndexedPrimitive( D3DPT_TRIANGLELIST, // PrimitiveType
0, // BaseVertexIndex
0, // MinIndex
4, // NumVertices
0, // StartIndex
2 ); // PrimitiveCount
代码点击这
Scenario 3: Drawing One Triangle with Indexing
假定你现在只是想画第二个三角形,但你想使用画整个四边形时用到的顶点缓冲区和索引缓冲区。
代码点击这
Direct3D提供了索引和非索引两种绘制方式,索引方式使用一组索引(表示)所有的顶点组成,顶点数据是存储在顶点缓冲区中,索引数据是存储 在索引缓冲区中。下面是一小部分使用顶点缓冲区和索引缓冲区时所具有的公共说明。
这些例子比较IDirect3DDevice9::DrawPrimitive 和 IDirect3DDevice9::DrawIndexedPrimitive的使用方式。
Scenario 1: Drawing Two Triangles without Indexing
现在假如你要渲染下面这样的四边形:
如果你使用Triangle List 图元类型渲染两个三角形,每个三角形需要存储三个单独的顶点,最终的顶点缓冲区可能像这样:
绘图函数是很容易懂的;从顶点缓冲区的0位置开始,画两个三角形。如果裁剪是开启,顶点的使用顺序是很重要的。
这个例子我们假如默认裁剪状态是逆时针,所以可见三角形的渲染必须是顺时针的。 Triangle List 图元类型简单的从缓冲区顺序读取三个顶点为每一个三角形,所以画的三角形是(0, 1, 2)和(3, 4, 5):
DrawPrimitive( D3DPT_TRIANGLELIST, // PrimitiveType
0, // StartVertex
2 ); // PrimitiveCount
Scenario 2: Drawing Two Triangles with Indexing
你可能注意到了,顶点缓冲区包含了重复数据在0和4,2和5这些位置。这样产生场景是因为两个三角形共用了两个顶点。这些重复的数据是浪费的,顶点缓冲区能够压缩用索引缓冲区。一个减少了顶点数据的更小的顶点缓冲区送入了graphics adapter。更重要的是,使用索引缓冲区时允许适配器存储顶点在顶点缓存中,如果图元绘制时包含了一个刚使用过的顶点,顶点能够从缓存中取来而不是顶点缓冲区中,结果性能是一个很大的提升。
索引缓冲区(定位)顶点缓冲区,所以每一个单独的顶点只需要存储在顶点缓冲区一次。(下面是对上面一段的描叙):
索引缓冲区中存储的是VB Index 值,VB Index 引用的是顶点缓冲区中一个特定的顶点,一个顶点缓冲区可以看成是一组顶点,所以VB Index 可以看成是顶点缓冲区中一个目标顶点的索引(位置)。相同的,IB Index 是索引缓存区的一个索引。这个很容易让人迷惑,如果不仔细,所以确信你是清晰的对这些词汇:VB Index 的值是顶点缓冲区的索引,IB Index 的值是索引缓存区的索引,而索引缓冲区的值是VB Index 的值(具体看上图)。
绘制函数的使用方式是下面。所有参数的函数在下一段落中具体描叙,现在,你只要知道调用这个方法是要Direct3D渲染一个包含两个三角形的triangle list,开始位置在索引缓冲区是0。为了能绘出和上面相同的两个三角形,请记住要是顺时针的。
DrawIndexedPrimitive( D3DPT_TRIANGLELIST, // PrimitiveType
0, // BaseVertexIndex
0, // MinIndex
4, // NumVertices
0, // StartIndex
2 ); // PrimitiveCount
代码点击这
Scenario 3: Drawing One Triangle with Indexing
假定你现在只是想画第二个三角形,但你想使用画整个四边形时用到的顶点缓冲区和索引缓冲区。
代码点击这
相关文章推荐
- Vertex and Index Buffers在OGRE中的应用
- Using Dynamic Vertex and Index Buffers
- Vertex and Index Buffers在OGRE中的应用
- DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS
- Git CMD - rm: Remove files from the working tree and from the index
- leecode 解题总结:106. Construct Binary Tree from Inorder and Postorder Traversal
- lintcode-medium-Construct Binary Tree from Preorder and Inorder Traversal
- Debug Support from Process, Thread, and Exception Functions
- Getting Ordered Items and their Detail from Order ID in Magento
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- 【Leetcode】之Construct Binary Tree from Preorder and Inorder Traversal
- XSI Vertex Animation and OGRE Facial Animation
- [leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal
- leetcode Construct Binary Tree from Inorder and Postorder Traversal 难度系数3 3.38
- File System Redirector and Sysnative - how to call 64 bit program from 32 bit application
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
- boilerpipe(Boilerplate Removal and Fulltext Extraction from HTML pages) 源码分析
- react-native 启动的时候报错unable to load script from assets 'index.android bundle'
- show index from table命令各列的含义
- 用weex create 创建app项目 报 ERROR in index.web.js from UglifyJs 错误!