2009-06-08 69 views
0

我正在开发一个窗口化的Direct3D数据绘图应用程序,需要在数据顶部显示多个叠加层(类似于游戏中的HUD)。由于可能存在大量需要绘图的数据,并且不是每次都会改变所有覆盖图,所以我认为在显示中只有一个覆盖图发生改变时重新绘制垂直图并不是一个好主意。如何在Direct3D9中实现独立的渲染层?

这让我想到了将叠加层的纹理和顶点渲染为具有透明背景的多个纹理,这些背景可以叠加在渲染循环中并独立更新(类似于Photoshop中的图层)。

在我开始改变这个程序的大部分渲染纹理而不是曲面之前,我只是想知道使用纹理是否是最好的方法。

回答

0

RTT运行良好,我在最近做过的游戏中使用它。每个场景(场景指的是图层,“HUD”是场景,“Main”是主场景等)被渲染到纹理上,然后每个纹理渲染到四边形上, )。我选择这个只是将场景直接渲染到后台缓冲区,因为它允许我进行后期处理。

为了缓存目的,这似乎是最好的方式,但要注意纹理可以快速记忆内存,有时它更好地再现所有内容,确保将其重新排列。

0

渲染纹理肯定会工作,可能是一个很好的路线,但它可能是矫枉过正。现代3D硬件速度非常快,我建议您在投入大量时间对您的程序进行重大更改之前,先验证性能是否真的是需要更新时重新呈现的问题。

如果性能问题您的时间可能会更好地用于优化渲染您的阴谋的代码,因为这将有利于涉及数据更改的更新以及仅更改覆盖的更新。我是游戏的图形编程人员,通常使用实时3D,您希望将最佳工作重点放在最糟糕的情况(您必须重新绘制所有内容),而不是最好的(只有一个重叠需要更新)。

0

渲染纹理渲染目标表面是一个非常好的主意,可以用于很多事情,例如,优化/缓存,但要注意与常规alpha(a * c1 +(1-a)* c2)的混合操作;如果@是ARGB混合,则l1 @ l2 @ l3!= l3 @ l1 @ l2;即它不是可交换的,但通过在所有纹理/图层中使用预乘α,混合操作可以交换。

最终参考文献是Porter/Duff在1984年撰写的文章“合成数字图像”。