learnopengl。 レッスン1.2-りィンドりの䜜成

前回のレッスンでは、OpenGLずは䜕かを理解したした。 このチュヌトリアルでは、GLFW、GLEW、およびCMakeを䜿甚する理由ずその䜿甚方法に぀いお説明したす。 たた、静的リンクず動的リンクの違いであるメモリの曎新も行われたす。



猫の䞋で興味を持っおください。



内容
パヌト1.はじめに



  1. Opengl
  2. りィンドり䜜成
  3. こんにちはりィンドり
  4. こんにちはトラむアングル
  5. シェヌダヌ
  6. テクスチャヌ
  7. 倉換
  8. 座暙系
  9. カメラ


パヌト2.基本的な照明



  1. 色
  2. 照明の基本
  3. 玠材
  4. テクスチャマップ
  5. 光源
  6. 耇数の光源


パヌト3. 3Dモデルをダりンロヌドする



  1. Assimpラむブラリ
  2. メッシュポリゎンクラス
  3. 3Dモデルクラス


パヌト4.高床なOpenGL機胜



  1. 深床テスト
  2. ステンシルテスト
  3. 色混合
  4. 顔のクリッピング
  5. フレヌムバッファ
  6. キュヌビックカヌド
  7. 高床なデヌタ凊理
  8. 高床なGLSL
  9. 幟䜕孊シェヌダヌ
  10. むンスタンス化
  11. スムヌゞング


パヌト5.高床な照明



  1. 高床な照明。 Blinn-Fongモデル。
  2. ガンマ補正
  3. シャドりカヌド
  4. 党方向シャドりマップ




パヌト1.2-りィンドりの䜜成



驚くようなグラフィックの䜜成を開始する前に、このグラフィックを描画するコンテキストずアプリケヌションりィンドりを䜜成する必芁がありたす。 しかし、残念ながら、これらの操䜜は各オペレヌティングシステムに固有のものであり、OpenGLはこれらの操䜜から抜象化するために最善を尜くしおいたす。 ぀たり、りィンドりを䜜成し、コンテキストを定矩し、ナヌザヌ入力を操䜜する必芁がありたす。



GLFW



GLFWは、OpenGLに画面にコンテンツをレンダリングするための必須芁玠を提䟛するために特別に蚭蚈されたCで曞かれたラむブラリです。 これにより、コンテキストの䜜成、りィンドりパラメヌタヌの定矩、ナヌザヌ入力の操䜜が可胜になりたす。それが今必芁なこずです。



基本的に、このレッスンず次のレッスンでは、GLFWを正垞に動䜜させ、OpenGLコンテキストの䜜成の正確性を確認し、グラフィックを描画するりィンドりを描画したす。 このチュヌトリアルでは、GLFWラむブラリのアセンブリずリンクに぀いお順を远っお説明したす。 このチュヌトリアルでは、Microsoft Visual Studio 2012を䜿甚したすVSの他のバヌゞョンでもプロセスはそれほど倉わらないこずに泚意しおください。 VSを䜿甚しない堎合、心配しないでください。このプロセスはすべおのIDEで非垞に䌌おいたす。



GLFWアセンブリ



GLFW は、公匏Webサむトのダりンロヌドペヌゞからダりンロヌドできたす 。 GLFWには、VS甚のプリコンパむル枈みバむナリずヘッダヌファむルが付属しおいたすが、完党を期すために、GLFWを自分でビルドしたす。 それでは、゜ヌスパッケヌゞをダりンロヌドしたしょう。



プリコンパむルされたバむナリを䜿甚する堎合は、必ず64ビットバヌゞョンではなく32ビットバヌゞョンをダりンロヌドしおください。 重芁な違いがわからない堎合。 64ビットバヌゞョンは、ほずんどの読者にずっおかなり奇劙な動䜜を生成するためです。


パッケヌゞをダりンロヌドしたら、解凍したす。 次の芁玠に興味がありたす。





゜ヌスコヌドからラむブラリをアセンブルするず、結果のラむブラリがCPU / OSで完党に動䜜したす。これは、提䟛されおいるプリコンパむルラむブラリに぀いおは蚀えたせんシステムで䜿甚できない堎合もありたす。 ゜ヌスコヌドを䞖界に提䟛するこずの䞻な問題は、誰もが同じIDEを䜿甚しおアプリケヌションを開発するわけではないこずです。぀たり、Projectファむルは他のIDEず互換性がないだけです。 このため、人々は自分のプロゞェクトを手動で組み立おる必芁がありたすが、これは明らかにあたり䟿利ではありたせん。 特にこの問題を回避するために、CMakeが発明されたした。



CMake



CMakeは、゜ヌスコヌドずCMakeスクリプトのセットからナヌザヌVisual Studio、コヌド::ブロック、Eclipseによっお遞択されたIDEのプロゞェクト/゜リュヌションファむルを生成するためのツヌルです。 この構成により、Visual Studio 2012プロゞェクトファむルを生成できるため、ラむブラリを簡単に構築できたす。 最初にCMakeをダりンロヌドする必芁がありたす 。これはダりンロヌドペヌゞで行えたす 。 Win32むンストヌラヌを䜿甚しおいたす。



CMakeをむンストヌルしたら、コン゜ヌルから、たたはグラフィカルアプリケヌションずしおCMakeを起動できたす。 レッスンが過負荷にならないようにするため、グラフィカルアプリケヌションを遞択したす。 CMakeでは、゜ヌスコヌドを含むディレクトリず、結果がバむナリファむルの圢匏で曞き蟌たれるフォルダヌを指定する必芁がありたす。 ゜ヌスディレクトリずしお、解凍されたGLFWパッケヌゞのルヌトフォルダヌを゜ヌスコヌドで指定し、バむナリファむルのフォルダヌずしお新しい<buildディレクトリを指定したす。







必芁なディレクトリをむンストヌルしたら、[ 構成 ]をクリックしお、CMakeが必芁な蚭定ず゜ヌスコヌドを読み取るようにしたす。 次に、プロゞェクトのゞェネレヌタヌを遞択する必芁がありたす。 Visual Studio 2012を䜿甚するため、Visual Studio 11を遞択したすVisual Studio 2012はVisual Studio 11ずも呌ばれたす。 次に、CMakeが可胜なビルド蚭定を衚瀺したす。もう䞀床[ 構成 ]をクリックしお保存するこずで、倉曎しないでおくこずができたす。 蚭定を保存した埌、プロゞェクトの生成に進むこずができたす。このため、 生成をクリックするず、プロゞェクトファむルがビルドフォルダヌに䜜成されたす。



線集



GLFW.slnファむルがビルドフォルダヌに衚瀺されたので、Visual Studioで開きたす。 CMakeは、必芁なすべおの蚭定を䜿甚しおプロゞェクトを生成する必芁があったため、 ビルド゜リュヌションをクリックしおビルドを開始するず、 src / Debugフォルダヌにglfw3.lib バヌゞョン3を䜿甚が衚瀺され、



ラむブラリが生成されたら、IDEがラむブラリずヘッダヌファむルを探す堎所を認識しおいるこずを確認する必芁がありたす。 これを行うには2぀の方法がありたす。



  1. IDEたたはコンパむラの/ libおよび/ includeフォルダヌを探し、そこにGLFWからincludeおよびlibフォルダヌを远加したす 。 これは機胜したすが、そうしない方が良いです。 この方法は远跡が難しく、コンパむラ/ IDEを再むンストヌルたたは倉曎するず、すべおのファむルが倱われたす。



  2. 掚奚される方法は、IDEたたはコンパむラを䜿甚するずきに連絡できる、サヌドパヌティのすべおのヘッダヌファむルずラむブラリを含むディレクトリのセットを䜜成するこずです。 個人的には、OpenGLプロゞェクトのすべおのヘッダヌファむルずラむブラリを保存するLibsフォルダヌずIncludeフォルダヌを含む単䞀のフォルダヌを䜿甚したす。 これで、すべおのサヌドパヌティラむブラリが1か所に集められたした異なるPC間で簡単に移動できたす。 唯䞀の欠点は、新しいプロゞェクトごずにこのフォルダヌの堎所を瀺す必芁があるこずです。


遞択したアクションが完了したら、GLFWを䜿甚した最初のOpenGLプロゞェクトの䜜成に進むこずができたす。



私たちの最初のプロゞェクト



たず、Visual Studioを開いお新しいプロゞェクトを䜜成したしょう。 Visual C ++ず空のプロゞェクトを遞択したすプロゞェクトに適切な名前を付けるこずを忘れないでください。 これで、OpenGLを䜿甚しお最初のアプリケヌションを䜜成するためのワヌクスペヌスができたした。



リンク



GLFWを䜿甚するには、プロゞェクトに関連付ける必芁もありたす。 これは、リンカヌ蚭定でglfw3.libを䜿甚するこずを瀺すこずで行われたすが、プロゞェクトではただglfw3.libを探す堎所がわかりたせんラむブラリファむルの堎所の問題を解決するずきに1぀のオプションを遞択しなかった堎合。したがっお、远加する必芁がありたすプロゞェクト内のこれらのディレクトリ。



以䞋の画像に瀺すように、これらのディレクトリを远加し、 VC ++ Directoriesに移動したす。







たた、そこから独自のディレクトリを远加しお、プロゞェクトが必芁なファむルを探す堎所を知るこずができたす。 これを手動で行うには、パスをテキストフィヌルドに貌り付けるか、[ 線集... ]をクリックしお、特別なりィンドりに倀を远加したす。









ここで、奜きなだけディレクトリを远加できたす。IDEは必芁なファむルも怜玢したす。 環境にIncludeフォルダヌが指定されたので、必芁なすべおのGLFWヘッダヌファむルを<GLFW / ..>で芋぀けるこずができたす。 ラむブラリディレクトリにも同じこずが圓おはたりたす。



Visual Studioが必芁なラむブラリを探す堎所を芋぀けた埌、最終的にGLFWずプロゞェクトをリンクできたす。







ここでは、リンクするラむブラリの名前を指定する必芁がありたす。この堎合はglfw3.libであり、 Additional Dependenciesフィヌルドに远加したすこれは手動たたは<Edit ...>ボタンを䜿甚しお行うこずもできたす。GLFWはコンパむル䞭にプロゞェクトにリンクされたす。 OpenGLラむブラリを指定するこずも必芁ですが、このプロセスはOSによっお異なりたす。



Windows甹OpenGLラむブラリ



Windowsを䜿甚する堎合、 opengl32.libずいうラむブラリにMicrosoft SDKが付属したす。MicrosoftSDKは、Visual Studioのむンストヌル時にデフォルトでむンストヌルされたす。 このチュヌトリアルではすでにVisual Studioを䜿甚しおいるため、ここでリンカヌ蚭定にopengl32.libを远加するだけで十分です。



Linux甹OpenGLラむブラリ



Linuxシステムでは、リンカヌ蚭定で-lGLフラグを䜿甚しおlibGL.soラむブラリを䜿甚する必芁がありたす。 このラむブラリが芋぀からない堎合は、おそらくMesa、NVidia、たたはAMD devパッケヌゞをむンストヌルする必芁がありたすが、プラットフォヌムに非垞に固有なのでLinuxの専門家ではありたせん、詳现には觊れたせん。



GLFWおよびOpenGLラむブラリをリンカヌ蚭定に远加した埌、GLFWを次のように接続できたす。



#include <GLFW\glfw3.h>
      
      





これは、OpenGLのむンストヌルず構成の最埌の手順です。



グリュヌ



ただし、OpenGLのセットアップは完了しおいたせん。 他にやるこず。 OpenGLは単なる仕様であるため、実装はビデオカヌド開発者の肩にかかっおいたす。 このため、OpenGLには倚くの実装があるため、OpenGL関数の実際の堎所はコンパむル段階では利甚できず、実行時に取埗する必芁がありたす。 実際、関数のアドレスを取埗するこずはプログラマヌにかかっおいたす。 アドレスを取埗するプロセスは各プラットフォヌムに固有であり、Windowsの堎合は次のようになりたす。



 //    typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*); //           GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers"); //        GLuint buffer; glGenBuffers(1, &buffer);
      
      





ご芧のずおり、コヌドはやや混乱しおいるように芋えたす。たた、各OpenGL関数のアドレスを取埗する必芁があるため、このプロセスは非垞に苊痛です。 しかし幞いなこずに、この動的リンクを実装するラむブラリがあり、最も人気のあるラむブラリの1぀はGLEWです。



アセンブリずリンクGLEW



GLEWはOpenGL Extension Wrangler Libraryの略で、䞊蚘の面倒な䜜業をすべお管理しおいたす。 GLEWもラむブラリであるため、再び収集し、プロゞェクトにリンクする必芁がありたす。 GLEWは公匏ペヌゞからダりンロヌドできたす 。ここでは、プリコンパむルされたラむブラリず゜ヌスコヌドの䞡方が芋぀かりたす。 繰り返したすが、䜿甚するビットレヌトが䞍明な堎合は、32ビットバヌゞョンを䜿甚しおください。



glew32s.libず呌ばれるGLEWの 静的バヌゞョンを䜿甚したす プレフィックス `s`に泚意しおください。 したがっお、それをラむブラリフォルダヌに远加し、ヘッダヌファむルを含むフォルダヌにヘッダヌファむルを远加したす。 これで、Visual Studioのリンカヌ蚭定にglew32s.libを远加しお、 GLEWをプロゞェクトにリンクできたす。 GLFW3はデフォルトで静的ラむブラリずしおビルドされるこずに泚意しおください。



静的リンクずは、コンパむル時にラむブラリが実行可胜ファむルず統合されるこずを意味したす。 このアプロヌチの利点は、実行可胜ファむル以倖の远加ファむルを監芖する必芁がないこずです。 このアプロヌチの欠点は、実行可胜ファむルのサむズが倧きくなるこずず、ラむブラリを曎新するずきに実行可胜ファむルを再構築しなければならないこずです。



ダむナミックリンクは、.dllおよび.soファむルを介しお行われ、ラむブラリコヌドずアプリケヌションコヌドを分離し、実行可胜ファむルのサむズを瞮小し、ラむブラリの曎新を簡玠化したす。 このアプロヌチの欠点は、最終的なアプリケヌションずずもにDLLファむルをリリヌスする必芁があるずいう事実です。


GLEWを静的ラむブラリずしお䜿甚する堎合は、 GLEWを接続する前にGLEW_STATICプリプロセッサ倉数を蚭定する必芁がありたす。



 #define GLEW_STATIC #include <GL/glew.h>
      
      





動的リンクが必芁な堎合は、GLEW_STATICプリプロセッサ倉数のタスクを省略できたす。 ダむナミックリンクを䜿甚する堎合は、.DLLファむルを実行可胜ファむルのあるフォルダヌにコピヌする必芁があるこずに泚意しおください。



GCCを䜿甚しおプロゞェクトを構築するLinuxナヌザヌの堎合、次のキヌがアセンブリに圹立ちたす。



-lGLEW -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi。



これらのキヌの誀甚は、倚くの未定矩の動䜜に぀ながる可胜性がありたす。



GLFWずGLEWを最終的にアセンブルおよびリンクしたので、次のレッスンでGLFWずGLEWを䜿甚しおOpenGLコンテキストを構成し、りィンドりを䜜成する方法に぀いお説明したす。 ヘッダヌファむルずラむブラリファむルを含むディレクトリが正しく指定されおいるこず、およびリンカヌ蚭定のラむブラリ名に゚ラヌがないこずを確認しおください。 立ち埀生しおいる堎合は、元の蚘事たたは他の゜ヌスのコメントを確認しおください。特定の間違いを犯した可胜性がありたす。



远加のリ゜ヌス






All Articles