どのOpenGLバージョンを学習または使用しますか?


16

だから、私はOpenGLが初めてです...ゲームプログラミングの一般的な知識はありますが、実際的な経験はほとんどありません。

私はさまざまな記事や本を調べてOpenGLに飛び込もうとしましたが、さまざまなバージョンと、物事を混乱させる古い方法と新しい方法を見つけました。

私の最初の質問は、OpenGLの各バージョンを実行できるゲーマーの割合に関する数値を誰でも知っているかどうかです。市場シェアはどのようなものですか?2.x、3.x、4.x ...

Half Life 2の要件を調べたのは、ValveがMacで実行するためにOpenGLで更新したことを知っているためです。NvidiaのWebサイトで8800 GTを見て、OpenGL 2.1のサポートをリストしました。4.xがすでにあるので、これはおそらく間違っているかもしれません。8800GTのドライバーを検索したところ、4.2をサポートしていると書かれています!少し矛盾があります、笑。

また、XPが特定のバージョンまでしかサポートしていない、OS Xが3.2のみ、またはその他のすべての種類をサポートしているなどの記事も読みました。全体として、さまざまなバージョンに対するサポートの量と、学習/使用するバージョンについて混乱しています。

学習リソースも探しています。これまでの私の検索結果は、OpenGL SuperBibleを示しています。第4版はAmazonで素晴らしいレビューがありますが、2.1を教えています。第5版は3.3を教えていますが、第4版の方が優れていること、第5版が新しい機能などを適切に教えていないことを言及しているレビューがいくつかありますか?基本的に、学習教材内でも矛盾が見られ、どこから始めればよいかさえわかりません。

私が理解していることから、3.xはまったく新しい方法を開始し、「glBegin()、glEnd()などの非推奨の機能から遠ざけたい」というさまざまな記事やレビューを読んでいますが、私が見たチュートリアルでは、この方法を使用しています。基本的に、新しいやり方はもっと複雑であるが、古いやり方は悪いと言っている人々を見てきました>。>

個人的には、前もって学ぶべきことがたくさんあることは知っていますが、テッセレーションに興味があります。私はそれが4.xにしかないと理解している限り、

[ところで、私のデスクトップは4.2をサポートしています]


(Stack Overflowの)この質問は重複しているようです: stackoverflow.com/questions/6823371/...
アンダーソングリーン

回答:


21

OpenGLのカバレッジについて疑問がある場合は、Steam Hardware Surveyから始めるのが良いでしょう。

http://store.steampowered.com/hwsurvey?platform=pc

残念ながら、現在壊れているようで、ビデオカードの統計情報は表示されません。:\

また、XPが特定のバージョンまでしかサポートしていないなどのことも読みました

DirectX 9は、OpenGL 2.1、DirectX 10からOpenGL 3.0、DirectX 11からOpenGL 4.0に相当します。これが混乱の原因です。

XPはOpenGLのすべてのバージョンをサポートしていますが、DirectX 10以降はサポートしていません。これは、Microsoftが人々にVistaへのアップグレードを強制したかった方法ですが、あまりうまくいきませんでした。OpenGLはオープンスタンダードであるため、ビデオカードメーカーがXP用のドライバーを作成する限り、OpenGLの新しいバージョンをサポートします。

私が理解していることから、3.xはまったく新しい方法を開始し、「glBegin()、glEnd()などの非推奨の機能から遠ざけたい」というさまざまな記事やレビューを読んでいますが、私が見たチュートリアルでは、この方法を使用しています。基本的に、新しいやり方はもっと複雑であるが、古いやり方は悪いと言っている人々を見てきました>。>

これはOpenGLにとって非常に大きな問題です。基本的に、昔は、「即時モード」を使用してビデオカードにデータを送信していました。皮切りにglBegin、いくつかの処理を行い、で終わりglEndます。ただし、ビデオカードドライバーはこれをまったく好みません。彼らは、あなたがどれだけの物を送るかをどのようにして知ることができますか?テクスチャ付きクワッドでは4つの頂点になりますか、スキンモデルでは100,000になりますか?これが、頂点バッファオブジェクト(VBO)を導入した理由です。即時モードはリンクリストですが、VBOは静的配列です。開発者はそれがどれだけ大きいかを知っており、ドライバーはそれがどれくらい大きいかを知っています。みんな幸せです。そのため、OpenGL標準ボード(Khronos Group)は、OpenGL 3.0以降の即時モードを廃止することを決定しました。ただし、簡単な例で示しますので、これには問題があります。

ゼロから始めて、テクスチャ付きのクワッドを表示するとします。

OpenGL 2.1の場合:

  • 射影行列を設定して配置する GL_PROJECTIONます。
  • modelviewマトリックスをセットアップして、それを配置します GL_MODELVIEWます。
  • 画像を読み込んで GL_TEXTURE_2Dハンドルにます。
  • 頂点の位置、テクスチャ座標、色を定義します。
  • テクスチャをバインドします。
  • glBegin... glVertex2f... glTexCoord2f... glEnd

OpenGL 3.0の場合:

  • 投影とモデルビューのマトリックスを作成します。
  • 画像を読み込んで GL_TEXTURE_2Dハンドルにます。
  • 頂点の位置、テクスチャ座標、色を定義し、VBOに配置します。
  • 頂点配列オブジェクト(VAO)を作成し、VBOをアタッチします。
  • テクスチャ付きクワッドを出力するシェーダーを作成し、シェーダープログラムに配置します。
  • ユニフォームを使用して、マトリックスをシェーダープログラムにアタッチします。
  • テクスチャをバインドします。
  • テクスチャをシェーダープログラムにアタッチします。
  • glDrawArrays

では、最初のバージョンで何がうまくいかないのでしょうか?

  • あなたの位置が間違っています。
  • 頂点ワインディングは間違った方法です。
  • テクスチャが正しく読み込まれません。
  • テクスチャが適切にバインドされていません。
  • 射影行列が間違っています。
  • モデルビューのマトリックスが間違っています。
  • 適切な頂点を送信していません。

そして、2番目のバージョンでは、上記の問題が発生する可能性があります。

  • VBOが間違っています。
  • VAOが間違っています。
  • シェーダーが間違っています。
  • シェーダーへのテクスチャバインディングが間違っています。

適切なデバッグツールがなければ、これは深刻な問題になります。これは、人々があなたが即時モードに固執するべきだと言う理由です。幸いなことに、今では無料で優れたgDEBuggerが手に入りましたが、魔法の弾丸ではありません。

あなたの質問に答えるために:それはあなたのゲームに依存します。幅広いユーザー(カジュアルゲームや2Dプラットフォーマーなど)にリーチしたい場合は、2.1をターゲットにする必要があります。とにかく6年前のハードウェアでは実行できない壮大な宇宙ゲームを作成している場合は、3.3をターゲットにします。将来の互換性のために最新かつ最高のものが必要な場合は、4.0をターゲットにします。


2
ここでは、VAO / VBOに対するバイアスを示していると思います。実際には、テクスチャ付きのクワッドを描画する場合は、完全なVAO / VBOセットと、既に作成されたシェーダーとテクスチャがあります(プログラムの起動中-実行時に誰も作成しません)。新しい方法でテクスチャ付きクワッドを描画することは、実際にはほんの一握りの呼び出しです-確かに、プログラムの初期化で複雑さがフロントロードされるのに対し、古い方法では実行時に複雑さが明らかになります。
マキシマスミニマス

2
しかし、それはまさに私が意図したものです。今、あなたのバグはあなたのデータ(頂点データとテクスチャオブジェクト)、シェーダープログラム、シェーダーコード、マトリックス、ユニフォームアップロードまたはVAOバインディングにある可能性があります。何もないところから始めると、チェックすべきサブシステムがたくさんあります!そして、より多くの状態を追跡する必要があります。
knight666

1
gremedyサイトのgDEBuggerは古いことに注意してください。彼らのフォーラムは長い間ダウンしていたので、私は放棄されたと思います。このツールはAMDによって採用されています:gDEBugger
マイケルハウス

2
「glBegin ... glVertex2f ... glTexCoord2f ... glEnd」ただ。glBegin、glVertexなどは決して正しくありませんでした。glDrawArraysはOpenGL 1.1(1997)で導入されたため、常にglBeginおよびEndで使用する必要があります。
API獣

9

ハードウェアの互換性に関する統計については、Steamの調査をご覧ください。http://store.steampowered.com/hwsurvey/ DX10とDX11がリストされていますが、ハードウェアの互換性はそれぞれOpenGL 3とOpenGL 4と同じです。ただし、OpenGLドライバーのインストール状態は通常DXより悪いことに注意してください。

Windows XPはDX10またはDX11をサポートしていませんが、ドライバーに問題がなければ、OpenGL 3および4は問題ありません。OSXは(最大で)OpenGL 3をサポートします。Linuxでは、ATI / NVIDIAベンダードライバーを使用してOpenGL 4を取得します(もちろん、ハードウェアがサポートしている場合のみ)。

次に、OpenGLのモバイルESバージョンもあります。実際には、OpenGL ES 2.0を検討することをお勧めします。これは、サイズが小さいため、習得しやすいだけでなく、シェーダーやVBOなどの最新のプラクティスを使用する必要があるためです。また、ほとんどのモバイルデバイスで使用されているため(モバイルゲームを作成することもできます)、WebGLも基本的に同じであるため、Webブラウザーで学習のすべてを実際に行うことができます。OpenGL ES 3.0は今年の夏にリリース予定です。

テッセレーションはOpenGL 4.0の機能です。最初に他の種類のシェーダー、すべての基本を学ぶ必要がありますが、面白いことに同意します-実際、私はそれで少しテストを書きました:http : //blog.tapiov.net/post/15189341463/playing- with-opengl-4-tessellation


4
くそー、knight666は私にそれを打ち負かし、より詳細な答えを出しました。それでも、ESの部分は考える価値があります。
タピオ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.