上記の本について、いくつかのメモに同意します。
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を使用しているため、多少異なり、デバッグがはるかに難しくなります。