2011-07-28 89 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應用程序中,您將在完整渲染過程中多次切換投影模式,所以請從一開始就這樣做。