2011-07-28 88 views
0

假设我用Orhographic投影,并有一个重塑功能是这样的:OpenGL的正投影剪辑

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)更大的纵横比的东西上,我会看到物体,不能完全可见(因为视口非常像窗口)。 在拼写投影中是否有像裁剪窗格那样的东西?

回答

1

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

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

1

使用glOrtho极限参数不变的值,但使用glViewportglScissor(与glEnable(GL_SCISSOR_TEST)启用),以限制渲染到你的窗口的子部分。

顺便说一句:你应该在渲染函数中设置投影和视口。在重塑处理程序中做它没有太大意义。在任何严肃的OpenGL应用程序中,您将在完整渲染过程中多次切换投影模式,所以请从一开始就这样做。