0

私は私が抱えている問題について少し当惑していglOrtho()ます。私のコードは次の場合に機能します:

// Scenario 1
...
glOrtho(0, _width, 0, _height, 0, 1);
...
glRasterPos2i(0, 0);
...

ただし、この座標系には不満があります。使用したいのは次のとおりです。

// Scenario 2
...
glOrtho(0, _width, -_height, 0, 0, 1);
...
glRasterPos2i(0, -_height);
...

残念ながら、コードの上記の2行を変更するだけで、空白の画面が表示されます。私はOpenGlにかなり慣れていないので、どのようglOrtho()に動作するのか理解していないと思いました。そこで、次のことを試しました。glRasterPos2i()

// Scenario 3
...
glOrtho(0, _width, -_height, 1, 0, 1);
...
glRasterPos2i(0, -_height);
...

そして、驚いたことに、それはうまくいきました!どうしてこれなの?上記のコードは私の目的には不十分なので、問題を解決できない限り、シナリオ1を使用します。シナリオ1と3が機能する理由について誰かが洞察を持っていますが、シナリオ2は機能しませんか?私のウェブ検索によると、シナリオ2は機能するはずなので、何かを誤解しなければなりません。

それが役立つ場合はglDrawPixels()、画像を描画するために使用しています。ここで、_heightと_widthは画像の高さと幅です。

私はとを使用Windows 7してQt 4.7.4います。

さらに情報が必要な場合は、お知らせください。

glOrtho(0, _width, -_height, 0, 0, 1)編集:元のタイプミス。代わりに読み取る必要がありglOrtho(0, _width, _height, 0, 0, 1)ます。

4

1 に答える 1

1

ラスター位置はウィンドウの隅にあります。私の推測では、丸め誤差により、位置がクリップされる場合もあれば、クリップされない場合もあります。

答えはglWindowPos()、バージョン1.4で追加されたと思います。名前が示すように、モデルビューと投影行列の影響を受けずに、ラスター位置をウィンドウ座標に直接設定します。重要なのは、ラスター位置がウィンドウ境界上またはウィンドウ境界の外側にある場合でも、ラスター位置は常に有効であるということです。欠点は、を呼び出す前に自分で座標マッピングを行う必要があることですglWindowPos()

于 2012-08-08T19:22:30.217 に答える