【问题标题】:OpenGL: How to clear only a part of the screen?OpenGL:如何只清除屏幕的一部分?
【发布时间】:2016-03-02 19:31:17
【问题描述】:

使用 glClear() 函数时是否可以不清除整个屏幕?我只需要清除屏幕的一部分以节省一些渲染时间,否则我将不得不每帧重绘一半屏幕,即使另一半没有发生任何事情。

当然,这应该像现在 glClear() 一样快(或更快)完成。

【问题讨论】:

  • 只是一个想法:你能将视口设置为屏幕的一半吗?
  • @chris_l:视口不影响清除。

标签: c++ opengl


【解决方案1】:

您可能想研究一下 glScissor。来自文档:

启用剪刀测试后,只有剪刀框内的像素可以通过绘图命令进行修改。

【讨论】:

  • 具体来说,来自 Clear 文档:[...],剪刀测试,[...] 影响 glClear 的操作。 +1。
【解决方案2】:

要仅清除特定的矩形区域,请启用ScissorTest 并调用Clear。启用后,只有剪刀框内的像素会受到绘图命令的影响,所以当您需要再次修改外部区域时,请禁用ScissorTest

OpenTK 示例:

GL.Enable (EnableCap.ScissorTest);
GL.Scissor (ViewportX, ViewportY, ViewportWidth, ViewportHeight);
GL.Clear (ClearBufferMask.ColorBufferBit);
GL.Disable (EnableCap.ScissorTest);

【讨论】:

    【解决方案3】:

    画一个巨大的四边形 :) 将它应用到一半的屏幕上。

    http://www.opengl.org/resources/faq/technical/transformations.htm#tran0090

    【讨论】:

    • 绘制四边形是不是有点太慢了?
    • @Newbie 有测量结果表明剪刀式清除比四边形绘制更快吗?我希望 draw 是主要的优化路径。我希望 scissor clear 在假设的土地上是一个遥远的角落。顺便说一句,我也不是说绘图更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2011-10-01
    • 2014-08-10
    相关资源
    最近更新 更多