~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  OpenGL 入門講座    「三次元グラフィックスの基礎とOpenGL関数の全体像を掴む」 第1-7回 「3D-CG基礎、ポリゴン表示、ワイヤー表示」用のプログラム ----- Windows NT/95 の場合 ----- ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 今回は、サンプルプログラム(program1_1.c)を Windows NT/95 で実行するた めの修正方法について説明します。プログラム名は、prog1_7.c となります。 これまで、OpenGL 入門講座では、Windows NT/95 のユーザーの方は、対象外 となっていました。 しかし、今回の修正を行うことで、Windows NT/95 のユーザーの方にも、入 門講座に参加していただくことができるようになったと思います。 これまでの講座の内容も参考にしていただければ幸いです。 ■ Windows NT 3.51, 4.0: <実行>  Windows NT 3.51, 4.0 は、正式に OpenGL に対応しています。OpenGL の  アプリケーションは、そのまま実行することができます。また、スクリー  ンセーバの中にも OpenGL を使用したものがあります。  <開発>  OpenGL のアプリケーションを開発するには、Visual C++ 4.x が必要にな  ります。(Visual C++ 2.0 でも可)*1  <ハードウェア対応>  OpenGL に対応したグラフィックス・ボードを利用することで、高速に  OpenGL のアプリケーションを実行することもできます。   ■ Windows 95: <実行>  Windows 95 では、OpenGL を正式には対応していません。*2  しかし、2 つの DLL を入手すれば、Windows 95 でも OpenGL のアプリケー  ションを実行することができます。  <開発>  OpenGL のアプリケーションを開発するには、Visual C++ 4.x が必要にな  ります。*1  <ハードウェア対応>  OpenGL 対応のグラフィックス・ボードで Windows 95 に対応しているもの  は少なく、多くのボードが対応予定となっています。また、速度もそれほ  ど向上するわけではないようです。 OpenGL の DLL は、次のところから入手できます。スクリーンセーバが必 要でなければ、OpenGL 1.1 である opengl95.exe だけ入手してください。 [OpenGL 1.1] ftp://ftp.microsoft.com/Softlib/MSLFILES/opengl95.exe [OpenGL 1.0 スクリーンセーバ4つを含む] ftp://ftp.microsoft.com/Softlib/MSLFILES/oplfix.exe ■ Windows 3.1: Windows 3.1 で OpenGL を利用することはできません。*3 しかし、Mesa を利用すれば Windows 3.1 でも実行は可能です。 ただし、対象者が少ないと思いますので、今回の講座では特に説明は行い ません。 ■ prog1_7 の入手先: Windows 版の入門講座プログラム(prog1_7)は、次のところから入手してく ださい。 http://www.asahi-net.or.jp/‾yw3t-trns/index.htm ここは、私のホームページですが、この中の OpenGL 入門講座のページか ら prog1_7 を入手することができます。(トップページから捜してくださ い。これは、予告なくページの構成を変更することがあるためです。) prog1_7 は、LHa または WinZip で圧縮されていますので、解凍してご利 用ください。このアーカイブファイルの中には、実行ファイルも含まれて います。 ■ コンパイルの方法:  AUX ライブラリをインストールした後、prog1_7 を解凍します。次に  ¥MSDEV¥SAMPLES¥SDK¥OPENGL¥BOOK¥GLOS.H を、prog1_7 を解凍したディレ  クトリにコピーします。(glos.h は、VC++ の CD-ROM に入っています。) コンパイルは、どちらかの方法で行ってください。 A.コマンドラインでのコンパイル コマンドラインから、nmake を実行します。 > nmake /f Makefile ('>' は、DOS プロンプトをあらわしています。) B.VC++ を起動してコンパイル ファイルマネージャから prog1_7.mdp をダブルクリックして、VC を起 動します。ビルドメニューから、ビルドを選択すると、コンパイルが開 始します。 コンパイル時に、ワーニングが発生しますが、特に気にしなくても結構で す。主に型変換に関するものと、返値に関するものです。*4 ■ プログラムの修正箇所の説明: 入門講座で使用しているプログラムは、AUX ライブラリを使用しています ので、UNIX から Windows への修正は、比較的簡単にできます。 ここでは、UNIX でもコンパイルができるように #ifdef WIN32 を利用して います。 Windows NT/95 では、WIN32 が定義されますので、#ifdef WIN32 で囲まれ た部分が有効になります。また、UNIX では WIN32 が定義されませんので、 この部分は有効になりません。 (1) ヘッダーファイルのインクルード #ifdef WIN32 # include "glos.h" #endif /* WIN32 */ まず最初に glos.h をインクルードします。(必須)   このヘッダーファイルは、Windows に必要なヘッダーをインクルードし   たり、データ変換における警告を中止したりします。 (2) glaux.h のインクルードと CALLBACK の定義 #ifdef WIN32 # include "GL/glaux.h" #else /* WIN32 */ # include "glaux.h" # define CALLBACK #endif /* WIN32 */ glaux.h をインクルードします。UNIX とはヘッダの位置が異なりますの で分けています。 また、UNIX では、CALLBACK を無効にするための定義を行っています。 (3) CALLBACK main() でコールバック関数を定義しています。 auxMouseFunc (AUX_LEFTBUTTON, AUX_MOUSEDOWN, up); auxMouseFunc (AUX_RIGHTBUTTON, AUX_MOUSEDOWN, down); : : auxReshapeFunc (myReshape); auxMainLoop(display); up(), down(), MyReshape(), display() がコールバック関数です。 up() は、マウスの左ボタンを押した時に呼び出される関数です。 down() は、マウスの右ボタンを押した時に呼び出される関数です。 myReshape() は、ウィンドウのサイズ変更時等に呼び出される関数です。 display() は、ウィンドウの更新が必要な時に呼び出される関数です。 これらのコールバック関数は、次のように CALLBACK を付けて定義しな ければなりません。 void CALLBACK up(AUX_EVENTREC *event) { : : } 以上の修正を行うことで、UNIX でも Windows でもコンパイルできるソー スができあがります。 ■ 用語解説: ○ Mesa OpenGL 互換ライブラリの名称です。ほとんどの OpenGL 関数をサポー トしています。 ○ DLL ダイナミックリンクライブラリのことで、複数のアプリケーションが 同時に使用できる共有ライブラリです。 ■ 注釈:  *1) Delphi でも開発ができます。  *2) 現在の出荷バージョンでは、OpenGL の DLL が含まれていないためで   す。しかし、今後バンドル版には、OpenGL の DLL が含まれる予定で   す。 *3) TGS から Windows 3.1 用の OpenGL が発売されているようですが、   詳細は不明です。 *4) もちろんワーニングが発生しないようにプログラムを書き換える方が いいです。    ■ ホームページ紹介:  OpenGL 入門講座の過去の記事を私のホームページにおいてあります。  もちろん、入門講座のプログラム等も置いてあります。  よろしければ、一度ご覧ください。     http://www.asahi-net.or.jp/‾yw3t-trns/index.htm ■ 次回予告:  第1-8回では、今まで AUX ライブラリを使っていたプログラムを GLUT  ライブラリに書き換えます。 -- ======================================================================== 寺西 忠勝