今日、OpenGL 2.1の学習は役に立ちませんか?


44

3D OpenGL / DirectXの世界は初めてで、OpenGL 4.1とGLSLの仕様が本日リリースされたことがわかりました。

私の友人がOGL v2.1のレッドブックをくれましたが、私が読んだ限りでは、3.xと4.xは2.xとは大きく異なり、多くのものが非推奨になりました。

この本を使用して3DおよびCGの基本を学習し始めることはできますか、それとも新しいコピーを見つける方が良いですか


10
OpenGL / DirectXについてはあまり知りませんが、1年以上前のマシンでゲームを楽しんでいます。3.x以前のOpenGLを知っていることは、私のゲーム習慣にとって有益だと思います。ちょっとした考え。
-Simurr

この質問の言い回しが好きではありません。 OpenGL 2.1でゲームを作成できますか?答え:決定的なはい役に立たないとはどういう意味ですか?古い本や時代遅れのAPIから3Dの基本を学ぶことができますか?再び決定的なはい。それはそれを行うための最高の最善の方法ですか?おそらくない
ボボボボ

回答:


18

このような時代では、私はいつもスチームハードウェアの調査に向かう:http://store.steampowered.com/hwsurvey/ -あなたはDX10 / 11クラスのシステムの市場浸透のほぼ80%であるが表示されます。これは、GL3.3以上とほぼ同等です。この80%はVista / 7ユーザーに制限されています-XPでDX10 / 11 GPUを追加すると、90%を超えます。

ここでは少し筋金入りのゲーマーについて話していることに留意して、ターゲットオーディエンスについて考え始める必要があります。これらはあなたがターゲットにしたい人ですか?代わりに、より下位のハードウェアを備えたものを目指していますか?Intelグラフィックスはどうですか?MacとLinuxのユーザーはどうですか?これらはすべてあなたが自分で答える必要がある質問なので、広く一般的なガイドラインが得られるでしょう。

それに加えて、何かを出荷する目的で今日学習し始めている場合、そこに着くまでに最低約1年の期間を見ているという事実を考慮する必要があります(話をしない限り)本当に些細な/単純なケースについて)。gfx機能の上昇傾向が続く中で、それまでにGL3.3 +ハードウェアの100%に近い取り込みを検討しています。

GL2.1以下では、GL2.1のシェーダーとVBOサブセットに制限されている場合でも、非常に多くのくだらない古いナンセンスを学習して使用することになります(ダウンレベルGLSLバージョンは使いにくい、およびストリーミングVBOs)はGL_ARB_map_buffer_rangeなく、すべてが、使用できない- GL3.3 +導入している多くのよりよい(そしてよりパフォーマンス)、あなたはプレイヤーのハードウェアの活用を作ることでしょう多くのものを処理する方法(と彼らはに感謝しますよ本当にあなたと協力したくないAPIと戦うのではなく、生産的なコードを書くのにより多くの時間を費やすことになります。

そしてもちろん、ドライバーの状況は恐ろしいものです。難しいが本当の事実は、WindowsのGLドライバーが残念な状態にあることです。NVはサポートすべきでないものをサポートし、AMDはサポートすべきものをサポートしません。Intelでは、GL機能に制限する必要があります。 D3Dの同等物。GL_VERSIONが新しいほど、ドライバのバグに遭遇する可能性が高くなりますが、GL3.3の場合、現在はかなり安定しています。

したがって、要約は、他の情報(ターゲットオーディエンスなど)がない場合、GL3.3をベースラインとしてターゲットにすることです(可能であれば、コードベースを混乱させない、より高いGL_VERSIONから機能をプルします)非常に具体的かつ明確に特定された理由が低くなる場合を除きます(そして、「しかし古いハードウェアを持っている人はどうですか」という漠然とした概念を使用するのではなく、そのことを完全に100%確信したいと思います)。後者の場合、GL2.1を下回ることはありません。その場合でも、できるだけ多くの3.x機能を取り入れたいと考えています。


GL3.3〜= DX10 / 11およびSteamハードウェアの統計上の優れた点。
ネイト

これらの統計を更新するために、DX10 / 11 GPU + Vista / 7が〜88%になり、DX10 / 11 GPU + XPにさらに4.38%を追加すると、90%以上の浸透率が見られます。元の投稿を行ったときに予想していたよりも、取り込みがずっと速くなっています。
マキシマスミニマス

「GL3.3 +は、多くの物事を処理するためのはるかに優れた(そしてよりパフォーマンスの高い)方法を導入しました」-3.2はどのように比較しますか?Macユーザーはまだ3.3を取得していません。私はそれがほぼ同じであると仮定してきましたが、あまり多くを仮定したくありません。
michael.bartnett

38

2.1と3の交点に固執することをお勧めします。OpenGL2.1のみをサポートするハードウェアとドライバーはまだたくさんありますが、OpenGL 3コア推奨するプラクティスの方優れています。このチュートリアルは、始めるのに非常に適しています(3で非推奨になった機能のないOpenGL 2.0について説明します)。


3
Joe Groffチュートリアルの+1。彼は第2章でパイプライン全体を説明します。また、追加する「ユーティリティ」コードは2つの関数です。画像ライブラリを作成するか、サンプルが機能するようになったら独自の画像ローダーを作成します)。その他はすべて説明されており、チュートリアルの一部です。
michael.bartnett

18

私はそれが無駄ではないと言うでしょう。

どうして?さて、世界のその他の国はOpenGL 3.xおよび4.0をサポートしていますが、Mac OS XはまだOpenGL 2.1のみをサポートしています。また、すべてではありませんが、ほとんどのポータブルプラットフォームで使用されているOpenGL ESは、1.0、1.1、2.0のすべてのバージョンで広くサポートされています。これらは、それぞれOpenGL 1.4、1.5、2.1にほぼ匹敵します。

そのため、OpenGL ES 1.0が地球の表面から完全に消えるまで、OpenGL 2.xを知っていても無駄にはなりません

もちろん、OpenGL 3.xまたは4.0をサポートするプラットフォームでOpenGL 3.xまたは4.0を使用しても価値がないと言っているわけではありません。

更新:Mac OS X Lion(10.7)のリリース時点で、MacでOpenGL 3.2コアプロファイルがサポートされるようになりました。このリリースでは、APIを簡素化するためにOpenGL 1.xの大部分を廃止します。古いバージョンのOS X(およびローエンドのIntelグラフィックス)のユーザーは、OpenGL 2.0および2.1に制限されています。それでもなお、OpenGL 2.xを知ることは依然として有用であり、かなり長い間そうであり続けるでしょう。


Snow Leopardは、OpenGL 3のほとんどの拡張機能(ジオメトリシェーダーも含む)をサポートしています。
アクセルグナイティング

@Alex「ほとんどの」拡張機能をサポートしているからといって、コアGL3がサポートされているわけではありません。そして、私たちはただ3.xの話をしている
マティアスValdenegro

@Axel Gneiting:まったく同じではありません。OpenGL 3.0+の興味深い機能のほとんどは、拡張機能として利用できません。コアの変更が多数あります。
-greyfade

12

mh01の答えは基本の多くをカバーしていたので、いくつかの補足を追加します。

OpenGL ES

ES 2.0対デスクトップGL 2.1対デスクトップGL 3.3について話しましょう。この説明では、「GL XY」という用語はデスクトップOpenGLバージョンXYを指し、「ES XY」はOpenGL ES XYを指します。

構造的には、ES 2.0はGL 2.1と比べてコアGL 3.3と共通しています。GL 3.3とES 2.0はどちらも純粋なシェーダーベースです。どちらも純粋なバッファオブジェクトベースです。Etc. GL 2.1には、ES 2.0に簡単に移植できないGL 2.1アプリの作成を容易にする多くのパフォーマンスとコーディングトラップがあります。

ただし、シェーディング言語構文の点では、GLSL ES 1.00(ES 2.0へのマッピング)は、GL 3.3よりもGL 2.1のGLSLによく似ています。attributeおよびvaryingキーワード3.3コアには存在しません。inandを使用しますout。これは、3つ以上のシェーダーステージを処理する場合にはるかに一貫性があり、合理的です(そのため、ES 3.0はGL 3.3構文を採用しました)。

GL 3.3で学んだ概念をES 2.0 にマップするのは簡単です。そのため、さまざまなツールを使用してGL 3.3を学習すれば、ES 2.0の世界での作業方法を理解できます。もちろん、サブセットがどこにあるのかを把握する必要があります(つまり、GL 3.3でできること、ES 2.0ではできないこと)が、概念は同じです。

GLSLの構文をマッピングして、シェーダーを一方から他方にコピーできるようにするのは少し難しくなります。しかし、実際に必要なのは、適切な場所にあるいくつかの#definesだけです。また、GLSL 3.30にはhighp(デスクトップGLSLでは何もしない)などのいくつかのES互換機能があります。

したがって、GL 2.1ではなくGL 3.3から学習すると、ES 2.0で何かを得られます。


8

新しいバージョンでのみ公開されるOpenGLへの大きな変更を必要としないゲームの場合、3.x +のみを使用すると、nvidia 8シリーズ以上に制限されます(他のグラフィックスベンダーでは確認できません)。したがって、3.x以上の機能を使用していない場合は、人為的な制限を作成するだけで、古いが強力なグラフィックカードを使用しているユーザーがゲームをプレイできないようにします。

このため、前方互換性のあるサブセットと新しいバージョンを学習し、ゲームを効果的にプッシュできる最も低いバージョンを選択することを強くお勧めします。あなたはできる

また、OpenGL:ES 2.0は固定機能パイプラインを削除するため、2.1より3.0に相当するという別の質問に答えます。また、実行時にサポートされるglバージョンごとに異なる機能を常にサポートします。


4

Red Bookを使用してOpenGLを習得するのは節約になりますが、新しいバージョンで非推奨になっているものは無視してください(glBegin()、glEnd()-代わりにVBOを使用してください)。新しいバージョンの機能のほとんどは、以前は拡張機能を介してすでに利用可能でした。


4

私はthbuschにほぼ同意します。しかし、廃止されたAPIを完全に無視するわけではありません。それらを使用するコードがまだたくさんあります。ただし、あまり注意を払わないでしょう。たとえば、glBegin()、glEnd()を十分に学習して、それらを使用して独自のコードを記述するのは無意味です。しかし、あなたはそれらを見たときにそれらを認識し、彼らが何をしているのかをある程度知っている必要があります。

サンプルコードをビルドせず、OpenGL 3.xで廃止された機能をカバーする演習を行ったとしても、Red Book全体を少なくとも1回は読む価値があります。


3

短い答え:

いいえ。「良い部分」を学べば、今日でもOpenGL 2.1を学ぶのは良い考えです。

長い答え:

OpenGLは、基本的に「良い部分」と「レガシー機能」の2つの部分に分けることができます。

正直なところ、レガシー関数(「固定関数」)を学習することにはあまり利点がありません。ただし、OpenGL 2.1のかなりの部分(優れた部分)は、比較的小さな変更を加えて現在でも利用できます。

そのため、OpenGL 2.1の一部を学ぶことは有益です。特に、最近ではOpenGL ES 2が非常に人気があり、ES 2はほとんどの場合(正確ではありませんが)OpenGL 2.1のサブセットです。スマートフォンでの3Dプログラミングには、OpenGL ES 2が必須です。

それでは、「良い」とは何ですか?基本的に、OpenGL 3.xの「コアプロファイル」(「互換性プロファイル」とは対照的に)および/またはOpenGL ES 2にあるもの。

  • 頂点シェーダーとフラグメントシェーダー:それらを学ぶ
  • テクスチャ:まだ良い。
  • マトリックス:どのglLoadIdentityように機能するかを知ることは有益ですが、そのような機能は時代遅れであり、避けるべきです
  • ライト:コンピューターグラフィックスでライトをシミュレートする方法を知っていると便利ですがglLightfv、その他の固定機能のライト機能は避ける必要があります。
  • 配列バッファー:良好
  • glBeginglVertexglColorglEnd:それらを避けてください。簡単な実験には良いかもしれませんが、同じことをする他のより良い方法があります。
  • リストを表示する:避ける

私が最初にこの回答を投稿した質問は重複していることが判明したため、ここに再投稿しています。


1

悪い考えだとは思わない。GLの概念の多くは、OpenGLのすべてのバージョンにまたがっており、それでも最終的には役立ちます。私は10年前のOpenGLの本をたくさん持っていますが、それは今日でも役立ちます。OpenGLを初めて使用する場合、古い書籍や優れた書籍があれば、十分に学習でき、コードは引き続き機能するはずです。OpenGLのほとんどは下位互換性があります(私は信じています)。


1

最初に現代のものを学び、必要になるまでレガシーのものが存在しないふりをすることをお勧めします。

古いものは、たとえば、OpenGL 1.5またはそれ以上(古いクラッピーネットブックおよび古いMacOSシステムで見つけることができる)、OpenGL ES 1.x(古いiPhoneおよびAndroid 1.6以前)、またはOpenGL SC(ジェット戦闘機でディスプレイをプログラミングしている場合はSaftey Criticalサブセット)。たとえば、MinecraftはOpenGL 1.3に対して構築されているため、非常に古いハードウェアをサポートできます(ただし、「高度な」オプションもあります)。

また、画面上のピクセルを取得したいだけで、「正しい」方法でそれを行うことを気にしない場合にも役立ちます。

-1.0から1.0のビューポートの設定やシェーダーなしでのレンダリングなど、学習時にOpenGLがデフォルトで行う機能の一部に依存すると便利です。これにより、1回ですべてを行うことなく学習できます。

ただし、それ以外は可能であればスキップする必要があります。

詳細な情報については、こちらこちらの回答をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.