2

私は現在、5th Superbible で OpenGL を学んでいます。コアプロファイルを教えてくれます。しかし、私は本当に混乱しています。

khronos が 3.3 で固定関数パイプラインを削除し、一部の関数を非推奨として宣言したことは知っています。しかし、Superbible は現在、これらの非推奨の関数を独自の関数に置き換えているだけです。

なぜ khronos は glRotate や matrixstack などを削除して、公式のライブラリではなくサードパーティのライブラリ (または自分のライブラリ) を使用しなければならないのですか?

たぶん素晴らしいものに欠陥がありますか?

4

2 に答える 2

6

glRotate()などは削除されました。これは、内部でopenGLが行列を処理するため、行列を直接指定するだけでよりクリーンな設計になっているためです。

あらゆる複雑さのほとんどすべてのopenGLアプリは、とにかく他の多くのマトリックス処理を実行し、独自のマトリックスクラスを持ち、一連の回転/変換/スケールから結果を作成することを主張するよりも、openGLが結果を取得する方が簡単です。呼び出します。

独自のマトリックスクラスを提供することもできますが、使用できるサードパーティのライブラリはたくさんあります。openGLのポリシー(失敗)の1つは、実際のグラフィックス以外のことを行うためにサードパーティのライブラリに依存していることです。したがって、初心者向けプログラムは、GLUT、GLEW、SDLなどを組み合わせて画面に何かを表示するというトリッキーな組み合わせですが、DirectXにはすべてがすぐに使用できます。

于 2012-12-19T18:26:25.883 に答える
3

Khronos はこれらの機能をコア プロファイルから削除しましたが、互換プロファイルでは引き続き使用できます。主な理由は、パフォーマンスの 1 つです。

今日のほとんどのアプリケーションでは、レンダラーとアプリケーションの間でやり取りする必要がある情報の量は、10 年前よりも大幅に増えています。そのため、ARB は、メイン システムとレンダリング ハードウェアの間で利用可能な帯域幅を最大限に活用するためのバッファー (頂点配列と頂点バッファー オブジェクト) を考え出しました。ただし、VBO メカニズムを使用してデータを転送し始めると、レガシー関数のほとんどが役に立たなくなります。

とはいえ、互換性プロファイルの十分な理由であるレガシー アプリケーションをサポートする必要があること以外に、この API は学習目的にも役立つと思います。

あなたの主な質問に関しては、上記はOpenGLの本格的なバージョンでのみ有効であり、古いプリミティブをサポートしていないESバージョンでは有効ではなく、このコンテキストではエミュレーションレイヤーが必要です。

于 2012-12-19T18:55:12.053 に答える