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]