0

Orhographic Projection を使用し、次のような reshape 関数があると仮定します。

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) より大きな縦横比の何かにスケーリングすると、オブジェクトが表示されますが、完全には表示されません (ビューポートがウィンドウのように大きいため)。正投影で切り抜き枠のようなものはありますか?

4

2 に答える 2

1

glOrtho の制限パラメーターには定数値を使用しますが、glViewportglScissor (で有効化glEnable(GL_SCISSOR_TEST)) を使用して、レンダリングをウィンドウの一部に制限します。

ところで:レンダリング関数で投影とビューポートを設定する必要があります。reshape ハンドラでそれを行うのはあまり意味がありません。本格的な OpenGL アプリケーションでは、フル レンダリング中に投影モードを数回切り替えるため、最初からそのように行ってください。

于 2011-07-28T07:09:27.477 に答える
1

[glScissor][1]必要なのは、レンダリングされた領域が特定のサイズを超えないようにするために使用することです。glScissorウィンドウ座標で四角形を取ります (ウィンドウ座標の原点は左下にあります)。シザー テストは、この領域外のフラグメントの生成を防ぎます。

シザー テストを有効にするには、 を使用する必要がありますglEnable(GL_SCISSOR)。そうしない限り、上記の呼び出しは実際には何もしません。

于 2011-07-28T07:09:30.943 に答える