0

我正在开发一个窗口化的 Direct3D 数据绘图应用程序,该应用程序需要在数据之上显示多个叠加层(类似于游戏中的 HUD)。由于可能需要绘制大量数据,并且并非每次都更改所有覆盖,因此我认为当显示中只有一个覆盖更改时重新绘制顶点不是一个好主意。

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

在我着手更改该程序的大部分内容以渲染纹理而不是表面之前,我只是想知道使用纹理是否是最好的方法。

4

3 回答 3

0

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

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

于 2010-07-23T08:41:40.877 回答
0

RTT 效果很好,我在最近做的一个游戏中使用了它。每个场景(场景指的是图层,“HUD”是一个场景,“Main”是主场景等等)被渲染到一个纹理上,然后每个纹理被渲染到一个四边形上,从后到前排序(用于 alpha 混合)。我选择了这个而不是直接将场景渲染到后台缓冲区,因为它允许我进行后期处理。

出于缓存的目的,这似乎是最好的方法,但请注意,纹理会很快消耗内存,有时最好再次渲染所有内容,确保从前排序。

于 2009-06-08T22:59:02.223 回答
0

渲染到纹理肯定会起作用,并且可能是一条不错的路线,但它可能有点矫枉过正。现代 3D 硬件非常快,我建议您在需要更新之前验证性能是否真的是一个重新渲染的问题,然后再投入大量时间对程序进行重大更改。

如果性能是一个问题,您的时间可能最好花在优化渲染绘图的代码上,因为这将有利于涉及数据更改的更新以及仅更改覆盖的更新。我是一名游戏图形程序员,通常对于实时 3D,您希望将优化工作集中在最坏的情况(您必须重绘所有内容)而不是最好的情况(只有一个叠加层需要更新)。

于 2009-07-16T00:15:25.330 回答