glViewport,窗口大小和剪裁

时间:2013-01-10 04:34:26

标签: opengl opengl-es

我试图理解屏幕和OpenGL用来决定是否应该渲染图元的逻辑之间的关系,即它是否在屏幕上。

例如,假设您将视口设置为大于屏幕(没有理由这样做,但为了示例)。 OpenGL不“知道”屏幕大小,所以只要正交投影将它们放在视口中,它就会“拉”出屏幕上的点,对吗?

但是,如果我将顶点位置定义为由投影确定的视口外,OpenGL是否将其包含在渲染中?

  glViewport(0,0,100,100);
  ApplyOrtho(50,50); // custom ES 2.0 utility to apply 2D orthographic projection

现在,位置(75,75)的顶点不会被OpenGL渲染,对吗?

1 个答案:

答案 0 :(得分:2)

  

OpenGL用于决定是否应该呈现基元的逻辑

OpenGL只使用一段逻辑来决定是否应该渲染基元。如果原始图像尚未被剪切/剔除,那么唯一阻止光栅化的原因是用户已使用glEnable(GL_RASTERIZER_DISCARD)禁用所有原始光栅化。否则,OpenGL规范定义所有原语未被剔除作为剪辑的一部分将被栅格化。

现在,他们是否会产生任何可见效果是一个不同的问题。并且由于屏幕外的原语不能产生可见的效果(除非你使用图像加载/存储),如果需要,一致的OpenGL实现可以自由地剔除这样的三角形。但更有可能的是,它会栅格化它们,只需检查片段是否落在窗口之外。如果确实如此,它就会丢弃这些碎片。

一般来说,这不应该是你应该关注的事情。只需设置一个合理的视口,你就可以了。