【问题标题】:Painting with libgdx makes blinking objects用 libgdx 绘画会使物体闪烁
【发布时间】:2012-05-31 21:40:28
【问题描述】:

我正在尝试使用 Libgdx 制作一个非常简单的绘画应用程序。我已经在 intertubes 上搜索了几天,试图解决这个问题,这可能是由于我的 openGL 新手。

当我在屏幕上绘制一个对象时,只要 render() 方法正在运行,我绘制的东西就会快速闪烁(我假设是每次调用 render() 方法时)。如果我禁用连续渲染,闪烁会停止,直到我绘制其他内容(同样,不会调用 render())。

假设我正在适当地将新纹理加载到 Sprite 中 - 它确实会绘制,毕竟 - 而我在 render() 方法中所做的就是这样:

batch.begin();
myShape.setPosition(Gdx.input.getX(), Gdx.input.getY());
batch.setColor(Color.BLUE);
myShape.draw(batch);
batch.end();

我没有调用 glClear 是因为我(我想我)不想在每次渲染时都清除屏幕。我盲目地尝试了各种 glEnable 和 glDisable 来进行剔除、混合、抖动等,但没有任何解决问题的方法。

我到底做错了什么,或者只是不理解这里?我没有设置正确的东西吗?

【问题讨论】:

  • 你知道双缓冲是否被启用了吗?我可以想象如果你不清除缓冲区会导致这样的症状。
  • 我认为双缓冲是默认启用的。不过,我不知道如何关闭它。清除缓冲区有什么帮助?

标签: android graphics opengl-es libgdx


【解决方案1】:

那是因为double buffering

启用双缓冲后,您不会在前一帧上绘制,而是在前一帧上绘制。这意味着,偶数帧和奇数帧被绘制到两个不同的缓冲区。更改这些缓冲区会导致闪烁。

我看到了三个解决方案:

  • 您可以禁用双缓冲。我不确定这在 libgdx 中是否可行。

  • 您可以清除屏幕并在每一帧中绘制所有内容。这会随着您的绘制而变慢。

  • 您可以将图像保存为纹理,然后在每一帧开始时将其绘制回屏幕。这是首选的解决方案,尽管它可能需要一些工作。这种技术称为“渲染到纹理”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2013-12-13
    • 2011-11-25
    • 2013-08-27
    相关资源
    最近更新 更多