1

画面構成について質問です。もともと私が三角形を描くとき、​​x ベクトル 1 はずっと右にあり、-1 はずっと左にありました。これで、ウィンドウのさまざまな縦横比を考慮して調整しました。私の新しい質問は、2d tri をレンダリングするために使用される数値をピクセル値と一緒にするにはどうすればよいですか。私のウィンドウが幅 480 ピクセル、高さ 320 ピクセルの場合、これを入力して、画面全体を三角形でスパンする必要があります。

glBegin(GL_TRIANGLES);
    glVertex2f(240, 320);
    glVertex2f(480, 0);
    glVertex2f(0, 0);
glEnd();

代わりに、現在は次のようになっています

glBegin(GL_TRIANGLES);
    glVertex2f(0, 1);
    glVertex2f(1, -1);
    glVertex2f(-1, -1);
glEnd();

何か案は?

4

2 に答える 2

0

コードの 2 番目の部分が機能しているので、変換マトリックスがすべて同一であるか、それらをバイパスするシェーダーがあると仮定します。また、ビューポートはウィンドウ全体に広がっています。

一般に、ビューポートが ( x0,y0)から始まり、サイズがWxの場合、フィード先の正規化された座標 ( )は次のように ( ) に変換されます。Hx,yglVertex2fvx,vy

vx = x0 + (x * .5f + .5f) * W
vy = y0 + (y * .5f + .5f) * H

ピクセル座標を使用したい場合は、関数を使用できます

void vertex2(int x, int y)
{
    float vx = (float(x) + .5f) / 480.f;
    float vy = (float(y) + .5f) / 320.f;
    glVertex3f(vx, vy, -1.f);
}

-1 の z 値は、視聴者に最も近い深度です。z は変換後に反映されると想定されるため、負です(これはあなたの場合は同一です)。の追加.5fは、ラスタライザーがピクセルを 1x1 四角形と見なし、この四角形の中央にある三角形の範囲を評価するためです。

于 2013-06-22T22:34:07.763 に答える