最新のOpenGL(3.0以降)を学習するための優れたリソースですか?[閉まっている]


73

OpenGL(3.0以降)から始めるのに適したリソースの検索を見つけました。まあ、私はたくさんの本を見つけましたが、それらのどれも良いリソースと考えることができません!

以下に2つの例を示します。

OpenGLプログラミングガイド(第7版) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 これは非推奨の資料でいっぱいです!ほぼすべての章は、それに関するメモから始まります。

OpenGL Superbible(第5版) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 この本は、著者が作成したライブラリを使用して、主な議論を説明し、学習したいことを隠しています。ライブラリの使用方法を学びたくありません!OpenGLを学びたい!

これが「ちょっとGoogleを使えない... OpenGLの学習方法を教えてください」のような質問ではないことをご理解ください。完全かつ詳細な検索を終了しましたが、廃止されたトピックを避けて「新しい」OpenGLを学習するための優れた完全なリソースが見つかりません。

誰かが正しい方向に向かってくれますか?私はC ++を知っており、開発に10年の経験があります...良いリソースを見つけることができますか?!私はそれに時間を費やし、深く学びたいです。

回答:


69

上記の本について、いくつかのメモに同意します。

  • OpenGLプログラミング8番目のガイドが公開され、最新のOpenGL 4.3向けに再作成されました。

  • SuperBible 5th edは、最初に松葉杖のライブラリーを提供しますが、本を読み進むにつれて、そのライブラリーの機能を再実装するので、終わりまでに完全に精通する必要があります。また、オブジェクト指向言語を使用している場合は、OpenGLを何かでラップすることを強くお勧めします。私は楽しみのために自分のライブラリに取り組んでいますが、それは進むべき道のようです、自分で実装して、すべてのインとアウトを理解し、実際に使用するビットを入れるだけです。また、シェーダーへのデータ送信(shinyMaterial.setColor(Red)ではない)のようなものを抽象化することもできます。これにより、レガシーの代替手段を提供することで、いくつかのものをバックポートすることもできます。ありoglplus

最新の「コア」OpenGLを学習する際の主な問題は、キューブを描画するだけの場合でも、基本的なパイプラインを起動して実行するには、次のことを理解する必要があることです。

  • マトリックス操作(C ++を使用している場合はGLMを使用します。MatrixStackOpenGL 非公式SDKのバージョンはこちら、またはこちらの簡単なバージョンも必要です。)
  • GLSLシェーダープログラミング。
  • データをシェーダーと頂点バッファーオブジェクトにバインドします。実際の純粋なコアプロファイルのみを学習する場合は、それらをすべて同時に実装する必要があります。何かが壊れている場合は、何も表示されず、どこで問題が発生したのかほとんどわかりません。また、基本的な照明(プログラミング言語に加えてシェーディングアルゴリズムを学ぶ必要がある場合)のようなこともカバーしていません。

ただし、コアプロファイルを使用してディープエンドを開始する必要はありません。使用するいくつかのそれを近代化、すべてについてちょうどまだそれをサポートする、冒頭で推奨されない機能のを。

別の問題は、「最新の」OpenGLが実際に3つのことを参照できることです。

  • 1つ目は、固定機能パイプラインではなく、プログラム可能なシェーダーのパイプラインです。2004年にOpenGL 2.0がリリースされて以来、コアの「モダン」テクニックが可能になりました(2004年に導入されたシェーダー(チュートリアルは更新されませんでした))が、最新のOpenGLのもう1つの礎石である頂点バッファーオブジェクトもありました。問題は、今日でもOpenGL開発者はそのすべてを利用することすらできないかもしれないということです。OpenGL1.5のみをサポートするIntelチップセットや、古いiPhone / Androidのみをサポートするスマートフォンなど、たくさんの安っぽいネットブックがあります。 OpenGL ES 1.1。OpenGL 2.0とOpenGL 3.x / 4.xのこのようなものの唯一の本当の違いは、コアプロファイルに必須になったことです。

  • 最新のOpenGLは、3.x、4.xにある新しいものも参照できます。以下のようなもの頂点配列オブジェクトフレームバッファオブジェクト制服バッファオブジェクト / std140レイアウト修飾子GLSLサブルーチン等々。私が見つけたものの多くは、プログラムを作成するのに非常に便利です。また、エンジンパイプライン全体を微妙に変更することもできます。また、ヘルパー関数などを作成することで、わずかな労力でバックポートできるものです(たとえば、シェーダーへの値の手動アップロードを管理するUBOがサポートされている場合、ユニフォームの設定に使用できる汎用シェーダーマネージャーオブジェクトを記述します) 、それを自動化するために、シェーダーを書き換える小さなシェーダーをそこに入れるかもしれません)。このようなものは新しいビデオカードでのみ動作し、それをサポートするネットブックや現在の世代のビデオゲームコンソール(OpenGL ESに似たOpenGLの独自のサブセットを使用します)は表示されません。最新のOSXには3つしかありません。

  • Ultra Modern nextgen OpenGL。OpenGL 4.3がリリースされました。計算シェーダー、glMultiDrawElementsIndirect、シェーダーストレージバッファーが付属しています。これにより、すべての頂点データをGPUにアップロードし、計算シェーダーを使用して、プログラムでそれを行うのではなく、描画すべきものを計算する、根本的に異なるパイプラインが可能になります。残念ながら、これは非常に新しいため、まともなチュートリアルについては知りません。これがどのように機能するかの概要を示すOpenGL 4.3のレビューご覧ください(また、著者はそれを説明するGPU Proの記事がリリースされると言っています)。真新しいため、この段階ではサポートされません(ベータドライバーを備えた新しいnvidiaカードを使用している場合を除く)。ただし、OpenCL / CUDAを使用してその一部を実装できる場合もあります。

glBegin、glEnd、glVertex *、glNormal *、glTextCoord *、glTranslate *、glRotate *、glLoadIdenity、glModelViewMatrixなどをスキップします。代わりに、シェーダーなしで頂点バッファーオブジェクトを学習することから始めます。この時点で3Dを平らな白い三角形だけで試さないでください。そうすれば、マトリックスを使用して3D操作を行う必要がありません(すぐにシェーダーにバインドすることを学ぶ必要があるので、古い方法を学ぶことに意味がない)。次にシェーダーを追加します。頂点属性を使用するため、頂点バッファーオブジェクトのバインド方法を変更する必要があります。制服を介してプロパティを伝達する方法を学びます。次に、GLMを使用してマトリックス操作を学習し、マトリックスをシェーダーにバインドして3Dを開始します。それができたら、基本的にテクスチャリングなどのより高度なことを学ぶだけです。

ほとんどのOpenGL 2.0+で動作するシェーダープログラミングパイプラインをカバーする一般的なオンラインのOpenGLの一般的なチュートリアル:

その他の一般的な学習リソース。OpenGL ESは良い出発点かもしれません。OpenGL ESは、非推奨のものをすべて削除しました。OpenGL 4.1はOpenGL ESと完全な互換性があるため、OpenGL ESプログラムを取得してOpenGL 4.1で実行することができるはずです。そして、基本原則は両方とも同じです。

注意すべき点として、OpenGL ES 3.0はリリースさればかりですが、新しいため、チュートリアルやハードウェアのサポートはまだありません。OpenGL ES 1.0-> 2.0で見た固定パイプラインとシェーダーモデルの違いなど、大きな根本的な変更はないようです。したがって、古いものを学習することはおそらくないでしょう。

また、OpenGL ESはEGLを使用することが多いため、別の方法でウィンドウを開く必要がありますが、それほど難しくないはずです。それ以外の場合は、いくつかのOpenGL ESラッパー/エミュレーターがあるか、Android / iPhoneがある場合はそれを学ぶことができます(または、エミュレーターの使用を確認してください)。

レッドブックに相当するAddison Wesley OpenGL ES 2.0プログラミングガイドがあります。

GLSLシェーダーに焦点を当てたものも見ることができます。これは、最新のOpenGLのほとんどが存在する場所だからです。あなたが学ぶことは、物事のOpenGLバインディング「接着剤」側をカバーすることを確認する必要があります。

OpenGL Shading Language 2nd edition(Orange Book)をご覧ください。

OpenGL 4.0 Shading Language Cookbookは、さらに最先端のOpenGLを扱っていますが、それ自体が包括的なチュートリアルではありません。ユニフォームバッファオブジェクトやGLSLサブルーチンなどの最新の実世界のOpenGLプラクティスをある程度理解することは間違いなく価値があります。

最後に、WebGLを見ることができますが、JavaScriptを使用しているため、多少異なり、デバッグがはるかに難しくなります。


3
+1、すごい。私がお勧めする唯一の小さな変更は、VBOへのより簡単なパスであるが、初心者が陥る可能性のあるいくつかのベアトラップがないため、最初にクライアント側の頂点配列を使用することです。
マキシマスミニマス

1
非推奨の機能は特に学習/​​使用しないようにするのが最善であると考えました。私が使用することをお勧めする他の非推奨のものは、シェーダーを使用せずにレンダリングでき、頂点プロファイル0がコアプロファイルを切り替えるときに両方とも爆発する位置であると想定するなど、OpenGLがデフォルトで行うことです。
デビッドC.ビショップ

2
SuperBibleの第6版がリリースされたばかりで、第5版よりもはるかに優れています。強く、強くお勧めします。最新のOpenGLを簡単にフォローして習得できます。
フィリップ

2
Arcsynthesisのgltutサイトは利用できなくなりますが、チュートリアルでは、まだからダウンロードすることができbitbucket.org/alfonse/gltut/wiki/Home
のArto Bendiken

15

少なくともプログラミングガイドの第8版が出るまでは本を忘れてください。

ほかに言及したチュートリアル、私が見つかりました。このサイトは、それはかなり迅速に基礎を過ぎて行くことから、有用であることを。どちらも最新のOpenGLの優れた入門書です。それを超えたら、ドキュメントだけが必要になります。OpenGLは慣れれば簡単に使用できます。残りはコンピューターグラフィックス理論と数学です。


11

私はあなたとまったく同じ状況にあり、最終的に私が進むために必要なものを見つけました。

ここではまず最初にヘッド: http://www.arcsynthesis.org/gltut/。このサイトは素晴らしく、優れた実例であり、何が起こっているのかを詳しく説明しています。コードはC ++で書かれていますが、これを使用して、LispでOpenGLデモを書くことを教えています。また、古いやり方を完全に自由にしているので、悪い習慣を覚える心配はありません。

「ただの別のウェブサイト」にもかかわらず、これほど基本的で簡潔で簡潔な説明を提供する本を見つけていないことを強調します。

上記のサイトを通過すると、シェーダーの基本的な把握が完了し、知っておくべき多くのことをグーグルで検索できるようになります(廃止されたものをすべて削除するため、opengl esまたはwebglリソースをよく見てください)またはopengl wikiサイトにあります。後者は、あなたがベルトの下にアーク合成サイトからの基礎を持たないならば恐ろしく不可解ですが、おおよそ何を探しているかを知っているとき、非常に役に立ちます。

また、GLSLの詳細については、OpenGLシェーダー言語(オレンジブック)をご覧ください。これについては非常にゆっくりと取り組んでいますが、シェーダーの記述を理解して、この追求をさらに進めることができます。この本には、レビューアーの言葉で「600ページの本に200ページの最高品質のコンテンツが詰め込まれています」と警告しますが、追加の履歴と情報は、OpenGLのルートを理解するために必要なコンテキストを提供します基準が下がったように(それはとにかく私を助けています!)

これがお役に立て、幸運を祈っています。今後、あなたの作品を見て、プレイすることを楽しみにしています!

更新

アークシンセシスは悲しいことにオフラインのようですが、ここでサイトはpdfに変換され、コードはこちらにミラーリングされています

また、私の最初の回答learnopengl.com/が完全に素晴らしいものになって以来、数年でした。最新のopenglへの導入の素晴らしさのためにarcsynthesisをお勧めしますが、learnopenglサイトはarcsysthesisが行ったよりもはるかに多くをカバーし、親しみやすい言語で管理します。例とオープンソースコードを作成しました。基本的に、それは非常に良いです、それをチェックしてください!

本に関しては、オレンジ色の本ではあまり行き過ぎていませんが、「Real-Time Rendering」の第3版をお勧めできます。技術的なものの準備ができたら、この本は金鉱です。


2
ああ、神様!最初のリンクは素晴らしいです!
MatterGoal

gltutサイト​​は利用できなくなりましたが、チュートリアルはbitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

良い点は、追加の推奨事項で投稿を更新することです。
バガーズ


5

私にとって非常に役立つ2つのサイトは、http//www.arcsynthesis.org/gltut/http://ogldev.atspace.co.uk/です。

また、OpenGL wikiは非常に優れた最新のリソースです。

これらを理解したら、弾丸を噛んでOpenGL仕様を読むことを強くお勧めします。その後、あなたはプロになります。


はい、オンラインチュートリアルはほとんどの本よりもはるかに便利だと思います。SuperBible 5th editionは非常に残念です。
フィリップ

gltutサイト​​は利用できなくなりましたが、チュートリアルはbitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken

4

「現代の」OpenGLをカバーする、私が出会った最高の本はhttp://www.packtpub.com/opengl-4-0-shading-language-cookbook/bookです

「クックブック」ですが、レンダリングをセットアップするために必要な手順と、必要なコンパニオンライブラリの種類(画像ライブラリ、ベクトル数学ライブラリ)を順を追って説明します。

それに加えて、OpenGLを使用する可能性のあるあらゆる種類の一般的なものを深く掘り下げることなく通過します(シャドウのように、シャドウマッピングとシャドウマップのフィルタリングをカバーしますが、それ以上にはなりません)複雑なシャドウマッピングメソッド)。

また、オレンジ本を入手することをお勧めします。


ありがとう@Jari。シェーダーについては「唯一」ではありませんか?つまり、この本はシェーダーだけでなくOpenGLテクニックも紹介していますか?
MatterGoal

2
@MatterGoal:最新のOpenGLは、ほぼ完全にシェーダーベースです。この本は、OpenGLバインディングの側面をカバーしています。私はこの本もお勧めしますが、他の何かのコンパニオンとして、コア学習用の本ではありませんが、実際のmoddrnプラクティスの使用例を示しています。
デビッドC.ビショップ

4

言及されていなかったが役立ついくつかのチュートリアルやその他のもの


+1リストに追加するために、AksよるOpenGLチュートリアルがあります。これはあまり構造化されていませんが、設定に十分な情報があります。
legends2k
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.