こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

OpenGLの3Dテクスチャ

 最近OpenGLの勉強を始めました。Windows XP + Visual C++6.0の環境で幾つかのサンプルプログラムは通りました。そこで3Dテクスチャを試したところ以下のエラーが出ました。

 ・ 
 ・
ModelMatrix ( 1.00 0.00 ・・・ )
VolumeSize(Compressed) 160 160 34
finished reading data!Assertion failed: 0, file ファイル名、行番号

メッセージから見るとボリュームデータのヘッダは読めたが、以下のglTexImage3Dのアドレス取得に失敗したようです。原因と対処の方法をお教え下さい。

 void *extproc;
 extproc = (void *) wglGetProcAddress( "glTexImage3D" );
 if ( extproc == NULL )
   {
   _ASSERT(0);
   return;
   }

投稿日時 - 2005-09-08 15:28:47

QNo.1635609

困ってます

質問者が選んだベストアンサー

OpenGLの特定機能が有るか無いかはDLLではなくハードウェアの問題です。
(又はVGAカードのドライバの問題)

まずは[1]からtoglinfo102glut.exeをダウンロードして実行して下さい。
このプログラムは現在のPC環境におけるOpenGLの情報を調べてくれます。

生成されたtoglinfo.txtから
GL_VERSION, GL_RENDERER, GL_VENDORの項目についてと、
GL_EXTENSIONSから GL_EXT_texture3D が存在するか
を教えて下さい。

あと、どの様なPCを使用しているのかも、ついでに教えて下さい。

[1] http://www.asahi-net.or.jp/~yw3t-trns/toglinfo/toglinfo.htm

投稿日時 - 2005-09-12 18:38:15

補足

bulgaris 様

重ねて御回答頂き有難うございます。

toglinfo.batの出力は以下の通りでした。

---------------------------------------
GL_VERSION: 1.1.0
GL_RENDERER: GDI Generic
GL_VENDOR: Microsoft Corporation
GL_EXTENSIONS: GL_WIN_swap_hint
GL_EXT_bgra
GL_EXT_paletted_texture
---------------------------------------

使用PCは以下の通りです。

 購入年度   2001年
 型番   Dell PWS340
 CPU   P4 2GHz
 メモリ  512MB
 HDD      80GB * 2
 ビデオボード ATI Radeon 7000 / Radeon 7000 VE family
 OS      Windows XP SP2

                         以上

投稿日時 - 2005-09-13 22:29:30

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

現在の環境はOpenGLのバージョンが1.1と低く、拡張機能もGL_EXT_texture3Dがサポートされているために3次元テクスチャの機能が使えません。
そのためwglGetProcAddress("glTexImage3D")がNULLを返すものと思われます(*1。

対処法1: どうしても3次元テクスチャが使いたい場合
ATI RADEONを使用しているにも関わらず、GL_RENDERERでGDI Generic とか GL_VENDORでMicrosoft Corporationとか表示されるのが気になる(*2 ので、ドライバが正しくインストールされているのか確認してみる。
ドライバを正しくインストールしたにも関わらず、GL_VENDORがMicrosoftのままだったり、OpenGLのバージョンも低いとか、GL_EXT_texture3Dがサポートされないままだったら、ビデオカードを新しいもの(*3 に買い換える必要があります。

対処法2: 3次元テクスチャを使用する理由が特に無い場合
とりあえず3次元テクスチャの事は忘れて、OpenGLの勉強を進めましょう。

*1: 書き忘れていましたけど、wglGetProcAddressがNULLを返す理由が、ANo.1で列挙した"考えられる問題点"になります。
*2: toglinfoのWEBページに掲載している参考資料を見ると、ATI Radeon X800 XTを正しく使っている場合は、そのあたりの表示もATI絡みの内容になる。
*3: 対応するOpenGLのバージョンが、より上位であるビデオカードの意。

参考URL:http://www.kakaku.com/sku/pricemenu/videocard.htm

投稿日時 - 2005-09-14 04:29:20

ANo.1

考えられる問題点
1: OpenGLのバージョンが古いために3次元テクスチャが使えない(OpenGL1.2以上から対応)[1,2]
2: レンダリングコンテキストを作っていない[3,4]

対処法
1: 他のVGAカードで試してみる
2.1: GLUTを使っているのであればglutInit()かglutCreateWindow()を読んだ後にwglGetProcAddressを使う
2.2: wglCreateContextでレンダリングコンテキストを作った後にwglGetProcAddressを使う
2.3: GLEWを使う[5]

[1] http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20040212
[2] http://www.asahi-net.or.jp/~yw3t-trns/opengl/version/
[3] http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/ntopnglr_6yer.asp
[4] http://www.devmaster.net/articles/opengl-extensions/
[5] http://chihara.naist.jp/people/STAFF/imura/computer/OpenGL/glew/disp_content

・・・と、wglCreateContextやwglGetProcAddressを使ったことも無い自分が答えて見ました。

投稿日時 - 2005-09-09 05:37:22

補足

bulgaris 様

 詳細な回答を有難うございます。
先ずはOpenGLの更新日付を調べました。以下の通りで前世紀のものも混じっています。そこでMicrosoftとSGIのサイトを見ましたが同程度の古さでした。OpenGL1.2以降をダウンロードするには如何すればよいですか?

C:\Program Files\Microsoft Visual Studio\VC98\Include\GL
 gl.h2003/02/19
 glu.h1998/04/26
 glut.h2002/12/26

C:\Program Files\Microsoft Visual Studio\VC98\Lib
 glu32.lib1998/05/13
 glut32.lib2001/11/08
 Opengl32.lib1998/05/13

C:\WINDOWS\system32
 glu32.dll2004/08/04
 glut32.dll2001/11/08
 opengl32.dll2004/08/04

投稿日時 - 2005-09-10 19:30:52

お礼

bulgaris 様

ATI RADEON 7000のドライバを再インストールすべく、ATIのサイトを調べましたが古いボードのためかドライバが見付かりませんでした。ビデオ・ボード或いはPC全体を更新するまで3次元テクスチャの事は忘れ、出来る範囲でOpenGLの勉強を進めることと致します。再三にわたる丁寧で正確な御回答を有難うございました。

投稿日時 - 2005-09-15 22:02:24

あなたにオススメの質問