web-dev-qa-db-ja.com

OpenGLファイルの違いglew.hとgl.h / glu.h

Windows 7 ProfessionalEditionにデフォルトで含まれているgluおよびglヘッダーファイルを使用してOpenGLプログラムを構築しました。今、私はOpenGLゲーム開発を説明する本を購入しました。この本の著者は、私のプロジェクトにglewヘッダーを含める必要があると述べました。これを実行した後、未解決の外部シンボルエラーが発生しました。

だから、今私は本当に混乱しています。以前、プログラムでglBeginステートメントとglEndステートメントを使用しました。ここで、glBindBuffersやglGenBufferなどを操作する必要がありますが、次のような未解決の外部シンボルエラーが発生します。

1>cWindows.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBufferData
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewGenBuffers

これらのヘッダーファイルの違いと私がそれらと何をしなければならないかを説明できる人はここにいますか?

私は何度もゴーグルをしましたが、さまざまなサイトで「グリー」や「グルト」のようなもっと紛らわしい言葉があります。

16
SKiD

ここでは、3つの異なるものを混ぜ合わせています。

  1. OpenGL
  2. openGLの一部ではないGLユーティリティ(GLU)
  3. およびGL Extension Wrangler(GLEW)

GLEWとGLUは完全に異なるものであり、互いに置き換えることはできません。

_GL/gl.h_はベースのOpenGLヘッダーであり、OpenGL-1.1関数とトークンの宣言を提供します。バージョン1.1以降の場合は、OpenGL拡張メカニズムを使用する必要があります。これは退屈で退屈な作業であるため、使いやすいライブラリにすべての汚い詳細が詰め込まれたGLEWプロジェクトによって自動化されています。このライブラリの宣言は、ヘッダーファイル_GL/glew.h_にあります。 OpenGL拡張機能は基本的なOpenGLなしでは意味がないため、GLEWヘッダーには通常のOpenGLヘッダーが暗黙的に含まれ、_GL/glew.h_を含めると、_GL/gl.h_を含める必要がなくなります。

次に、便利なメソッドのセットであるGLUがあります。これは、非常に時代遅れであり、最新のOpenGLプログラムでは使用しないでください。最新のGLUはないので、忘れてください。とにかく、その宣言はヘッダー_GL/glu.h_(あなたが尋ねていたもの)によって利用可能になります。

ただし、発生するエラーはインクルードファイルとは関係ありません。これらはリンカーエラーです。宣言を含めるだけで、仕事の半分になります。残りの半分は実際の定義をリンクしており、それらはライブラリファイルのヘッダーにはありません。 * nix OSでは_libglew.so_または_libglew.a_、Windowsでは_glew.lib_または_glew32.lib_または_glews.lib_または_glew32s.lib_。静的バージョン(「s」のないバージョン)を使用していない場合は、適切なDLLもインストールしておく必要があります。

したがって、GLEWを使用するには、ヘッダーを含める必要がありますおよびリンカーオプションのライブラリのリストに追加します。また、プログラムでOpenGLコンテキストを取得したら、glewInit();を呼び出す必要があります。

44
datenwolf
  • gl:これはOpenGLバージョン1.1のベースヘッダーファイルです。つまり、バージョン1.1以降の機能を使用する場合は、これに拡張ライブラリを追加する必要があります。
  • glew:OpenGL拡張ラングラーライブラリ。これは、OpenGL拡張機能をロードするためのクロスプラットフォームライブラリです。このライブラリを初期化すると、実行時にプラットフォームとグラフィックカードがチェックされ、プログラムで使用できる機能がわかります。
  • gl:これはOpenGLユーティリティライブラリであり、長い間更新されていません。このヘッダーファイルを使用する必要はありません。
  • glut:WindowingAPI用のOpenGLユーティリティツールキット。これは、中小規模のOpenGLプログラムに適しています。より洗練されたウィンドウライブラリが必要な場合は、Linuxマシン用のGTKやQtなどのネイティブウィンドウシステムツールキットを使用してください。
  • glfw:OpenGLフレームワーク。ウィンドウを作成し、イベントを処理するための別のマルチプラットフォームライブラリ。 FreeGlutは代替として使用できます。 glfwはゲーム開発用に設計されています。
  • glm:OpenGL数学。これは、ベクトルおよび行列演算の実装に役立ちます。

私はOpenGLに慣れていないので、間違っている場合は訂正してください。

25
Jiho Noh