现在的位置: 首页 > 综合 > 正文

一个新的地形

2012年02月08日 ⁄ 综合 ⁄ 共 852字 ⁄ 字号 评论关闭

  最近写的,把以前的代码改动了一下,现在这个地形算是基本完成了,基本技术采用的是GeoMipmap + 分块地形, 目前加载的是1024X1024 的高度图,帧率还可以,有60多帧,我的显卡是9300GS,这显卡也不太行。 今天本来打算将以前的大气渲染结合进来的,没想到半路碰到个问题一直没解决,在一个群里面问居然直接被踢了出来,难道这个问题太弱智了,我的顶点缓冲是固定的,然后是动态更新索引缓冲和三角形数目,最后发现调用DrawIndexedPrimitive()并没有提高多大的效率,就算primitiveCount = 1,效率也只有60多帧,而把DrawIndexedPrimitive()关掉就有500多帧,最后还是在一篇FAQ上面看到了答案

 

在我提交一列带索引的原语时,Direct3D 是处理缓冲区中所有的顶点,还是只处理我索引过的顶点?

在使用软件几何流水线 时,Direct3D 首先转换您所提交的范围中的所有的顶点,而不是“根据要求”按照索引对其进行转换。这对于密集数据(即其中使用了大多数的顶点)效率更高,尤其是在可以使 用 SIMD 指令时。如果您的数据比较松散(即很多顶点未被使用),则您可能需要考虑重新排列您的数据,以避免多余的转换。在使用硬件几何加速时,顶点经常是根据需要 进行转换的。 

 

这应该算是答案吧,他把我顶点缓冲中的所有顶点都转化完了然后再考虑索引值。最后改成 D3DCREATE_HARDWARE_VERTEXPROCESSING

帧率大概提高了4倍左右。

 

我也在考虑是不是动态创建VB会带来性能上的提升,这也要试试才知道,目前不太清楚。

 

 

                                                      地形大小 1024 X 1024 D3DCREATE_SOFTWARE_VERTEXPROCESSING

 

                                               地形大小 1024 X 1024  D3DCREATE_HARDWARE_VERTEXPROCESSING

抱歉!评论已关闭.