AUX2GLUT

GLAUX(AUX) to GLUT


GLAUX (単にAUX) ライブラリとは、OpenGL 補助ライブラリのことで、現在では GLUT ライブラリに置き換わった一世代前のライブラリです。

UNIX 版, Windows 版等があり、GLUT ライブラリ同様に GLAUX ライブラリを用いて作成したプログラムは、ほぼそのまま他のプラットフォームに移植することができます。

GLAUX ライブラリを用いたプログラムは、GLUT ライブラリに変更しましょう。 ここでは、GLAUX ライブラリから GLUT ライブラリを使うプログラムに書き換えるための情報をまとめてみました。

GLAUX の関数仕様については、GLAUX(AUX) API リファレンスをご覧ください。
GLUT の関数仕様については、GLUT API リファレンスをご覧ください。


■ GLUT への書き換えの基本

GLAUX から GLUT への書き換えは6ステップで行います。
  1. インクルードヘッダーの書き換え
  2. リンクライブラリの変更
  3. glutInitの追加
  4. AUX 定数を GLUT 定数に書き換え
  5. AUX 関数を GLUT 関数に書き換え
  6. 仕様変更への対応

■ インクルードヘッダーの書き換え

インクルードする aux.h (あるいは glaux.h) を GL/glut.h に変更します。

#include "aux.h"->#include <GL/glut.h>
#include <aux.h>->#include <GL/glut.h>
#include <GL/aux.h>->#include <GL/glut.h>

#include "glaux.h"->#include <GL/glut.h>
#include <glaux.h>->#include <GL/glut.h>
#include <GL/glaux.h>->#include <GL/glut.h>


■ リンクライブラリの変更

コンパイルオプションの -laux を -lglut に変更します。(UNIX の場合)

glaux.lib の代わりに glut32.lib をリンクします。 実行には glut32.dll が必要です。(Windows の場合)

■ glutInitの追加

GLUT の全ての関数を呼び出す前に glutInit を呼び出します。
main 関数の最初の方に glutInit を追加します。

例) glutInit の追加

	int main(int argc, char *argv[])
	{
		glutInit(&argc, argv);
			:

■ AUX の定数と GLUT の定数の対応表

AUX の定数は AUX_ で始まります。 GLUT では同様に定数は GLUT_ で始まります。 多くの定数は、AUX_ を GLUT_ に書き換えることで GLUT の定数に変更することができます。 ただし、一部の定数は定数名が異なるもの、インターフェイスの仕様変更のため廃止されたものもあります。

ディスプレイモード用ビットマスク

AUX の定数GLUT の定数説 明
AUX_RGBGLUT_RGBRGBモード
AUX_RGBAGLUT_RGBARGBモード
AUX_INDEXGLUT_INDEXINDEXモード
AUX_SINGLEGLUT_SINGLEシングルバッファ
AUX_DOUBLEGLUT_DOUBLEダブルバッファ
AUX_DIRECT廃止直接レンダリング
AUX_INDIRECT廃止間接レンダリング
AUX_ACCUMGLUT_ACCUMアキュムレーションバッファ
AUX_ALPHAGLUT_ALPHAアルファバッファ
AUX_DEPTHGLUT_DEPTHデプスバッファ
AUX_DEPTH16GLUT_DEPTHデプスバッファ
AUX_DEPTH24GLUT_DEPTHデプスバッファ
AUX_STENCILGLUT_STENCILステンシルバッファ
AUX_AUX廃止補助バッファ
AUX_FIXED_332_PAL廃止PAL

イベントタイプ

AUX の定数GLUT の定数説 明
AUX_MOUSEDOWNGLUT_DOWNマウスボタンを押した
AUX_MOUSEUPGLUT_UPマウスボタンを離した
AUX_MOUSELOC廃止マウスの位置

イベントデータ

AUX の定数GLUT の定数説 明
AUX_MOUSEX廃止マウスの X 座標
AUX_MOUSEY廃止マウスの Y 座標
AUX_MOUSESTATUS廃止マウスのステータス

マウスボタン

AUX の定数GLUT の定数説 明
AUX_LEFTBUTTONGLUT_LEFT_BUTTON左ボタン
AUX_RIGHTBUTTONGLUT_RIGHT_BUTTON右ボタン
AUX_MIDDLEBUTTONGLUT_MIDDLE_BUTTON中央ボタン

キー

AUX の定数GLUT の定数説 明
AUX_RETURN廃止定数を使わない
AUX_ESCAPE廃止定数を使わない
AUX_LEFTGLUT_KEY_LEFT左方向
AUX_RIGHTGLUT_KEY_RIGHT右方向
AUX_UPGLUT_KEY_UP上方向
AUX_DOWNGLUT_KEY_DOWN下方向
AUX_A 〜 AUX_Z廃止定数を使わない
AUX_a 〜 AUX_z廃止定数を使わない
AUX_0 〜 AUX_9廃止定数を使わない

■ AUX 関数と GLUT 関数の対応(一覧表)

AUX 関数を対応する GLUT 関数に書き換えます。
AUX 関数は aux で始まります。 GLUT では同様に関数は glut で始まります。 多くの関数は、aux を glut に書き換えることで GLUT の関数に変更することができます。 ただし、一部の関数は関数名が異なるもの、インターフェイスの仕様変更のため変更されたもの、 廃止されたものもあります。

AUX 関数GLUT 関数
auxCloseWindow -> glutDestroyWindow
auxCreateFont -> 該当する機能はありません
auxDIBImageLoad -> 該当する機能はありません
auxDrawStr -> glutBitmapCharacter で代用
auxExposeFunc -> 該当する機能はありません
auxGetContext -> 該当する機能はありません
auxGetColorMapSize -> glutGet(GLUT_WINDOW_COLORMAP_SIZE)
auxGetDisplayMode -> glutGet(GLUT_INIT_DISPLAY_MODE)
auxGetDisplayModeID -> 該当する機能はありません
auxGetDisplayModePolicy -> 該当する機能はありません
auxGetHDC -> 該当する機能はありません
auxGetHGLRC -> 該当する機能はありません
auxGetHWND -> 該当する機能はありません
auxGetMouseLoc -> 該当する機能はありません
auxIdleFunc -> glutIdleFunc
auxInitDisplayMode -> glutInitDisplayMode
auxInitDisplayModeID -> 該当する機能はありません
auxInitDisplayModePolicy -> 該当する機能はありません
auxInitPosition -> glutInitWindowPosition, glutInitWindowSize
auxInitWindow -> glutCreateWindow
auxKeyFunc -> glutKeyboardFunc
auxMainLoop -> glutDisplayFunc, glutMainLoop
auxMouseFunc -> glutMouseFunc
auxQuit -> 該当する機能はありません
auxRGBImageLoad -> 該当する機能はありません
auxSetFogRamp -> 該当する機能はありません
auxSetGreyRamp -> 該当する機能はありません
auxSetOneColor -> glutSetColor
auxSetRGBMap -> 該当する機能はありません
auxSolidBox -> 該当する機能はありません
auxSolidCone -> glutSolidCone
auxSolidCube -> glutSolidCube
auxSolidCylinder -> 該当する機能はありません
auxSolidDodecahedron -> glutSolidDodecahedron
auxSolidIcosahedron -> glutSolidIcosahedron
auxSolidOctahedron -> glutSolidOctahedron
auxSolidSphere -> glutSolidSphere
auxSolidTeapot -> glutSolidTeapot
auxSolidTetrahedron -> glutSolidTetrahedron
auxSolidTorus -> glutSolidTorus
auxSwapBuffers -> glutSwapBuffers
auxWireBox -> 該当する機能はありません
auxWireCone -> glutWireCone
auxWireCube -> glutWireCube
auxWireCylinder -> 該当する機能はありません
auxWireDodecahedron -> glutWireDodecahedron
auxWireIcosahedron -> glutIcosahedron
auxWireOctahedron -> glutWireOctahedron
auxWireSphere -> glutWireSphere
auxWireTeapot -> glutWireTeapot
auxWireTetrahedron -> glutWireTetrahedron
auxWireTorus -> glutWireTorus
auxXDisplay -> 該当する機能はありません
auxXScreen -> 該当する機能はありません
auxXWindow -> 該当する機能はありません

■ 初期化

void auxInitDisplayMode(GLenum type);

void APIENTRY auxInitDisplayMode(GLenum type);

glutInitDisplayMode に置き換えます。
type で指定する AUX 定数は GLUT 定数 に置き換えます。 AUX_DIRECT, AUX_INDIRECT, AUX_AUX は廃止されました。
AUX_DEPTH16, AUX_DEPTH24 は廃止されましたので、GLUT_DEPTH を使用してください。
AUX_FIXED_332_PAL は廃止されました。
例) RGB モード、ダブルバッファ、デプスバッファ

[GLAUX]
	auxInitDisplayMode(AUX_RGB | AUX_DOUBLE | AUX_DEPTH);

[GLUT]
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  

void auxInitPosition(int x, int y, int width, int height);

void APIENTRY auxInitPosition(int x, int y, int width, int height);

auxInitPosition は 2 つの関数 glutInitWindowPosition と glutInitWindowSize に機能が分けられました。
glutInit の前に glutInitWindowPosition と glutInitWindowSize で表示位置とウィンドウサイズを指定すると、 プログラムの実行時にコマンドラインの引数で表示位置とウィンドウサイズを変更することもできます。
例) 表示位置(0, 0), ウィドウサイズを(256, 256)

[GLAUX]
	auxInitPosition(0, 0, 256, 256);

[GLUT]
	int main(int argc, char *argv[])
	{
		glutInitWindowPosition(0, 0);
		glutInitWindowSize(256, 256);
		glutInit(&argc, argv);
  

void InitDisplayModePolicy(GLenum type);

void APIENTRY auxInitDisplayModePolicy(GLenum type);

GLUT には該当する機能はありません。


GLenum InitDisplayModeID(GLint id);

GLenum APIENTRY auxInitDisplayModeID(GLint id);

GLUT には該当する機能はありません。


■ イベント・プロセッシング

void auxMainLoop(void (*Func)(void));

typedef void (CALLBACK* AUXMAINPROC)(void);
void APIENTRY auxMainLoop(AUXMAINPROC);

auxMainLoop は glutDisplayFunc と glutMainLoop に機能が分かれました。

例) ユーザ描画関数 display を設定します。

[GLAUX]
	auxMainLoop(display);

[GLUT]
	glutDisplayFunc(display);
	glutMainLoop();
  

■ ウィンドウ・マネージメント

GLenum auxInitWindow(char *title);

#ifdef UNICODE
#define auxInitWindow auxInitWindowW
#else
#define auxInitWindow auxInitWindowA
#endif
GLenum APIENTRY auxInitWindowA(LPCSTR title);
GLenum APIENTRY auxInitWindowW(LPCWSTR title);

auxInitWindow は glutCreateWindow に置き換えます。
ただし、auxInitWindow は呼び出し直後にウィンドウを開きますが、 glutCreateWindow は glutMainLoop を呼び出すまでウィンドウは開きません。
例) メインウィンドウを開きます。

[GLAUX]
	auxInitWindow("OpenGL");

[GLUT]
	int win;
		:
	win = glutCreateWindow("OpenGL");
		:
	glutMainLoop();
  

void auxCloseWindow(void);

void APIENTRY auxCloseWindow(void);

auxCloseWindow は glutDestroyWindow に書き換えます。 glutDestroyWindow の引数には glutCreateWindow の戻り値を指定します。
例) メインウィンドウを閉じます。

[GLAUX]
	auxCloseWindow();

[GLUT]
	glutDestroyWindow(win);
  

void auxQuit(void);

void APIENTRY auxQuit(void);

GLUT には該当する機能はありません。exit で代用します。
リソースを開放後、開いたウィンドウを glutDestroyWindow で閉じて破壊した後、exit で終了します。

void auxSwapBuffers(void);

void APIENTRY auxSwapBuffers(void);

auxSwapBuffers は glutSwapBuffers に書き換えます。
例) スワップバッファ

[GLAUX]
	auxSwapBuffers();

[GLUT]
	glutSwapBuffers();
  

Display *auxXDisplay(GLvoid); (UNIX のみ)

GLUT には該当する機能はありません。

Window auxXWindow(GLvoid); (UNIX のみ)

GLUT には該当する機能はありません。

int auxXScreen(void); (UNIX のみ)

GLUT には該当する機能はありません。

HWND APIENTRY auxGetHWND(void);

GLUT には該当する機能はありません。

HDC APIENTRY auxGetHDC(void);

GLUT には該当する機能はありません。

HGLRC APIENTRY auxGetHGLRC(void);

GLUT には該当する機能はありません。

■ コールバック関数の設定

void auxReshapeFunc(void (*func)(int, int));

typedef void (CALLBACK* AUXRESHAPEPROC)(int, int);
void APIENTRY auxReshapeFunc(AUXRESHAPEPROC);

auxReshapeFunc は glutReshapeFunc に置き換えます。
例) リシェイプ・コールバック関数の登録

[GLAUX]
  	auxReshapeFunc(reshape);

[GLUT]
  	glutReshapeFunc(reshape);
  

void auxExposeFunc(void (*func)(int, int));

typedef void (CALLBACK* AUXEXPOSEPROC)(int, int);
void APIENTRY auxExposeFunc(AUXEXPOSEPROC);

GLUT には該当する機能はありません。

void auxIdleFunc(void (*func)(void));

typedef void (CALLBACK* AUXIDLEPROC)(void);
void APIENTRY auxIdleFunc(AUXIDLEPROC);

auxIdleFunc は glutIdleFunc に置き換えます。
例) アイドル・コールバック関数の登録

[GLAUX]
  	auxIdelFunc(idle);

[GLUT]
  	glutIdelFunc(idle);
  

void auxKeyFunc(int key, void (*func)(void));

typedef void (CALLBACK* AUXKEYPROC)(void);
void APIENTRY auxKeyFunc(int key, AUXKEYPROC func);

auxKeyFunc は glutKeyboardFunc に置き換えます。登録するコールバック関数の仕様は異なります。
auxKeyFunc ではキーコードごとに呼び出すコールバック関数を登録しましたが、 glutKeyboardFunc ではキーが押された時に呼び出すコールバック関数を登録します。 このコールバック関数の中で、押されたキーごとの処理を行います。

AUX_RETURN, AUX_ESCAPE, AUX_A 〜 AUX_Z, AUX_a 〜 AUX_z, AUX_0 〜 AUX_9 の定数は廃止され、それぞれの ASCII コードでキーを識別します。
例) '1'キーを押した時の処理を設定する

[GLAUX]
void func1()
{
	/* '1' を押した処理 */
}

int main(int argc, char *argv[])
{
		:
	auxKeyFunc(AUX_1, func1);

[GLUT]
void keyFunc(unsigned char key, int x, int y)
{
	if (key == '1') {
		/* '1' を押した処理 */
	}
}

int main(int argc, char *argv[])
{
		:
	glutKeyboardFunc(keyFunc);
  

void auxMouseFunc(int mouse, int mode, void (*func)(AUX_EVETREC *));

typedef void (CALLBACK* AUXMOUSEPROC)(void);
void APIENTRY auxMouseFunc(int mouse, int mode, AUXMOUSEPROC func);

auxMouseFunc は glutMouseFunc に書き換えます。登録するコールバック関数の仕様は異なります。
auxMouseFunc では押されたマウスイベントごとに呼び出すコールバック関数を登録しましたが、 glutMouseFunc ではマウスイベント発生時に呼び出すコールバック関数を登録します。 このコールバック関数の中で、マウスボタンごとの処理を行います。
例) マウスの左ボタンを押した時の処理

[GLAUX]
void funcLD(AUX_EVENTREC *event)
{
	/* マウスの左ボタンを押した時の処理 */
	 * 
	 * マウスの X 座標: event->data[AUX_MOUSEX]
	 * マウスの Y 座標: event->data[AUX_MOUSEY]
	 */
}

int main(int argc, char *argv[])
{
		:
	auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSEDOWN, funcLD);

[GLUT]
void func(int button, int state, int x, int y)
{
	if (button == GLUT_LEFT_BUTTON) {
		if (state == GLUT_DOWN) {
			/* マウスの左ボタンを押した時の処理 */
			 * 
			 * マウスの X 座標: x
			 * マウスの Y 座標: y
			 */
		}
	}
}

int main(int argc, char *argv[])
{
		:
	glutMouseFunc(func);
  
また、マウスボタンを押しながら移動した場合の処理(mode が AUX_MOUSELOC)については、glutMotionFunc を使用します。
押しているマウスボタンの区別はありません。
例) マウスボタンを押しながらマウスを移動した時の処理

[GLAUX]
void funcM(AUX_EVENTREC *event)
{
	/* 
	 * マウスの X 座標: event->data[AUX_MOUSEX]
	 * マウスの Y 座標: event->data[AUX_MOUSEY]
	 */
}

int main(int argc, char *argv[])
{
		:
	auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSELOC, funcM);
	auxMouseFunc(AUX_RIGHTBUTTON, AUX_MOUSELOC, funcM);
	auxMouseFunc(AUX_MIDDLEBUTTON, AUX_MOUSELOC, funcM);

[GLUT]
void func(int x, int y)
{
	/* 
	 * マウスの X 座標: x
	 * マウスの Y 座標: y
	 */
}

int main(int argc, char *argv[])
{
		:
	glutMotionFunc(func);
  

■ カラーマップ

int auxGetColorMapSize(void);

int APIENTRY auxGetColorMapSize(void);

auxGetColorMapSize は glutGet(GLUT_WINDOW_COLORMAP_SIZE) に書き換えます。

void auxSetOneColor(int index, float r, float g, float b);

void APIENTRY auxSetOneColor(int index, float r, float g, float b);

auxSetOneColor は glutSetColor に書き換えます。

void auxSetFogRamp(int density, int startIndex);

void APIENTRY auxSetFogRamp(int density, int startIndex);

GLUT には該当する機能はありません。glutSetColor によりユーザが目的のカラーをすべて設定してください。

void auxSetGreyRamp(void);

void APIENTRY auxSetGreyRamp(void);

GLUT には該当する機能はありません。glutSetColor によりユーザが目的のカラーをすべて設定してください。

void auxSetRGBMap(int size, float *rgb);

void APIENTRY auxSetRGBMap(int size, float *rgb);

GLUT には該当する機能はありません。glutSetColor によりユーザが目的のカラーをすべて設定してください。

■ ステータス取得

void auxGetMouseLoc(int *x, int *y);

void APIENTRY auxGetMouseLoc(int *x, int *y);

GLUT には該当する機能はありません。

GLenum auxGetDisplayMode(void);

GLenum APIENTRY auxGetDisplayMode(void);

auxGetDisplayMode は glutGet(GLUT_INIT_DISPLAY_MODE) に書き換えます。

GLenum auxGetDisplayModePolicy(void);

GLenum APIENTRY auxGetDisplayModePolicy(void);

GLUT には該当する機能はありません。

GLint auxGetDisplayModeID(void);

GLint APIENTRY auxGetDisplayModeID(void);

GLUT には該当する機能はありません。

long auxGetContext(void); (UNIX のみ)

GLUT には該当する機能はありません。

■ 画像ファイル読み込み

AUX_RGBImageRec *auxRGBImageLoad(char *fileName);

#ifdef UNICODE
#define auxRGBImageLoad auxRGBImageLoadW
#else
#define auxRGBImageLoad auxRGBImageLoadA
#endif
AUX_RGBImageRec * APIENTRY auxRGBImageLoadA(LPCSTR fileName);
AUX_RGBImageRec * APIENTRY auxRGBImageLoadW(LPCWSTR fileName);

GLUT には該当する機能はありません。

#ifdef UNICODE
#define auxDIBImageLoad auxDIBImageLoadW
#else
#define auxDIBImageLoad auxDIBImageLoadA
#endif
AUX_RGBImageRec * APIENTRY auxDIBImageLoadA(LPCSTR fileName);
AUX_RGBImageRec * APIENTRY auxDIBImageLoadW(LPCWSTR fileName);

GLUT には該当する機能はありません。

■ フォント/文字列の描画

void auxCreateFont(void);

void APIENTRY auxCreateFont(void);

GLUT には該当する機能はありません。
ただし、glutBitmapCharacter で文字フォントを指定することができます。

void auxDrawStr(char *str);

#ifdef UNICODE
#define auxDrawStr auxDrawStrW
#else
#define auxDrawStr auxDrawStrA
#endif
void APIENTRY auxDrawStrA(LPCSTR str);
void APIENTRY auxDrawStrW(LPCWSTR str);

auxDrawStr は glutBitmapCharacter で代用します。
glutBitmapCharacter は、フォントを指定して1文字描画します。 文字列を描画する場合は、glutBitmapCharacter を文字数分呼び出します。
例) 文字列を描画

[GLAUX]
	auxCreateFont();
		:
	glColor3f(1.0, 1.0, 1.0);
	glRasterPos2i(0, 0);
	auxDrawStr("OpenGL");

[GLUT]
	char str[] = "OpenGL";

	glColor3f(1.0, 1.0, 1.0);
	glRasterPos2i(0, 0);
	for (i = 0; i < strlen(str); i++) {
		glutBitmapCharacter(GLUT_BITMAP_8_BY_13, str[i]);
	}
  

■ 3Dオブジェクト描画

void auxWireSphere(GLdouble radius);

void APIENTRY auxWireSphere(GLdouble radius);

auxWireSphere は glutWireSphere で書き換えます。
glutWireSphere は分割数を指定する引数が追加されています。
例) ワイヤーフレームで球を描画

[GLAUX]
	auxWireSphere(1.0);

[GLUT]
	glutWireSphere(1.0, 16, 16);
  

void auxSolidSphere(GLdouble radius);

void APIENTRY auxSolidSphere(GLdouble radius);

auxSolidSphere は glutSolidSphere で書き換えます。
glutSolidSphere は分割数を指定する引数が追加されています。
例) ソリッドモデルで球を描画

[GLAUX]
	auxSolidSphere(1.0);

[GLUT]
	glutSolidSphere(1.0, 16, 16);
  

void auxWireCube(GLdouble size);

void APIENTRY auxWireCube(GLdouble size);

auxWireCube は glutWireCube で書き換えます。
例) ワイヤーフレームで立方体を描画

[GLAUX]
	auxWireCube(1.0);

[GLUT]
	glutWireCube(1.0);
  

void auxSolidCube(GLdouble size);

void APIENTRY auxSolidCube(GLdouble size);

auxSolidCube は glutSolidCube で書き換えます。
例) ソリッドモデルで立方体を描画

[GLAUX]
	auxSolidCube(1.0);

[GLUT]
	glutSolidCube(1.0);
  

void auxWireBox(GLdouble width, GLdoubel height, GLdouble depth);

void APIENTRY auxWireBox(GLdouble width, GLdoubel height, GLdouble depth);

GLUT には該当する機能はありません。
四角形6面で構成した直方体を描画するか、glutWireCube の X, Y, Z 方向のスケールを変更します。

void auxSolidBox(GLdouble width, GLdoubel height, GLdouble depth);

void APIENTRY auxSolidBox(GLdouble width, GLdoubel height, GLdouble depth);

GLUT には該当する機能はありません。
四角形6面で構成した直方体を描画するか、glutSolidCube の X, Y, Z 方向のスケールを変更します。

void auxWireTorus(GLdouble innerRadius, GLdoubel outerRadius);

void APIENTRY auxWireTorus(GLdouble innerRadius, GLdoubel outerRadius);

auxWireTorus は glutWireTorus で書き換えます。
glutWireTourus では分割数も指定します。
例) ワイヤーフレームでトーラスを描画

[GLAUX]
	auxWireTorus(0.3, 0.7);

[GLUT]
	glutWireTorus(0.3, 0.7, 5, 10);
  

void auxSolidTorus(GLdouble innerRadius, GLdoubel outerRadius);

void APIENTRY auxSolidTorus(GLdouble innerRadius, GLdoubel outerRadius);

auxSolidTorus は glutWireTorus で書き換えます。
glutSolidTourus では分割数も指定します。
例) ソリッドモデルでトーラスを描画

[GLAUX]
	auxSolidTorus(0.3, 0.7);

[GLUT]
	glutSolidTorus(0.3, 0.7, 8, 15);
  

void auxWireCylinder(GLdouble radius, GLdoubel height);

void APIENTRY auxWireCylinder(GLdouble radius, GLdoubel height);

GLUT には該当する機能はありません。
auxWireCylinder は gluCylinder で代用します。
例) ワイヤーフレームで円柱を描画

[GLAUX]
	auxWireCylinder(1.0, 1.0);

[GLUT]
	GLUquadricObj *qobj = gluNewQuadric();
		:
	glPushMatrix();
	glRotatef(-90.0, 1.0, 0.0, 0.0);
	glTranslatef(0.0, 0.0, -1.0);
	gluQuadricDrawStyle(qobj, GLU_LINE);
	gluCylinder(qobj, 0.0, 1.0, 1.0, 12, 2);
	glPopMatrix();
  

void auxSolidCylinder(GLdouble radius, GLdoubel height);

void APIENTRY auxSolidCylinder(GLdouble radius, GLdoubel height);

GLUT には該当する機能はありません。
auxSolidCylinder は gluCylinder で代用します。
例) ソリッドモデルで円柱を描画

[GLAUX]
	auxSolidCylinder(1.0, 1.0);

[GLUT]
	GLUquadricObj *qobj = gluNewQuadric();
		:
	glPushMatrix();
	glRotatef(-90.0, 1.0, 0.0, 0.0);
	glTranslatef(0.0, 0.0, -1.0);
	gluQuadricDrawStyle(qobj, GLU_FILL);
	gluCylinder(qobj, 0.0, 1.0, 1.0, 12, 2);
	glPopMatrix();
  

void auxWireIcosahedron(GLdouble radius);

void APIENTRY auxWireIcosahedron(GLdouble radius);

auxWireIcosahedron は glutWireIcosahedron に書き換えます。
glutWireIcosahedron は大きさを指定する引数はありません。大きさは1.0となります。
例) ワイヤーフレームで20面体を描画

[GLAUX]
	auxWireIcosahedron(1.0);

[GLUT]
	glutWireIcosahedron();
  

void auxSolidIcosahedron(GLdouble radius);

void APIENTRY auxSolidIcosahedron(GLdouble radius);

auxSolidIcosahedron は glutSolidIcosahedron に書き換えます。
glutSolidIcosahedron は大きさを指定する引数はありません。大きさは1.0となります。
例) ソリッドモデルで20面体を描画

[GLAUX]
	auxSolidIcosahedron(1.0);

[GLUT]
	glutSolidIcosahedron();
  

void auxWireOctahedron(GLdouble radius);

void APIENTRY auxWireOctahedron(GLdouble radius);

auxWireOctahedron は glutWireOctahedron に書き換えます。
glutWireOctahedron は大きさを指定する引数はありません。大きさは1.0となります。
例) ワイヤーフレームで8面体を描画

[GLAUX]
	auxWireOctahedron(1.0);

[GLUT]
	glutWireOctahedron();
  

void auxSolidOctahedron(GLdouble radius);

void APIENTRY auxSolidOctahedron(GLdouble radius);

auxSolidOctahedron は glutSolidOctahedron に書き換えます。
glutSolidOctahedron は大きさを指定する引数はありません。大きさは1.0となります。
例) ソリッドモデルで8面体を描画

[GLAUX]
	auxSolidOctahedron(1.0);

[GLUT]
	glutSolidOctahedron();
  

void auxWireTetrahedron(GLdouble radius);

void APIENTRY auxWireTetrahedron(GLdouble radius);

auxSolidTetrahedron は glutSolidTetrahedron に書き換えます。
glutSolidTetrahedron は大きさを指定する引数はありません。大きさは1.0となります。
例) ワイヤーフレームで4面体を描画

[GLAUX]
	auxWireTetrahedron(1.0);

[GLUT]
	glutWireTetrahedron();
  

void auxSolidTetrahedron(GLdouble radius);

void APIENTRY auxSolidTetrahedron(GLdouble radius);

auxWireTetrahedron は glutWireTetrahedron に書き換えます。
glutWireTetrahedron は大きさを指定する引数はありません。大きさは1.0となります。
例) ソリッドモデルで4面体を描画

[GLAUX]
	auxSolidTetrahedron(1.0);

[GLUT]
	glutSolidTetrahedron();
  

void auxWireDodecahedron(GLdouble radius);

void APIENTRY auxWireDodecahedron(GLdouble radius);

ワイヤーフレームの12面体を描画します。 auxWireDodecahedron は glutWireDodecahedron に書き換えます。
glutWireDodecahedron は大きさを指定する引数はありません。大きさは1.73となります。
例) ワイヤーフレームで12面体を描画

[GLAUX]
	auxWireDodecahedron(1.0);

[GLUT]
	glPushMatrix();
	glScalef(1.0 / 1.73, 1.0 / 1.73, 1.0 / 1.73);
	glutWireDodecahedron();
	glPopMatrix();
  

void auxSolidDodecahedron(GLdouble radius);

void APIENTRY auxSolidDodecahedron(GLdouble radius);

auxSolidDodecahedron は glutSolidDodecahedron に書き換えます。
glutSolidDodecahedron は大きさを指定する引数はありません。大きさは1.73となります。
例) ソリッドモデルで12面体を描画

[GLAUX]
	auxSolidDodecahedron(1.0);

[GLUT]
	glPushMatrix();
	glScalef(1.0 / 1.73, 1.0 / 1.73, 1.0 / 1.73);
	glutSolidDodecahedron();
	glPopMatrix();
  

void auxWireCone(GLdouble base, GLdouble height);

void APIENTRY auxWireCone(GLdouble base, GLdouble height);

auxWireCone は glutWireCone で書き換えます。
glutWireCone では分割数を指定します。
例) ソリッドモデルで12面体を描画

[GLAUX]
	auxWireCone(1.0, 1.0);

[GLUT]
	glutWireCone(1.0, 1.0, 15, 10);
  

void auxSolidCone(GLdouble base, GLdouble height);

void APIENTRY auxSolidCone(GLdouble base, GLdouble height);

auxSolidCone は glutSolidCone で書き換えます。
glutSolidCone では分割数を指定します。
例) ソリッドモデルで12面体を描画

[GLAUX]
	auxSolidCone(1.0, 1.0);

[GLUT]
	glutSolidCone(1.0, 1.0, 15, 10);
  

void auxWireTeapot(GLdouble scale);

void APIENTRY auxWireTeapot(GLdouble scale);

auxWireTeapot は glutWireTeapot で書き換えます。
例) ティーポットを描画

[GLAUX]
  	glEnable(GL_AUTO_NORMAL);
  	glEnable(GL_NORMALIZE);
  	glFrontFace(GL_CW);
  	auxWireTeapot(0.6);
  	glFrontFace(GL_CCW);

[GLUT]
  	glEnable(GL_AUTO_NORMAL);
  	glEnable(GL_NORMALIZE);
  	glFrontFace(GL_CW);
  	glutWireTeapot(0.6);
  	glFrontFace(GL_CCW);
  

void auxSolidTeapot(GLdouble scale);

void APIENTRY auxSolidTeapot(GLdouble scale);

auxSolidTeapot は glutSolidTeapot で書き換えます。
例) ティーポットを描画

[GLAUX]
  	glEnable(GL_AUTO_NORMAL);
  	glEnable(GL_NORMALIZE);
  	glFrontFace(GL_CW);
  	auxSolidTeapot(0.6);
  	glFrontFace(GL_CCW);

[GLUT]
  	glEnable(GL_AUTO_NORMAL);
  	glEnable(GL_NORMALIZE);
  	glFrontFace(GL_CW);
  	glutSolidTeapot(0.6);
  	glFrontFace(GL_CCW);
  

■ 仕様変更への対応

残念ながら GLAUX ライブラリと GLUT ライブラリは1対1で対応するものではありません。
このため GLAUX ライブラリと GLUT ライブラリの仕様の違いに対応する必要があります。
  1. GLAUX ではフロー駆動型プログラミングでアプリケーションを作成することもできました。 しかし、GLUT ではイベント駆動型プログラミングでアプリケーションを作成する必要があります。 このため、フロー駆動型プログラムはイベント駆動型プログラムへの書き換えが必要になります。
  2. Windows の場合、コールバック関数の宣言に CALLBACK が不要となるため、CALLBACK キーワードを削除する必要があります。
  3. キーイベントとマウスイベントの仕様は大きく変わっています。 このため、コールバック関数の中身を GLUT に合わせて変更する必要があります。
  4. 画像読み込み機能をサポートしていません。他の画像ローダーをご用意ください。
  5. 3Dオブジェクトの一部を GLUT はサポートしていません。 自前でポリゴンでモデリングするか、GLUquadricObj で代用する必要があります。
  6. GLAUX と同じフォントを GLUT はサポートしていません。 このため、文字列を表示する場合には GLUT がサポートするフォントを使う必要があります。
  7. カラーマップは glutSetColor でユーザが設定する必要があります。
  8. GLAUX のデフォルトでは ESC キーを入力すると終了する処理が含まれています。 GLUT で実現するには自前でキーイベント処理を追加し、終了する必要があります。
    
    	int win = 0;
    	
    	void keyboard(unsigned char key, int x, int y)
    	{
    		if (key == 0x1b) {
    			/* ESC */
    			glutDestroyWindow(win);
    			exit(1);
    		}
    	}
    	
    	int main(int argc, char *argv[])
    	{
    			:
    		glutInit(&argc, argv);
    			:
    		win = glutCreateWindow("OpenGL");
    	
    			:
    		glutKeyboardFunc(keyboard);
    			:
    		glutMainLoop();
    	}
        

■ aux2glut.sed

GLUT のソースの中に GLAUX ライブラリを用いたプログラムのソースを GLUT に変換するためのスクリプト aux2glut.sed が含まれます。(progs/aux2glut.sed)
この sed スクリプトは GLAUX ライブラリを用いた赤本(初版)のサンプルを GLUT に変換するためのものですので、このスクリプトで完全な変換ができるわけではありません。
しかし、主要な部分の変換ができますので、これで変換した後、 手作業でコンパイルでエラーが出る部分を修正していくことで全体の変換作業を減らすことはできるでしょう。

■ 注意

GLAUX ライブラリを用いたプログラムを GLUT ライブラリへ書き換える場合は、必ず全て GLUT ライブラリを使うように書き換えてください。 一部サポートしていない機能を GLAUX ライブラリで代用して、GLUT ライブラリと混在することは避けてください。
多くの部分で GLAUX ライブラリと GLUT ライブラリは共存できません。(共存可能な API も存在するが...。) このため、様々な問題が生じる危険性がありますので、GLUT ライブラリと GLAUX ライブラリの両方を同時に使うことは避けてください。


[3D TOPメニュー]
[OpenGL] [irisGL] [VRML] [作品集] [イエローページ]
[書籍紹介] [DVD]
[この Web ページについて] [アンケート] [予定]
[OpenGLストア]

[Namazu TOPメニュー]