2011-07-28 2 views
0

クリッピング:OpenGLの正投影が、私は関数reshapeこのようOrhographic投影を使用して、持っていると仮定すると、

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の限界パラメータに使用する定数値は、しかし、あなたのウィンドウのサブ部分へのレンダリングを制限する(glEnable(GL_SCISSOR_TEST)とイネーブル)glViewportglScissorを使用します。

ところで:レンダリング機能で投影とビューポートを設定する必要があります。リシェイプハンドラでそれを行うことはあまり意味がありません。深刻なOpenGLアプリケーションでは、レンダリング中に複数回投写モードを切り替えるので、最初からそのようにしてください。

関連する問題