【发布时间】:2014-03-17 12:39:44
【问题描述】:
我正在尝试制作一个暂停屏幕,将 3D 场景的最后一帧渲染为纹理,在上面我将渲染一个带有半 alpha 和一些文本的黑色矩形。 我认为使用 ...
ScreenUtils.getFrameBufferTexture()
... 是最简单的选择,但是纹理缺少此属性的模型...
BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
...在屏幕截图中根本不会呈现。
例子:
为什么会这样?
【问题讨论】:
-
我认为黑色矩形过度绘制了
Textures,没有添加混合,你想要什么。我认为您必须将此BlendingAttribute设置为Material,但我是libgx 的新手,所以我不确定。无论如何,而不是使用getFrameBufferTexture(),您可以简单地在您的班级中持有int state,如果state == STATE_PAUSED您只是不更新对象的位置、旋转...。所以你仍然可以渲染,就像游戏没有暂停一样,并用你的文本和黑色矩形覆盖它 -
我删除了渲染矩形的代码,它一直在发生同样的事情。无论如何,我认为这是一个好方法,谢谢!我可以按照你说的来暂停游戏,但我想充分利用 libgdx 的屏幕。
-
用我的方法不需要
PauseScreen,我认为这不会更糟。在我看来,只有当您使用的视图和资源完全改变时,才需要使用Screen。在你的情况下,我不会使用另一个Screen。但那是你的选择(:另一个想法,我想到了:你用一些光/环境渲染场景吗?也许FrameBufferTexture不关心它们? -
确保每晚更新到最新版本,有一个相关问题不久前已修复。
-
好的,就是这样,解决了!经典技巧
标签: opengl 3d libgdx screenshot