Short cuts: [Prev][Up][Next][Return to Top]
GLUTで3次元 1999.8
UNIX MAGAZINE 1999.8, pp.144 - pp.151に興味深い記事が載ってました。
三次元グラフィクスをOSに依存せずに実現できる方法がある。ということ。
それが小手先のせこい方法ではなく、3D方面ではつとに有名なOpenGLを使う方法
なのです。
雑誌のサンプルコードは確かにOS依存なインクルードファイルは一切なし。glut.h
のみ。windows.hもstdio.hもなし。何て素敵!
DirectXだとWin32に限定されますが、OpenGLならUNIXだろうがIRISだろうが何だって
動く訳で、わくわくです。
【ダウンロード】
Win32版のURLはここだそうでして、現にここから落とせました。
http://www.xmission.com/~nate/glut.html
ええと。
glut36.zip 2,293,003 ソース、サンプル、その他
glutdlls.zip 143,402 VC++用DLL、ヘッダ、LIB (バイナリ)
後、PostScript形式のドキュメントとかもあります。が、あたしゃWin32版の
PostScript Readerを持ってないので、html版を落としました。いやその。
「URLを指定するとまとめて自動でダウンし、その後ローカルで見れるようにhtmlの
リンクを修正する」という、良くあるプログラムを使っただけですけど。
【必須作業】
1. glutdlls.zipを展開する
Win32版のOpenGLは少なくとも2種類あるらしい。MS版とSGI版。DirectXがあるから
なのかどうかは知らないが、SGIはMSのOpenGLの実装に不満があったからこそわざわざ
自社バージョンを作ったのだろう。が、とりあえずうちのマシンにはMS版のOpenGL
(OSR2以降は標準添付)しか入ってないのでglut32.dllのみをコピーする。
どこに?そうさのう。OpenGL関係のdllは全てsystemフォルダにあるようだ。
%winbootdir%\systemに、opengl32.dll、glu32.dllがあるでしょ?
だからそこにcopyする。それだけ。元々UNIX系が出身のDLL、レジストリにごちゃごちゃ
書かないと動かないというような性悪な性質はないのだ。
#もしopengl32.dllとかもなかったら、それはOpenGLをサポートする前の古い
Windows95なのでMSのサイトからモジュールを落とすこと。URLは知りません。
申し訳ありませんが、MSのサイトもSGIのサイトも私には分かりません
2. glut.hをコンパイラのインクルードフォルダに移動する
どうやらinclude\GL以下に入れるのが吉。lccでもVC++でも同様。
glut.dllとglut.libはSGI版OpenGL用なので廃棄。
3. VC++のlibフォルダにglut32.libを移動
アーカイブに付属の奴はVC++用なのだ。うちの場合、VC++ V5.0 SP3だけど、
何も問題なくコンパイル・リンクできた。VC++ 6.xの場合、libの形式が変更に
なったらしいから、単純にコピーしただけだとNGかも。
【リンク時の注意】
VC++の場合、Glutのソースがmain()で開始されることが問題となる。
linkのオプションに-subsystem:windows -entry:mainCRTStartupを追加する必要が
あるのだ。
最初のオプションがないと実行の度にDOS窓が開いてしまうぞ。
後者のオプションがないとWinMain()がない。とか文句を言われるぞ。
この辺りはVC++のデフォルト動作に関係する。
VC++はsubsystem:windowsの時はWinMain()があるものと仮定し、そうで
なければmain()があるものと仮定して、それ以外の組み合わせを考慮しない
のだ。
gccやlccではsubsystemがwindowsであろうがconsoleであろうが、
WinMain()か、main()のどっちかがあれば、そっちをリンクするという動作を
するので、オプションでエントリーを指定しなくても正しくリンクする。
【lcc-Win32】
さて。次にlccだが。.libの形式がVCと違うから、まず.libを作らねば。と:
dumpbin /linkermember GLUT32.lib > g.txt
#dumpbin.exeはVC++付属のツールです
これで関数宣言(と、余計なものまで)がg.txtに落ちるから、それをglut32.exp
という名前のファイルにする。その内容はテキストファイルで:
GLUT32.DLL
_glutAddMenuEntry@8
_glutAddSubMenu@8
...
こんな感じ。って、あら?lccのbuildlibには既にglut32.expがあるじゃん。そうかぁ。
VC++には影も形もないような謎な名前の.libを作る.expがあるのは何故かと思っていたら、
lccって、こーゆーツールにも既に対応してたのね。
ってことでコンパイルしたらリンクできないではないか!
え?と思ったらGLUT32.libがない。あぅ。非標準だから、lccの標準インストール
では.libを生成しないのか。
結局:
buildlib glut32.exp glut32.lib
してできたglut32.libを(lccの)libフォルダにコピー。これでOK。
(先に紹介したアーカイブに入っていたglut32.libはVC++用なので、lccでは使えない)
#buildlib.exeはlcc付属のツールだよ。消してないよね?
BC++の場合はどうするか、というとBC付属のimplib.exeでVC用のlibを変換して使えと
書いてあった。あたしゃ(BC++を)持ってないので具体的にどうするのかは分かりません。
gccの場合は……。今のところ保留。何かあっさりパッケージがありそうで。
少なくともWin32でなければ(つまりunixならば)本家パッケージが使えるようです。
===
ちなみにUNIX MAGAZINEの記事では、GLの機能だけでWindowのボタンやスクロールバー
などを作れるツールキットの紹介もありました(KDEってば、そうだったのか!)。
そうすればOS付属のボタンや何かを使うことなしに、どのOSでも同じLook&Feelな
GUIが構築できることになります。
まぁその。GUI上の全てのコントロールを3次元計算して描画する。ということです
から、多少重くはなるでしょうか(汎用なOpenGLを使うのだし)。
でも、昨今のCPU情勢を考えれば実用範囲内かも。
斬新で、凄くCOOLであるばかりか、どんなOSでも全く同じ表示をする、とっても
3DなGUIアプリを作るならこいつかもなぁ。とか思った次第。
#glut36.zipには他にもおもしろそうなUIライブラリとか、サンプルの類があります。
なかなか楽しめそうですぞ。
あ。VC++にしてもlccにしてもglut32.lib glu32.lib opengl32.libの3つはリンク
するようにしないとエラーの山が出力されますよん。
(EOF)
できる限り説明を追加したサンプルソース
Short cuts: [Prev][Up][Next][Return to Top]