ほとんどのチュートリアルが古くなったときにOpenGLで開始する[終了]


16

このような質問はすでにたくさんあると思いますが、OpenGLライブラリの絶え間ない更新はそれらをすべて捨て去り、1、2か月後には、ここでの答えは再び役に立たなくなります。

C ++を使用してOpenGLでプログラミングを開始する準備ができました。動作するコンパイラがあります(DevCpp。VC++に切り替えるように頼まないでください。理由を聞かないでください)。現在、OpenGLを使用したプログラミング方法についての堅実なチュートリアルを探しています。私のアシスタントは、NeHe Productionsが提供するチュートリアルを見つけましたが、私が知るようになったとき、それはまさしく時代遅れです!(ただし、OpenGLキャンバスをサポートする基本的なウィンドウをまとめました)

それから私はオンラインに行き、どうやらfreeglutを使っているOpenGL SuperBibleを見つけましたか?しかし、私が知りたいのは、SuperBible 5th editionがもう最新のものであるかどうかです。私が見つけたfreeglutへの提案は、最新バージョンは2.6.0でしたが、現在は2.8.0であると言いました!

  • OpenGL SuperBibleは今でも良い、そしてかなり最新のスタート地点ですか?
  • OpenGLを学ぶのに最適な場所はありますか?
  • DevCppインクルードディレクトリ(GLにあるかもしれません)に単にfreeglutを保存することは許可されていますか、それとも重要な手順はありますか
  • 私はまだ始まったばかりなので、私が尋ねるとは思わなかったコメントや提案はありますか?

@dretaは私のためにいくつかのことを解決したので、今、私は何を尋ねるべきかについてのより良いアイデアを持っています:

OpenGLに直接アクセスする代わりに、ラッパーライブラリを使用してOpenGLから始めたいと思います。
初心者にとっては、プログラミングや良い結果を得るのは簡単だと思いますが、まだすべての汚れた詳細を理解する必要はありません(@stepheltonが述べたように)。

問題は、サポートされなくなった関数への未定義の参照がないライブラリが見つからないことです。Freeglutは動作可能に聞こえますが、それでもGLUを使用しています。
誰も私ができることを知っていますか?
また、最初のSuperBibleのソースをコンパイルしようとしましたが、GLAPIがタイプとして定義されていないため、GLUライブラリで発生したエラーが発生しました。

SuperBibleを使用したいのですが、これを修正する方法がわかりません。


2
GCCに切り替える必要があります。
-notlesh

DevCppは単なるIDEです。GCCを実行します(具体的にはmingw)。しかし、言及されて以来、Eclipse CDTは過去10年間放棄されていなかったため、望ましいでしょう。
キャスパーベイヤー

4
@Casper DevCppレガシーの継承者はCode :: Blocksであり、引き続き定期的に更新されます。
アレックスシェパード

1
OpenGLのラッパーライブラリが必要な場合は、SFMLを試してみることをお勧めします。SFMLは、ウィンドウ作成、タイマーなどの通常のものを提供すると同時に、テキストや単純な図形を描画することもできます。SFML関数と生のAPI呼び出しを組み合わせて、いつでも好きなときに「生の」OpenGLを使用するようになります。
オスカーN.

1
タイトルに「{CLOSED}」を追加して質問を「閉じる」ことはできません。質問はモデレーターによって閉じられるか、十分なユーザーが質問を閉じるために投票した場合。編集内容をロールバックします。モデレーターがタイトルを閉じることにした場合、「CLOSED」がタイトルに自動的に追加されます。
bummzack12年

回答:


19

私たちの居住者であるニコルボーラスは、最新のグラフィックプログラミングに関するオンラインブックを管理しています。最新のOpenGLを使用しており、すべてが消費しやすいペースで導入されているため、開始するのに適しています。私はこれを使用して最新のOpenGLを学習してきましたが、過去2か月間、驚異的なことをしてきました。

あちこちに少しの知識があります。OpenGL wikiは非常によく管理されています。コードは「ベストプラクティス」ではなく、OpenGLバージョンに関してはあいまいな点がある場合もありますが、まれな場合を除き、素晴らしいリソースです。

GLSLについて学びたい場合は、lighthouse3DのGLSLコアチュートリアルがあります。これは私がサイトで「信頼」する唯一のコア知識ですが、残りは時代遅れになりがちです。

最新のOpenGLの仕組みを理解し始めると、特定の情報を簡単に探し、古いコードを除外し、最も重要なこととして仕様を読むことができます。どこかから始める必要があります。

すべてではありませんが、実際に利用可能なOpenGLブックのほとんどは時代遅れです。新しいSuperBibleはある種のフリークであり、誰にもお勧めしません。OpenGL 4.1向けのOpenGLプログラミングガイドは9月16日にリリースされますが、残念ながら第7版では非推奨のコードが使用されるため、待つ必要があります。

そしてもちろん、ここでいつでも質問をすることができます。


1
SuperBibleを提案しないのはなぜですか?
コードスミス

3
@AUTO SuperBibleの第5版では、OpenGLのカスタムラッパーを使用して「アクセス可能」にします。多くの例では、カスタムラッパーを過度に使用しています。OpenGLのコア仕様であるサポート対象については説明しません。非推奨のOpenGLを明示的に学習する必要がない場合は、存在することさえ忘れてください。それを学ぶ意味はありません。コア仕様は、はるかに明確で強力です。
-dreta

@AUTOコアの仕様は、最初ははるかに要求が厳しいため、良いことです。レンダリングプロセスの大部分を処理する必要があり、それを完全に理解して制御できます。非推奨コードよりも多くの可能性を開きます。その後、もしあなたがあなたのOSのAPIとその下のOpenGLをglutのようなものなしで学ぶことができたら、あなたは不思議の国にいます。
-dreta

それでは、重要な質問をさせてください。GLUライブラリは非推奨であり、完全にサポートされていないようです。仕様を使用することで、GLUの必要性を回避して直接アクセスできますか?そのような場合、GLUライブラリによって参照される存在しない関数へのリンカエラーはこれ以上発生しませんか?
コードスミス

@AUTO GLUは完全に不要です。グラフィックプログラミングクラス中に10フィートの棒で触れただけです(非推奨のコードを使用する必要があり、苦労しました。標準はレッスンプログラムよりも速く変更されると思います)。非推奨のコードを支援するライブラリにすぎません。GLUを使用してコードを設定している場合、おそらく悪臭を放ちます。
-dreta

1

この質問が出されてからしばらく経ちましたが、これがあなたと同じ質問をしている人々の助けになることを願っています。

OpenGLのミニブックを読んで始めましたarcsynthesis.org。誰が書いたのかわかりません。サイトの登録が失効したか何かが見えますが、http//web.archive.org/web/20140209181347/http//www.arcsynthesis.org/gltut/で見つけることができるはずです。OpenGL 3.3を使用しているため、最新のパイプラインとそれに伴うすべてのプラクティスを使用しますが、テッセレーションやコンピューティングシェーダーにさらされることはありません。

見る価値のあるもう1つのサイトはhttps://open.gl/です。それは非常に初心者に焦点を当てているようで、上記の資料ほど深く掘り下げていませんが、始めたばかりの人にとっては良い出発点になるかもしれません。

ヘルプが必要な場合は、忘れずにOpenGL wikiを読み、関数名をgoogleしてください。Wikiの一部のページは完全に役に立たないが、他のページは参考資料としても学習資料としても非常に役立つ。


1
受け入れられた答えで言及された人はそれを書いたニコル・ボーラス-gamedev.stackexchange.com/users/8240/nicol-bolas
ジェシードーシー

0

これらの古いチュートリアルは、まだ初心者に非常に関連しています。実際、最近のバージョンのOpenGLではなく、そこから始めることをお勧めします。最近のバージョンでは、ジオメトリを描画する簡単な方法(つまり、即時モード描画)のいくつかを破棄しています。

最近のバージョンでは、頂点の配列を準備して送信し、指定した配列で頂点がどのように配置されているかをビデオカードに伝える必要があります。これらはデバッグするのが面倒です。

一部のバージョン(OpenGL ES 2.x)では、独自のライティング方程式を(フラグメントシェーダーの形式で)提供し、独自の頂点データを変換して、目的の画面(頂点シェーダー)に表示する必要があります。これはデバッグがさらに難しく、初心者には適していません(私の意見では)。

ですから、実際には、それらのNeHeチュートリアル(など)に戻って、そこから始めることをお勧めします。それらは「古くなっている」かもしれませんが、それでも動作します。OpenGLのレンダリングパイプラインで実際に何が起こっているのかを理解し始め、これらを機能させる数学的な概念のいくつかを感じたら、次の方法のいくつかを調べる準備が整います。 OpenGLでのレンダリング。


実際には動作しません。それが私がこの質問を投稿した理由です。非推奨のgluPerspective関数を使用しており、絶対的な代替はありません。
コードスミス

1
これはOpenGL関数ではありません。別のライブラリによって提供される別個のユーティリティ関数です。簡単にコードを見つけることができます。それほど難しくありません。
-notlesh

感謝しますが、使用方法がわからない不完全な代替物を見つけました。それは引数「float * matrix」を受け入れますが、古いものはいくつかの内部マトリックスを使用します。それなら何を入れますか?
コードスミス

「gluPerspective implementation」のためにグーグルで最初にヒットしたのはまさにあなたが探しているものです。glFrustumを呼び出しますが、これはOpenGLの最近のバージョンでは使用できません(ES 2.xには含まれていません)。それでも、実装を見つけるのはそれほど難しくありません。
-notlesh

0

他の人が言ったように、ほとんどの本は非推奨または高度すぎます。それにもかかわらず、私はSuperBibleの第5版をお勧めしますが、OpenGLで何ができるかについての簡単な概要を取得し、ビュー/投影などのようなものに慣れるためだけです。

すぐに最新のOpenGLに飛び込むと、最初は圧倒される可能性があるため、非推奨のバージョンで基本的なことを行うことを学ぶことを検討してください。

また、最近見つけた優れたチュートリアルを含むサイトを追加したい http://ogldev.atspace.co.uk/


おかげで、私はそのチュートリアルをチェックします。しかし、OpenGL SuperBibleを使用するために、私の質問はまだ残っています:freeglutはそれに基づいているので、どうすればGLUを修正できますか?
コードスミス

@AUTO:FreeGLUTはGLUに「基づいていない」わけではありません。一部の FreeGLUT関数はGLUを呼び出しますが、これらの関数を呼び出さなければ問題はありません。
ニコルボーラス

しかし、SuperBibleがこれらの関数を呼び出す可能性はありませんか?そして、もしそうなら、私はそれを 使用する ことできません
コードスミス

本当に、私の意見では、SuperBibleで提供されるソースコードに煩わされることはありません。それを読んでくださいが、すべてをゼロから作ってみてください。GLUの問題について、私の一番の推測は、ライブラリを正しく構成/インストールしていないことです。MinGWの最新バージョンをダウンロードします。また、freeglutの最新バージョンをダウンロードしてコンパイルするか、コンパイル済みのライブラリを見つけます。とにかく、開始方法の計画に多くの時間を費やすのではなく、いくつかのことを学び始める必要があります。
グリーハート

@AUTO:なぜSuperBibleがそれらを呼び出すのでしょうか?それらを呼び出した場合、SuperBibleのコードは機能しません。それが彼らを呼ばない理由です。
ニコルボーラス

0

残念ながら、arcsynthesis.org(受け入れられた回答に記載されているサイト)はダウンしているようです。(編集:このリンクで利用可能です!)。

OpenGL 4のAnton Gerdelanのチュートリアルは非常に読みやすく、2014年半ばの時点で最新です。最初のいくつかは無料で、残りはアマゾンで入手できます。アマゾンでは素晴らしいレビューがあり、少額の価格で利用できます。これまでのところ私は満足しています。

http://www.opengl-tutorial.org/には、OpenGL 3.3+の無料のチュートリアルがいくつかあります。それらは2012年にさかのぼりますが、他の情報源にとっては良い補足資料かもしれません。


OGLDevは最新で、詳細で、無料です。ogldev.atspace.co.uk/index.html
ヤッタバイト


それが利用可能であることを見るのは素晴らしいです!これらの資料も確認します。
iHateCamelCase
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.