翻译《real-time 3d terrain engines using C++ and DX9 》(6)

本文探讨了索引缓存和顶点缓存在游戏引擎中的应用,特别是它们如何用于处理动态数据。文章介绍了动态缓存的概念及其实现方式,包括如何通过滑动窗口方案减少DMA操作的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
索引缓存和顶点缓存
       索引缓存和顶点缓存资源在例子引擎中使用得非常频繁,并且把他们作为独立资源是很有用的。对我们引擎的大部分数据来说,在那些传统模型不提供索引和顶点缓存的时候保留他们然后在某个时候覆盖整个模型符合我们的基本要求。索引和顶点缓存对于动态数据特别有用,当使用设备依赖资源的时候他们必须被很小心的处理。使用动态顶点和索引缓存使我们能够随时建立几何体或者在CPU上动画已经存在的物体。在我们构建地形引擎的时候,我们使用这两种办法。
       澄清下,我们所说的动态(dynamic)意味着完全代替。锁定一个顶点或索引缓存来改变一些随机的值将在大多数显卡上产生交错的糟糕的表现。因此我们在我们的接口中对这些资源不支持这种行为。在我们的引擎中,我们在每次需要更新的时候将整个动态缓存全部替代。这让驱动能够维护一个单方向的动态数据。一旦数据背传送到显卡,将不再试着将数据读入系统内存去更新某些特殊值。
       类对象cVertexBuffer和cIndexBuffer提供我们的缓存需要的基本操作。这些对象同时包含我们的常规缓存和动态缓存。为了支持动态(可以认为是代替)缓存数据,我们使用一个NVIDIA和Microsoft共同认可的最好的方法来更新动态数据。
       这个函数使用一个特大的缓存来存放动态数据。例如,如果你的动态数据由10个顶点组成,你将会创建一个能够容纳100个数据的动态缓存。利用这个大空间,你可以每次只使用10个顶点数据。在第一帧,你使用顶点0~9,索引10~19在第二帧被使用,然后继续下去。当你使用完所有的空间,整个缓存的内容都会被销毁,然后从0号顶点开始处理。这个滑动窗口计划(sliding window scheme)被认为使用起来是很友好的,因为它能导致最少数目的直接内存访问(Direct Memory Access ,DMA)操作被打断。清单4.5展示了基于在Microsoft DirectX9 Developer FQA中列出的算法伪码。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值