我试图使用 GetFrontBufferData 方法保存 .tga 图像,但是 alpha 值丢失了。它们完全是一个。我可以从 RenderTarget 或 BackBuffer 获得正确的 alpha 值,但不是 rgb 值不正确。即使是现在的场景也可以立即显示,backbuffer 似乎仍然比 frontbuffer 暗。
现在我得到 2 个问题:
Q1:FrontBuffer 有 alpha 值吗?
Q2:当你尝试渲染透明的东西时,后台缓冲区和前台缓冲区的数据有什么区别?
问问题
253 次
1 回答
0
渲染透明对象时,其 alpha 值用于执行 alpha 混合。混合完成后,将新值写入后台缓冲区。如果要保留 alpha 值,则后台缓冲区的格式应为D3DFMT_A8R8G8B8
. 您还应该记住在调用时清除 Alpha 通道IDirect3DDevice9::Clear()
。渲染完成后,简单地翻转后缓冲区和前缓冲区指针(阅读更多)。因此,两个缓冲区具有相同的格式(因此,如果您使用 RGBA 格式创建后缓冲区,则前缓冲区也将是 RGBA)。顺便说一句,您可以获取后端缓冲区并将其锁定,而不是获取前端缓冲区。
默认情况下,Alpha 混合在 R、G、B 和 A 通道上执行相同的操作,但您可以仅为 Alpha 通道指定单独的操作 -请参阅此。
于 2012-06-28T21:51:14.907 回答