【问题标题】:OpenGL Orthographic Projection ClippingOpenGL正交投影裁剪
【发布时间】:2011-10-14 20:55:54
【问题描述】:

假设我使用正交投影,并且有这样的重塑功能:

void reshape(f32 width, f32 height){
    aspect = width/height;
    glViewport(0, 0, width, height);
    // guaranted 960x640 HUD canvas
    if(640*aspect>=960){
        ortho.x = 640*aspect;
        ortho.y = 640;
    }else{
        ortho.x = 960;
        ortho.y = 960/aspect;
    }
    glOrtho(0, ortho.x, ortho.y, 0, -1.0f, 1.0f);
}

我如何确保所有顶点 >ortho.x 或 >ortho.y(通常在屏幕外)都没有被绘制? 因为如果我将窗口缩放到比 1.5f (960/640) 更大的纵横比,我会看到这些对象,这不应该是完全可见的(因为视口像窗口一样大)。 正交投影中是否有类似于剪贴板的东西?

【问题讨论】:

    标签: opengl reshape orthographic


    【解决方案1】:

    您想要的是使用[glScissor][1] 来确保渲染区域永远不会超过一定的大小。 glScissor 在窗口坐标中取一个矩形(记住:窗口坐标的原点在左下角)。剪刀测试可防止在该区域之外产生碎片。

    要激活剪刀测试,您必须使用glEnable(GL_SCISSOR)。除非你这样做,否则上面的调用实际上不会做任何事情。

    【讨论】:

      【解决方案2】:

      对 glOrtho 的限制参数使用常量值,但使用 glViewport 和 glScissor(通过 glEnable(GL_SCISSOR_TEST) 启用)将渲染限制在窗口的子部分.

      顺便说一句:您应该在渲染函数中设置投影和视口。在重塑处理程序中执行此操作没有多大意义。在任何严肃的 OpenGL 应用程序中,您都会在完整渲染期间多次切换投影模式,所以从一开始就这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-08
        • 2014-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2013-11-26
        • 2021-05-30
        相关资源
        最近更新 更多