我想了解屏幕和逻辑之间的关系OpenGL用来决定是否应该呈现一个原语,即它是否在屏幕上。glViewport,窗口大小和剪辑
例如,假设您将视口设置为大于屏幕(没有理由这么做,但举例来说)。 OpenGL不会“知道”屏幕尺寸,所以只要正投影将它们放置在视口内,它就会“画出”屏幕上的点,是否正确?
但是,如果我将顶点位置定义在投影所确定的视口之外,OpenGL是否将其包含在渲染中?
glViewport(0,0,100,100);
ApplyOrtho(50,50); // custom ES 2.0 utility to apply 2D orthographic projection
现在位置顶点(75,75)
不会被OpenGL渲染,对不对?
有关这方面的更多技术说明,要查找的术语是“像素所有权测试”,这甚至超出简单的“在窗口范围内”测试。例如,一个封闭渲染窗口的窗口也可能会使其下方的片段失效,从而失败窗口所有权测试,然后OpenGL将丢弃这些片段。这是您在渲染到要存储的纹理或图像时应始终使用正确的屏幕外缓冲区的原因之一。 – datenwolf
@datenwolf:像素所有权测试(我在写这个答案时查找了它)并不适用于窗口以外的部分视口。它仅适用于操作系统特定的不可见部分窗口条件(窗口部分不在屏幕上,或者另一窗口部分遮挡窗口等)。请注意,在呈现给FBO时,所有片段*都会传递像素所有权测试。 –
据我了解,负责放弃延伸到窗口限制之外的视口片段的代码路径与像素所有权测试代码共享很多。 – datenwolf