OpenGL正交投影剪辑

时间:2011-07-28 07:00:39

标签: opengl reshape orthographic

假设我使用Orhographic Projection,并具有这样的重塑功能:

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)的东西,我会看到那些不完全可见的对象(因为视口像窗口一样大)。 在正投影中是否有类似剪裁窗格的东西?

2 个答案:

答案 0 :(得分:1)

对glOrtho的限制参数使用常量值,但使用 glViewport glScissor (使用glEnable(GL_SCISSOR_TEST)启用)将渲染限制为子部分你的窗口。

BTW:您应该在渲染功能中设置投影和视口。在重塑处理程序中执行它没有多大意义。在任何严肃的OpenGL应用程序中,您都会在完整渲染过程中多次切换投影模式,所以从一开始就这样做。

答案 1 :(得分:1)

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

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