1

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

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

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

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

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

4

1 回答 1

2

OpenGL 用于决定是否应渲染图元的逻辑

OpenGL 只使用一个逻辑来决定是否应该渲染图元。如果图元没有被剪裁/剔除,那么阻止它被光栅化的唯一方法是用户是否禁用了所有图元光栅化glEnable(GL_RASTERIZER_DISCARD)。否则,OpenGL 规范定义所有未作为裁剪的一部分剔除的图元都将被光栅化。

现在,它们是否会产生任何可见的效果是一个不同的问题。而且由于屏幕外的图元不能产生可见的效果(除非您正在使用图像加载/存储),因此符合要求的 OpenGL 实现可以随意剔除此类三角形。但更有可能的是,它将光栅化它们并简单地检查片段是否落在窗口之外。如果是这样,它将丢弃这些片段。

一般来说,这不应该是你应该关心的事情。只要设置一个合理的视口,你会没事的。

于 2013-01-10T04:59:20.580 回答