39

過去数年間に同様の質問があったことは承知していますが、いくつかの調査を行った後でも、どこから何を学ぶべきかを決めることができません. また、より多くの 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 で記述されており、非常に不明確なコードと時代遅れのソリューションを備えていますが、依然として最も人気のあるものです。2.x や 3.x などのバージョンに関連する Red Book のようなものがありますが、4.x に言及している (そして未完成の) チュートリアルはほとんどありません。

何と一緒に行きますか?

4

6 に答える 6

37

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

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

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

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

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

確かに、 OpenGLの学習に興味がある場合は、HWNDの処理方法など、プラットフォーム固有の特徴を扱うことは避けるのが最善です。

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

これは別の誤解です。GLUTはライブラリであり、拡張機能ではありません。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固有の機能については説明していませんが、OpenGL3.3は4.2と完全に互換性があります。これらのプログラムはすべて、4.xハードウェアで問題なく動作します。

于 2012-01-04T21:21:29.790 に答える
19

あなたがゲームを書いているなら、私は 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 Shading Languageもチェックしてください。最新の OpenGL で行うことはすべてシェーダーを使用することになり、固定機能はなくなります。そのため、最大の課題は GLSL とシェーダー パイプラインがどのように機能するかを理解することです。

于 2012-01-04T21:06:29.277 に答える
6

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

良い本を探した結果、OpenGL ES 2.0 Programming Guideにたどり着きました。これは、現在の OpenGL を学習するための最良の選択だと思います。はい、この本は OpenGL ES に関するものですが、怖がらせないでください。OpenGL ES 2.0 の良い点は、API の遅い部分がすべて削除されているため、それを学習することで悪い習慣を身につけることがなく、それ以外の場合はデスクトップの OpenGL に非常に近く、いくつかの機能が欠落しているだけです。 OpenGL ES 2.0 を習得すれば、かなり簡単に学習できると思います。

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

さて、この本はとても役に立ちましたが、それとは別に、Linux での OpenGL 開発で最新の OpenGL をゼロから教える素晴らしいチュートリアルのコレクションもあります。(それにもかかわらず、名前は他の OS でも有効だと思います。) この本、チュートリアル、そして時々オレンジブックを一瞥するだけで、最新の OpenGL の基本を理解するのに十分です。私はまだこの分野の達人ではないことに注意してください。

于 2012-01-04T21:07:52.940 に答える
3

すべてのチュートリアルと例で古いプロジェクトファイルや壊れたリンクなどが使用されている最近、OpenGLにアクセスするのは難しいことであり、助けを求めると、同じ古いチュートリアルに誘導されることに同意します。

最初はNeHeチュートリアルと本当に混同していましたが、C、UNIXでのライブラリのコンパイル、およびその他の基本的なものについて少し理解を深めると、すべてがうまくいきました。

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

よくわかりませんが、正しくコンパイルするのに苦労したことを思い出しますが、それは当時の私の経験の少なさだったのかもしれません。困ったら一言お願いします!

もう1つの便利なヒントは、Linux VMを実行してから、NeHeLinuxサンプルコードをダウンロードしてすぐにコンパイルできるようにすることです。それが機能するためにはGLUTが必要だと思います。

また、主にGLUTが積極的に維持されていないため、GLUTよりもGLFWの方が好きです。

幸運を!

于 2012-01-04T21:20:28.297 に答える
2

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

マニュアルとチュートリアルの後は、「新しい」OpenGL 3/4 に基づいたオープンソース エンジンを調べてみることをお勧めします。開発者の 1 人として、私はLinderdaum Engineを指します。

于 2012-05-14T20:16:06.947 に答える