0

OpenGLを使用して単純な3Dモデルローダーに取り組んでおり、テクスチャサポートを追加したいと思いました。しかし、不必要に画像ライブラリを書き直したくないので、テクスチャマッピングに関するNeHeチュートリアルで学んだSOIL(Simple OpenGL Image Library)をダウンロードしました。何度も画像を読み込んでOpenGLに渡すのに役立ついくつかの非常に便利な関数があります。

問題はこれです:NeHeチュートリアルコードでは、SOIL関数

SOIL_load_OGL_texture(char *, param,param,param) 

約束どおりであり、ポリゴンは正しい画像でマッピングされます。ただし、OBJファイルとMTLファイル(3Dモデルファイル)をロードするクラスを作成しました。SOIL関数を使用してこのクラス内にテクスチャをロードしようとすると、プログラムがクラッシュします。

  • 私はGNUC++をCode::Blocksで使用しています(このコードもDev-C ++で試しました)
  • -g -Wallを使用しても、コンパイラからエラーや警告は表示されません。
  • プロジェクトにすべてを適切にリンクして含めました(NeHeコードをコピーして貼り付けると、正しく実行されます)。
  • SOILコマンドはどのクラス内でも機能しません(SOIL関数のみを実行する別のクラスを作成しようとしましたが、同じ問題が発生しました)。
  • 関数に渡されるファイルパスはすべて正しいです。スラッシュとバックスラッシュのすべての形式で、相対および絶対を試しました。NeHeコードで機能した絶対パスをコピーしてコードに貼り付けましたが、機能しません。
  • コードの残りの部分は正常に機能します-アンビエント/ディフューズなどでシェイプをレンダリングできます。色やその他の設定が適切に適用されました。
4

1 に答える 1

3

その関数を呼び出しているときに、有効なOpenGLコンテキストがないように聞こえます。

openglコンテキストが初期化された後にのみSOILが呼び出されることを確信していますか?(たとえば、プログラムの初期化時に構築されるオブジェクトの静的構築はありません)。これを確認する簡単な方法は、openglの初期化にブレークポイントを設定し、BPにヒットしたかどうか、またはプログラムが最初にクラッシュしたかどうかを確認することです。

また、SOIL呼び出しがopenglコンテキストと同じスレッド上にあることを確認してください。

于 2012-08-29T17:27:35.370 に答える