OpenGLの優れた学習リソースは何ですか?[閉まっている]


88

私はしばらくの間、iPhoneでOpenGL ESを使用してきましたが、基本的には、例で見たものと自分のコマンドとして採用した小さなコマンドセットの外でかなり迷っています。他のプラットフォームでOpenGLを使用して、それをよく理解したいと思います。

本を探すたびに、この巨大な聖書は初心者にとっては面白くなく、非常に難しいように見えます。OpenGLの学習に2、3週末を費やす場合、私の時間(およびお金)を費やす最良の方法は何でしょうか?


12
私はそれを言うのは嫌いですが、OpenGL SuperbibleまたはOpenGLレッドブック OpenGLを学ぶための最良の方法です。複雑な主題なので、本は大きくする必要があります。
レイチェルブルーム

6
初心者でもアクセスできますか?
DFectuoso

回答:


36

OpenGLのチュートリアルを見るときは注意してください。それらの多く(NeHe)には、もはやすべきでないことを教えるだけだからです。今日のOpenGLは、10年前とは異なる獣です。

廃止されたものを回避するいくつかの素晴らしい例はここにあります:http : //www.g-truc.net/post-tech-content-sample.html

OpenGL Samples Pack 4.0.1.0は、サンプルの数を合計58個のサンプルにする更新プログラムです。32ビットおよび64ビットのVisual Studio 2008および2010用の13個のOpenGL 4サンプル、33個のOpenGL 3.3サンプル、および12個のOpenGL 2サンプルが含まれます。


山にリンクしています!
user14170

65

学ぶことができることはたくさんあります。OpenGLを初めて使用する人の観点から、それぞれについて考えます。

OpenGLの例

あなたが読むことができるサンプルコードはたくさんあります。G-trucの例は非常に広範囲で、多くの高度な機能をカバーしています。

ただし、初心者の場合、例から学ぶことは恐ろしい学習方法です。あなたが本当に理解していないコードを読んでも、それがなぜ機能するのか教えてくれません。実際、上記のリンクされたページのテキストは、例が初心者向けではないことを具体的かつ正しく述べています。

かなりのコメントが付けられていない限り(その時点でチュートリアルである)、裸のソースコードから学ぶことは簡単なことではありません。そうしようとすると、カーゴカルトスタイルのプログラミングとコピー&ペーストコーディングが促進されます。実際にやっているのは、ある場所から別の場所にコードをコピーするだけで、何かがどのように機能するかを理解していると確信するのは非常に簡単です。あなたは物事を混ぜ合わせることができるかもしれませんが、適切な説明資料なしでは真の理解を達成することは困難です。

OpenGLブック

OpenGL開発用の実際の購入可能な本はかなりあります。ここで最大の2つについての私の考えを説明します。

OpenGLレッドブック

これは、純粋に実用的な観点からはやや問題があります。第7版はGL 3.0および3.1を対象としています。どちらかというと古いです。それ以来、OpenGLには多くの便利な機能が追加されており、物事の書き方を変える機能があります。そして、それらのすべてがハードウェア機能ではありません。

第8版は「間もなく」登場し、4.1をカバーします。それが古い固定機能のものをカバーするかどうかについての言葉はありません。

この本は大丈夫だと思います。最大の問題は、情報の整理です。これは、学習用に作成された本というよりも、包括的なリファレンスマニュアルのようなものです。これが私が言っていることです。

教育の際にすべき最も重要なことの1つは、重要でない情報で学生を過負荷にしないことです。しかし、Redbookはまさにそれを行います。素材を紹介するとき、多くの素材を紹介します。その多くは、手元のタスクには不要です。

あなたが話すこととそれについて話すことは、あなたの本を良い学習リソースにするために重要です。Redbookは、より適切な時間まで情報を保持しません。三角形とプリミティブを描く方法について話すとき、それらを一度に描くことについてのすべてについて話します。すべてのオプション、すべての機能、すべてのパラメーターなどを網羅しています。

それは情報の良い組織ではありません。

OpenGL Superbible

この本の第5版はコアGL 3.xのみを対象としているため、固定機能は対象外です。

ただし、本の一般的な構成は、第4版の構成とほぼ同じです。これは、第4版が固定機能を使用し、かなり後になるまでシェーダーを導入しなかったため、不可能のようです。

これが達成された方法は、本に関する私の一番の不満です。本質的に、著者は、固定機能OpenGLの形式を実装するライブラリを構築しました。VAO、バッファーオブジェクト、シェーダー、およびその他のさまざまなものをラップするため、GLパイプラインの詳細な動作などについて話す必要なく、オブジェクト、マトリックス演算、およびテクスチャを描画できます。

これらすべての詳細を非表示にすることにより、素材の消化が容易になります。しかし、ライブラリなしで実際に機能する方法を知らずに、人々がSuperbibleから離れていくのをよく目にします。彼らは、シェーダーがどのようにバッファーオブジェクトに接続するか、データがパイプラインをどのように流れるかなどを本当に理解していません。

それは、レッドブックよりもさらに保守可能な本です。他のすべてが失敗した場合、それは仕事をします。しかし、私はそれが良いかもしれないと思う。

また、一部のレビュアーによると、正規化された値などを使用して属性データをパッキングするなど、特定の有用な情報を見逃しているようです。

OpenGLオンライン資料

学ぶことができる多くのオンライン資料があります。

NeHeのチュートリアル

NeHeのチュートリアルは、他の人が述べているように、非常に時代遅れです。固定機能のOpenGLに焦点を当てています。多くの場合、固定関数GLを習得するのは簡単だと言われていますが、これは事実です。しかし、それはそれを良いアイデアにしません。

固定機能パイプラインが実際にどのように機能するかを理解することは困難です。私は、シェーダーを学ぶよりも難しいとまで言います。取得したら、シェーダーは簡単です。テクスチャ環境のもの、コンバイナ、その他の複雑さを理解することは非常に注意が必要であり、参照ドキュメントに頻繁にアクセスして、すべてが正しく設定されていることを確認する必要があります。たとえすべてを正しく理解していても、小さな間違いを犯すことは簡単です。

違いは、固定機能理解せずに機能させることができることです。これにより、貨物カルトプログラミングが促進されます。何をしているのかを実際に知らなくても、画面に何かを表示することができます。OpenGL.orgフォーラムでは、gluLookAtがどのように機能するかを知らない人々から、照明の問題、テクスチャ環境で動作する特定の効果を得ようとする人々まで、固定機能を取り巻く特徴についての質問が絶えず見られます。

だから、私はNeHeがOpenGLを学ぶ良い方法だとは思わない。

上記の解説は、SwiftlessLighthouseなど、シェーダー以外のチュートリアルに使用できます。

ウィキブックのOpenGLプログラミング

Wikibook OpenGLプログラミングは、おそらくNeHeに相当する現代のものです。モバイルプラットフォームとの関連性を維持したいため、GLバージョン2.1を対象としています。それがあなたにとって重要な場合は、ぜひこちらをご覧ください。

NeHeのもう1つの問題、つまりこのウィキブックは、ソースコードに大きな焦点を当てています。テキストとコードの比率は非常に小さいです。そこにある多くのコードは、しかし、テキストは本当にすべてがどのように動作するかを説明していません。

例として、チュートリアル2の下部をご覧ください。ブレンドを紹介します。ブレンドがどのように機能するかは述べていません。glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)実際に何を意味するのか、何をするのかは述べていません。「これは、物事を透明にするコードです」とだけ言っています。

それは最高の学習環境ではありません。

不完全なチュートリアル

SwiftlessにはOpenGL 4.xチュートリアルのセットがあります。Durian Softwareには、シェーダーベースのOpenGLチュートリアルもあります。そして、「OpenGLBook.com」チュートリアルがあります。

これらすべてに共通することは...それらが不完全で放棄されているということです。彼らは全員4-5のチュートリアルを受け取り、その後ドロップされました。それらのどれも、テクスチャリング、照明、またはそのようなものに到達しませんでした。まあ、ドリアンはテクスチャリングをヒットしましたが、照明はヒットしませんでした。

それらから多くのことを悲しむことができますが、同様に不足している多くがあります。

恥知らずな自己宣伝

私自身のModern 3D Graphicsチュートリアルを確認することは、恐ろしい利益相反になります。その代わりに、私は彼らの背後にある組織と、なぜ彼らが良いと思うかについて長々と説明します。

ああ、はい、チュートリアル17に取り組んでいます。プロジェクトは死んでいません。

最初の3つの章は、実際にOpenGLパイプラインがどのように機能するかを学ぶことについてです。Superbibleは、詳細を隠そうとしたため失敗しました。代わりに、私はそれらの詳細を本当に、本当に上手に説明しようとします。繰り返し。概要では、パイプラインをプレーンテキストで説明しています。最初のチュートリアルでは、コードの伴奏について説明します。そして、2番目のチュートリアルではさらに詳しく説明します。

そこから、私は自然にオブジェクトの配置に進みます。これはユニフォームを紹介しますが、ユニフォームと遠近投影を同時に詰め込みたくありませんでした。そこで、2つの概念を分離しました。投影後、深度バッファリングは妥当な次のステップであり、変換とマトリックスの動作がそれに続きます。その後、カメラ。四元数による回転は遅れて追加されましたが、新進のグラフィックプログラマーにとって重要なことだと思います。

照明のチュートリアルでは、もう1つを再び構築します。拡散、フラグメントごとの照明、鏡面反射。ダイナミックレンジは興味深い選択肢でした。ほとんどの入門資料はそれを避けようとしますが、私はそれを受け入れます。光強度が常に[0、1]の範囲にあると考える場合、あなたは最近のグラフィックプログラマではありません。また、最近では、線形カラーパイプラインを維持する方法がわからなければ、グラフィックプログラマーではありません。

詐欺師に関する照明の最後の1つは、奇妙なものでした。私は、特に本が進むにつれて、いくつかのOpenGL機能を示すのではなく、問題を解決するチュートリアルを設計しようとします。私のチュートリアルの設計の多くは、特定のトピックについて話す方法を見つけることから来ていますが、それでもなお「Xを学んでいる」という明らかな問題ではありません。ジオメトリシェーダーは、実際には多くの問題を解決できないため、難しいものです。

詐欺師は、GSが実際に解決に役立つという問題を表しています。また、discardフラグメントの深さの変更など、使用頻度の低い他のことについて話すことができました。そして、それは本当にシェーダーの力を示しています:あなたは平らな正方形を球体にすることができます。

テクスチャチュートリアルも興味深いものです。3つ目がしばらくsRGBテクスチャについて話すのを控えることになるまで、私は拡散カラーテクスチャについて話すことを延期しました。このようにして、線形の問題に対処することなく、テクスチャに関する基本的な問題(データの読み込み、シェーダーへの配置、フィルタリング、クランプなど)について話すことができました。そのため、そのトピックに関するチュートリアル全体を費やすことができました。それにより、線形カラーパイプラインを維持することがどれほど重要かを本当に強調することができました。

私のペットのおしっこです。


1
私はあなたの本/ソースコードを読み始めたばかりで、信じられないほどです。無料でこれをリリースしてくれてありがとう!
アレックスコプラン

私はテレコムの男ですが、チュートリアルを試してみました。そして、彼らは初心者にとって本当に素晴らしいです。唯一のことは、非公式のopengl sdkはUbuntu12.04 + Eclipseで適切にビルドできないことです。GL、GLEW、GLU、Glutなどに対して行うように、直接インストールする方法はありますか?
-iammilind

@iammilind:「正しくビルドできませんビルドはどのように失敗しますか?また、「インストール」はありません。それは半分のポイントです。これは、システムのインストール、依存関係、PPM、または私が理解していないか、Linuxでの使用方法がわからないその他の多くの要素がない、コピー/プリメーク/および実行のメカニズムです。システムが行くべきだと思う場所ではなく、望む場所に置きます。
ニコルボーラス

1
Ubuntuでは、残念ながら、preamakeステージ自体でビルドプロセスが失敗します:( ...暇なときにUbuntu + Eclipseでコードチュートリアルを実行しようとすると非常に役立ちます。今のところ、私がフォローしている他の方法。あなたが提供し、いくつかの他のコードのチュートリアルに理由は私が初心者のOpenGLの学習のために今まで「arcsynthesis」ウェブ上に最高の場所を見ているということであることに関する読み物を使用することです。
iammilind

@iammilind:バグレポートを提出していないことに気付きましたこれらなしでこれらの問題がどのように修正されると期待しますか?
ニコルボラス

21

このチュートリアルシリーズから始めることをお勧めします。これらは優れており、neheの機能よりも最新の機能を使用しています。http: //duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html


8

OpenGLに関する私の唯一の本は「OpenGL SuperBible、第4版」であり、第5版は数週間のうちにリリースされようとしています。私は初心者と上級プログラマーの両方に良いと思います。

編集:プログラミングを学んでいるだけなら、最新のテクノロジートレンドに行かないでください。1つの方法論、5つの新しいインターフェイス/リリースされたばかりのバージョンを使用して、エキスパートになることができます。シェーダーが3か月ごとに進むのを見てきたようです。したがって、最高のドキュメント(一般的にプリミティブ)を選択し、いくつかのプログラムを作成し、将来的に古いコードにぶつかる可能性が高いため、徐々に前進してください。それが役に立てば幸い!


私は今すばらしいことを行っていますが、あなたが進むにつれてすべての概念を説明しているので、グラフィックの背景を持っていない人にとっては本当に良いことです。
スパイディー

5

いつものように、学ぶための最良の方法はそれをすることです。教科書を読むことで本当にメリットがあると感じない限り、お金を使うのを控えます。ほとんどの(すべてではないにしても)情報はオンラインで見つけることができます。OpenGLを学習することに加えて、線形代数をブラッシュアップすることもできますが、決して痛いことはありません。

私が直面した大きな問題は、OpenGLの最近のバージョンで非難されてきた多くのものです。

私が見つけた最高のリソースはJoe's Blogにあります。最新のパイプラインを紹介し、他の場所で見つけたものよりも読みやすい方法でいくつかの例を紹介するのが最善です。そうです訥河が最近更新カップルを取得しており、その教訓はまだ古いですが、ニュースの一部は重要である可能性があります。Lazy Foo 'も素晴らしいリソースでしたが、Neheのように、チュートリアルでは使い古された素材を使用しています。

週末か2日後、快適になったらすべてを適用する小さなプロジェクトを行うと思います。ブレイクアウト、またはテトリス-コード自体に集中できる場所。どれだけシンプルであっても、実際のプロジェクトを始めようとすると、さらに多くのことを学びます。



3

OpenGLを学ぶ最良の方法は、それを使用することです。独自のエンジンを作成することをお勧めします。これは困難な作業のように思えるかもしれませんが、そうです。最初のエンジンはあまり良くありませんが、多くのことを学びました。

基本的には、エンジンを記述し、ゲームに使用し、気に入らないものを見つけて書き直します。それを続けていくと、OpenGLが良くなります。:)

必要なもの:

  • モデル(.obj)をロードする方法
  • テクスチャをロードするいくつかの方法
  • 固定機能パイプラインまたはシェーダーでの照明
  • 画面上のティーポットより少し複雑なシーンの場合、シーングラフ
  • たくさんの小さなツール(3Dベクトルクラス、クォータニオンクラス、カメラクラス、シーンマネージャーなど)

これはすでに多くの作業です。


「最初のエンジン」に必要な基本的なアーキテクチャまたはコンポーネントに関するドキュメントを教えてください。これは実際に...オープンGLで汚れ私の手を得るための良い方法のように思えるかもしれない
DFectuoso


4
-1 gamedevにアクセスする方法としてエンジンを記述することはあまり良くありません。たとえば、エンジンに何を入れるかわかりません。Scientificninja.com/blog/write-games-not-engines
共産主義者のダック

@TheCommunistDuck悲しいことに、Scientificninjaはもうありません。web.archiveリンク
bobobobo

2

「シンプルな」ゲームを書くことでOpenGLを学びました:3Dテトリス

独自のシンプルなゲーム/アプリを作成してみてください:

  • 小惑星
  • ポン
  • シンプルなサイドスクローラー(プレイヤー/敵のモデルを読み込む方法を学ぶことができます。持っていませんか?Quakeモデルを使用してください)
  • 3D地形ジェネレーター

興味のある簡単なことをしてください!


2

iPhone向けのOrchard's CrapsゲームでOpenGL(ES)をいくつか行いますが、それは狂った3Dスキルを持つプログラマーによって処理されました。そのため、私はOpenGL(ES)を学んでいるので、私が話していることを理解し、チームと一緒にコーディングすることができます。

一連のチュートリアルで役立つとわかったサイトの1つは、Jeff LaMarcheのブログ(http://iphonedevelopment.blogspot.com)です。ここに彼のOpenGL投稿へのリンクがあります:http : //iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html

また、OpenGL.orgには、http//www.opengl.org/code/http://www.opengl.org/resources/features/という便利な2つのリンクが あり ます。

最善の方法は、上記で何度か述べました。飛び込んで、何か面白いことをして、面白いことをしてください。シーン、カメラ、マテリアル(シェーダー)を理解することがすべてです。これらの概念を理解したら、物理エンジン、衝突検出、粒子効果などを調べ始めることができます。すごい!(^_^)

頑張ってください、ケビン


2

OpenGLプログラミングガイドについては誰も話しませんでした。私はこの特定のエディションは持っていませんが、古いエディションはかなり良かったです。


1
それについてもっと教えてください。私はこれがスーパーバイブルとどのように優れている/異なるのか、そしてそのような大きな本を読む価値がある時間の価値があるのだろうか?
-DFectuoso


2

http://www.opengl-tutorial.org/

「最新の」OpenGLのチュートリアルがあります(3.0 / 4.0コア。たとえば、古いもの(glBegin / glEndなど)は教えられません)。チュートリアルではシェーダーを使用していますが、基本は非常に詳細に説明されており、その過程で強固な数学的基盤が構築されます。テキストは、コード*サンプルと有用な視覚化でうまくまとめられています。

中級のチュートリアルでは、QuaternionsLightmapsの使用などを扱います。

。* glmは数学ライブラリとして使用されます


1

OpenGLを学ぶ最良の方法はタスク指向であることに注意してください。何かして(ゲームに機能を追加するなど)、それを行うために必要なことを調べてください。

マニュアルやチュートリアルは、コンテキストがなくて退屈です。つまり、チュートリアルを超えて自分で達成したいものです。


-1

NeHeから始めて、画面に最初の三角形をすばやく表示します。3Dプログラミングの基本概念を理解するために、初心者向けチュートリアルをいくつか実行してください。OpenGL ESに言及しているように、3Dプログラミングの基本(マトリックスとは何か、それらの用途、スクリーン上の頂点を投影するために異なるマトリックスがどのように使用されるか、頂点は何かなど)を既に知っている場合、その後、NeHeで時間を無駄にしないことをお勧めします。なぜなら、それはあなたを遅くするかもしれないからです(後であなたが「学ばない」ことを教えることによって)。

それとは別に、私はそれを学ぶための最良の方法はやってみることであることに同意します。優れた最初の非ハローワールドプロジェクトは、2Dゲーム(または2Dゲームエンジン)です。2Dアプリケーションに最新のOpenGLを使用すると、多くの関連概念(たとえば、バッファーとシェーダーの使用)を学ぶことができ、3Dプロジェクトよりも手間がかかりません。その後、3Dアプリケーションの実行で学んだことを適用できます。


NeHeは時代遅れです。また、アートの作成はより簡単で、テクスチャ付きのクワッドを主に扱っていますが、3Dゲームを書く前に2Dゲームを書くのを難しくするコーナーケース(ベクトル外積など)がたくさんあります。ただし、3Dグラフィックスで2Dゲームプレイ(例:ピンポン、ブレイクアウトなど)のゲームは、純粋な2D / 3Dゲームよりも簡単かもしれません。
Exilyth

-4

まあ、私は何度も何度もneheのチュートリアルが最高だと言われてきました。あなたにもぴったりだと思います! http://nehe.gamedev.net/ 赤い本を買いました...


これは、ゼロから素晴らしい場所までの小さなチャンクの楽しいセットのようです、ありがとう!
DFectuoso

2
私は強く反対しなければなりません。はい、NeHeチュートリアルは長い間存在していましたが、非常に優れたスタイルはなかったため、今ではかなり時代遅れです。
アンドレアス

8
-1 Neheは古すぎます。
アクセルグナイティング

7
-1。neheからあらゆる種類の悪いことを学びました!
ガブリエルアイゼンバーグ

-1。NeHeは、そのチュートリアルに古いものと古いラベルを付ける必要があります。
クアジイルファン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.