web-dev-qa-db-ja.com

最新のOpenGLを学ぶ

過去数年間に同様の質問があったことは承知していますが、いくつかの調査を行った後でも、どこから何を学べばよいのか判断できません。また、C++ OOPとシェーダーアプローチを追加した最新のOpenGLプログラミングに関する現在の実際のビューを確認してください。また、いくつかのことについての私の実際の理解が有効であることを確認してください。

だから...現在OpenGL 4.2が出ています。どこかで読んだときに、dx11ハードウェア(どういう意味ですか)と、たとえばウィンドウを作成するための「サイド」ライブラリセットが必要です。

最も一般的なGLUTがあります。主な理由の1つは関数呼び出しであり、メインループの作成方法に自由がありません。一部の人々が言っ​​ていたように、それはゲーム用ではありませんでした。

GLFWもありますが、これは実際には非常に素晴らしく、私にはわかりやすいものです。どういうわけか人々はそれをGLUTと一緒に使用します。 (これはウィンドウの初期化だけでなく、他のユーティリティも提供しますか?)

また、SFMLとSDL(SDL <SFML imo)もありますが、どちらもOGLを操作するために奇妙なアプローチを必要とする場合があり、場合によっては実際には高速ではありません。

また、拡張機能ロードユーティリティであるGLEWもあります...待ってください... GLUT/GLFWはすでに拡張機能ではありませんか?興味を持つために本当に重要な拡張機能があるように、それを使用する理由はありますか?

これまでは、ウィンドウの作成(およびいくつかのユーティリティ)を行っていましたが、OGLは、3Dモデルも、テクスチャのロードも行いません。他にいくつのライブラリが必要ですか?

ここで教育の部分について触れましょう。有名なNeHeチュートリアルがあります。 WinApiを使用してCで書かれ、非常に不明確なコードと古いソリューションを使用していますが、それでも最も人気があります。 Red Bookなど、2.xや3.xなどのバージョンに関連するものもいくつか見つかりますが、4.xについて言及している(そして未完成の)チュートリアルはほとんどありません。

どうする?

38
Neomex

あなたがゲームを書いているなら、私はGLUTのようなものを避け、ゲームのレンダリングアーキテクチャにとって最も意味のある独自のラッパーを書きます。

また、サポートが最小限であるため、特定のプラットフォームの特定のハードウェアのみを対象とする場合を除き、この時点ではOpenGL 4.2も回避します。つまり、Mac OSX Lionの最新バージョンでOpenGL 3.2のサポートが追加されました。

過去数年で作られたマシンを最も包括的にカバーするには、OpenGL 2.1を中心にフレームワークを構築し、新しいOpenGL機能のサポートを追加します。全体的なデザインは同じでなければなりません。 「現在の」マシン、つまり2011年後半以降のマシンのみを対象とする場合は、OpenGL 3を中心にフレームワークを構築します。最新のハードウェアのみが4.2をサポートし、Windowsおよび一部のLinuxのみをサポートします。モバイルデバイスやコンソールをターゲットにしたい場合は、OpenGL ES 2.0を使用してください。

GLEWは、OpenGLアプリケーションを構築するためのツールキットであるGLUTとは異なり、異なるベンダーのハードウェア拡張である OpenGL Extensions をロードして管理します。 GLEWを使用することを強くお勧めします。GLEWは、実行されているハードウェアで使用可能な機能を判別するためのクリーンなメカニズムを提供し、関数ポインターを適切な関数に手動で割り当てる必要がないためです。

OpenGL SuperBible はかなり良い本です。 OpenGLシェーディング言語 も確認してください。最新のOpenGLで行うすべてのことには、シェーダーの使用が含まれます-固定機能はもうありません-したがって、最大の課題は、GLSLとシェーダーパイプラインのしくみを理解することです。

19
Gerald

だから...現在OpenGL 4.2が出ています。どこかで読んだときに、dx11ハードウェア(どういう意味ですか)と、たとえばウィンドウを作成するための「サイド」ライブラリセットが必要です。

DX11ハードウェアは...ボックスの側面に「DirectX 11をサポートする」と書かれたハードウェアです。ここで何を求めているのかわかりません。 Direct3Dとは何か、D3D 11とは何か、またはD3D 11と以前のバージョンとの違いは何ですか?

参考:D3Dは、OpenGLを使用してレンダリングハードウェアにアクセスする代わりのWindows専用の代替手段です。バージョン11は、APIの最新バージョンです。また、D3D11はD3D10に比べていくつか新しい点を追加していますが、初心者が必要とするものはほとんどありません。

OpenGLは、グラフィックス操作の特定のインターフェースを記述する仕様です。このインターフェイスの作成方法の作成はOpenGLの一部ではありません。したがって、すべてのプラットフォームには、OpenGLコンテキストを作成する独自の方法があります。 WindowsはWGLでWin32 APIを使用します。 Xウィンドウは、GLX関数でXウィンドウAPIを使用します。などなど。

GLUT、GLFWなどのライブラリは、これらの違いをすべて抽象化するライブラリです。 OpenGLウィンドウが作成および管理されるため、プラットフォーム固有の詳細でコードを汚す必要はありません。それらを使用する必要はありません。

確かに、OpenGLの学習に興味がある場合は、HWNDの処理方法など、プラットフォーム固有の細かい点を扱わないようにするのが最善です。

また、拡張機能ロードユーティリティであるGLEWもあります...待ってください... GLUT/GLFWはすでに拡張機能ではありませんか?興味を持つために本当に重要な拡張機能があるように、それを使用する理由はありますか?

これは別の誤解です。 GLUTはlibraryであり、拡張ではありません。 OpenGL拡張機能はOpenGLの一部です。 OpenGLは単なる仕様であり、ドキュメントです。現在使用しているOpenGLの実装は、OpenGLグラフィックスシステムを実装しますが、そのグラフィックスシステムに対する多くの拡張機能を実装することもあります。

GLUTはOpenGLの一部ではありません。それは単なるライブラリです。 GLUTの仕事は、OpenGLウィンドウを作成して管理することです。 GLEWもライブラリであり、 OpenGL関数の読み込み に使用されます。それは唯一の選択肢ではありませんが、人気があります。

これまでは、ウィンドウの作成(およびいくつかのユーティリティ)を行っていましたが、OGLは、3Dモデルも、テクスチャのロードも行いません。他にいくつのライブラリが必要ですか?

OpenGLはゲームエンジンではありません。専用グラフィックスハードウェアとのインターフェース用に設計されたグラフィックスシステムです。このジョブは、あらゆる種類のファイルから何かをロードするようなこととは何の関係もありません。はい、ゲームを作成するにはこれが必要ですが、前述のように、OpenGLはゲームエンジンではありません。

やりたいことを行うためにファイル形式を読み込む必要がある場合は、読み込みを行うコード(およびGLとのインターフェースに必要な形式の調整)を記述するか、それを行うライブラリをダウンロードする必要があります。 OpenGL Wikiは さまざまなタスクのためのかなり優れたツールのリスト を維持しています。

有名なNeHeチュートリアルがあります。 WinApiを使用してCで書かれ、非常に不明確なコードと古いソリューションを使用していますが、それでも最も人気があります。 Red Bookなど、2.xや3.xなどのバージョンに関連するものもいくつか見つかりますが、4.xについて言及している(そして未完成の)チュートリアルはほとんどありません。

どうする?

OpenGL Wikiは OpenGLの学習 のオンライン資料のリストを維持しています。

警告:恥知らずな自己宣伝が続く!

グラフィックスの学習に関する私のチュートリアル は非常に優れており、多くのセクションがあり、現在も積極的に取り組んでいます。 OpenGL 4.x固有の機能については説明していませんが、OpenGL 3.3は4.2と完全に互換性があります。これらのプログラムはすべて、4.xハードウェアで問題なく実行されます。

37
Nicol Bolas

現在、最新のOpenGLについても学習しています。また、適切なリソースを見つけるのに苦労しましたが、ここで私がこれまでに発見したものがあります。

私は良い本を探して、結局 OpenGL ES 2.0プログラミングガイド で終わりました。これは、現在のOpenGLを学ぶのに最適な選択だと思います。はい、本はOpenGL ESについてですが、怖がらせないでください。 OpenGL ES 2.0の良い点は、APIの遅い部分がすべて削除されているため、デスクトップOpenGLに非常に近いにもかかわらず、APIを習得することで悪い習慣がつかないことです。 OpenGL ES 2.0をマスターすれば、かなり簡単に学習できると思います。

一方で、デスクトップOpenGLにあるようなウィンドウライブラリなどの混乱はないので、OpenGL ESの本はあなたを助けません。どのライブラリを使用するかは非常に主観的だと思いますが、これまでのところ、SDLで ImageMagick および Open Asset Import Library を使用して問題なく管理しています。

さて、この本は良い助けになりましたが、それとは別に、最新のOpenGLをゼロから LinuxでのOpenGL開発 に教えるチュートリアルのニースコレクションもあります。 (それでも、名前は他のOSで有効だと思います。)この本、チュートリアル、および1つか2つ Orange Book は、最近のOpenGLの基本を理解するのに十分です。私はまだこの地域のマスターではありませんが、それは間違いなく私を始めたきっかけです。

6
Antti

すべてのチュートリアルと例で古いプロジェクトファイル、リンク切れなどが使用されている最近のOpenGLに参加するのは大変なことであり、あなたが助けを求めた場合、同じ古いチュートリアルに直接導かれることに同意します。

私は最初はNeHeのチュートリアルと本当に混乱していましたが、Cについて少し理解し、UNIXでライブラリをコンパイルするなどの基本的なことを理解すると、すべてがうまくいきました。

テクスチャのロードに関しては、SOILをお勧めします: http://www.lonesock.net/soil.html

よくわかりませんが、正しくコンパイルできなかったのを覚えていますが、それが当時の私の経験の低さだったのかもしれません。問題が発生した場合は一言お願いします!

もう1つの便利なヒントは、Linux VMを実行して、NeHe Linuxのサンプルコードをダウンロードしてそのままコンパイルすることです。GLUTが必要です。

また、主にGLUTがアクティブに維持されていないため、GLUTよりもGLFWを優先します。

幸運を!

3
oskob

最近のOpenGLの主要なポイントはテッセレーションと新しいタイプのシェーダープログラムなので、OpenGL 4テッセレーションのスタンドアロンチュートリアルから始めることをお勧めします。つまり、 http://prideout.net/ブログ/?p = 48

マニュアルとチュートリアルの後、良いフォローアップとして、「新しい」OpenGL 3/4に基づいたオープンソースエンジンを調べます。開発者の一人として、私は Linderdaum Engine を指摘します。

2
Sergey K.