3

OpenGL の違いは何ですか? OpenGL 3.x 以降、OpenGL を好まない人がいると聞きましたが、どうなりましたか? OpenGL を学びたいのですが、どの OpenGL かわかりません。新しいバージョンで素晴らしいグラフィックが欲しいのですが、何がそんなに悪いのですか?

4

4 に答える 4

4

一般に、OpenGL のすべてのメジャー バージョンは、ハードウェア世代とほぼ同じです。つまり、通常、OpenGL 3.0 カードを実行できる場合は、OpenGL 3.3 も実行できます (十分に新しいドライバーがあれば)。

OpenGL 2.x は DX9 対応世代のハードウェア、OpenGL 3.x は DX10、OpenGL 4.x は DX11 世代のハードウェアです。100% 正確な重複はありませんが、これは一般的なことです。

OpenGL 1.x は、概念的に非常に使いやすい即時モードと、厳密に固定された関数パイプラインを中心に展開しています。学ぶ必要があることはほとんどなく、間違いを犯す可能性もほとんどないため、参入障壁は非常に低くなります。
欠点は、かなり多くのライブラリ呼び出しがあり、このモデルでは CPU と GPU の並列処理が最適ではないことです。これは、古いハードウェアではそれほど重要ではありませんが、新しいハードウェアで最高のパフォーマンスを引き出すためにますます重要になっています。

OpenGL 1.5 から始まり、2.x で徐々に増加し、即時モードから保持モードへのわずかなパラダイム シフトがあります。つまり、バッファ オブジェクトとある程度プログラム可能なパイプラインを使用します。頂点シェーダーとフラグメント シェーダーが利用可能で、さまざまな機能セットとプログラミングが可能です。
これらのバージョンの機能の多くは (多くの場合、ベンダー固有の) 拡張機能を介して実装されており、時には途中までしか実装されていなかったり、いくつかの異なるステップで実装されていたり、カジュアルなプログラマーにとって明白でない制限や落とし穴がいくつかの機能にありました (例: レジスタ コンバイナー、分岐の欠如、命令と依存テクスチャ フェッチの制限、ゼロフェッチをサポートする vtf サポート)。

OpenGL 3.0 では、fixed 関数は廃止されましたが、下位互換機能として引き続きサポートされています。「最新の OpenGL」のほぼすべてが OpenGL 3.x のコア機能として実装されており、明確な要件と保証があり、(ほぼ) 完全にプログラム可能なパイプラインがあります。プログラミング モデルは、保持モードとシェーダーの使用に完全に基づいています。頂点シェーダーとフラグメント シェーダーに加えて、ジオメトリ シェーダーを使用できます。
バージョン 3 は多くの否定的な批判を受けていますが、私の意見では、これは完全に公平ではありません。出産プロセスは確かにPRの大失敗でしたが、出てきたものはすべて悪いわけではありません. 以前のバージョンと比較すると、OpenGL 3.x は至福です。

OpenGL 4.x には追加のテッセレーション シェーダー ステージがあり、OpenGL 3.x 互換のハードウェアには存在しないハードウェア機能を必要とします (あえて言えば、技術的な理由ではなくマーケティング上の理由です)。古いハードウェアでは処理できない新しいテクスチャ圧縮形式もサポートされています。
最後に、OpenGL 4.x では、基盤となるハードウェアに関係なく、いくつかの API が改善されています。これらは OpenGL 3.x でも 100% 同一のコア拡張として利用できます。

全体として、OpenGL を学び始めるすべての人に、すぐにバージョン3.3 (Apple を使用している場合は 3.2) から始めることをお勧めします。

OpenGL 3.x と互換性のあるハードウェアは、今日ではほとんどどこにでもあります。古いものを想定する正当な理由はなく、多くの苦痛を省くことができます。経済的な観点から、古いものをサポートすることは意味がありません。エントリー レベルの GL4 カードは現在約 30 ドルです。したがって、GL3 カードを購入する余裕がない人は、ソフトウェアにお金を払うこともできません (ただし、2 つのコード パスを維持するには 2 倍の労力が必要です)。
また、最終的には最新の OpenGL を使用する以外に選択肢がなくなるため、1.x/2.x から始める場合は、後で学習をやめて新たに学習する必要があります。

一方、バージョン 4.x に飛び込むことは可能ですが、当面はお勧めしません。API でハードウェアに依存しないものはすべて 3.x でも利用できます。また、テッセレーション (または計算シェーダー) は、通常、一度に厳密に必要とされるものではなく、後でいつでも追加できるものです。

于 2012-12-14T09:50:16.637 に答える
1

変更の正確なリストについては、各 OpenGL メジャー バージョンの最新の仕様ドキュメントをダウンロードすることをお勧めします。これらのそれぞれの最後に、バージョン間の変更点を詳細に文書化したいくつかの付録があります。

于 2012-12-14T08:57:29.270 に答える
0

OpenGL 3.1 では、「固定機能パイプライン」が削除されました。これは、頂点シェーダーとフラグメント シェーダーの作成がオプションではなくなったことを意味します。何かを表示したい場合は、それらを作成する必要があります。これにより、初心者が OpenGL で「hello world」を書くのが難しくなります。

OpenGL Superbible Rev 5は、固定関数パイプラインに頼ることなく、最新の OpenGL を使用する方法を適切に教えてくれます。OpenGL をゼロから学習する場合は、ここから始めます。

より「歴史的な」アプローチから始めたい場合、rev 4 はまだ固定関数パイプラインをカバーしています。

于 2012-12-14T02:18:02.127 に答える