• Rendering from Vertex and Index Buffers (Direct3D 9)


    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

      假定你现在只是想画第二个三角形,但你想使用画整个四边形时用到的顶点缓冲区和索引缓冲区。

    代码点击这

  • 相关阅读:
    hugo博客使用 utterances 作为评论系统
    使用DEM生成彩色的立体图像
    hibernate Annotation 注解形式 实例 事务 hibernate.cfg.xml
    web.xml配置webAppRootKey 的问题
    JAVA 生成二维码 代码
    关于Boost库的split函数在不同的编译器下的使用
    纯 hibernate hibernate.cfg.xml 事务 数据库操作 CRUD
    Android 百度地图API 定位 导航 代码
    Android GPS
    使用GDAL对DEM进行彩色渲染
  • 原文地址:https://www.cnblogs.com/lancidie/p/1621402.html
Copyright © 2020-2023  润新知