19

Windows 7 Professional エディションにデフォルトで含まれる 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

これらのヘッダー ファイルの違いと、私がそれらと関係があることを説明できる人はいますか?

私は何度もゴーグリングしましたが、別のサイトには「glee」や「glut」などのもっと紛らわしい言葉があります。

4

2 に答える 2

50

ここで3つの異なるものを混同しています:

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

GLEW と GLU はまったく別のものであり、互いに置き換えることはできません。

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

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

ただし、表示されるエラーはインクルード ファイルとは関係ありません。これらはリンカー エラーです。宣言を含めるだけでは、仕事の半分に過ぎません。残りの半分は実際の定義をリンクしており、それらはライブラリ ファイルのヘッダーにはありません。libglew.soまたはlibglew.a* nix OS、glew.libまたはglew32.libまたはglews.libまたはglew32s.libWindows。静的バージョン (「s」がないもの) を使用しない場合は、適切な DLL もインストールする必要があります。

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

于 2012-08-25T14:15:22.937 に答える