void auxInitDisplayMode(GLenum type);
void APIENTRY auxInitDisplayMode(GLenum type);
ディスプレイモードを論理和で type に設定します。
カラー: AUX_RGB, AUX_RGBA または AUX_INDEX
バッファ: AUX_SINGLE または AUX_DOUBLE
ダイレクト: AUX_DIRECT または AUX_INDIRECT
アキュムレーションバッファ: AUX_ACCUM
アルファバッファ: AUX_ALPHA
デプスバッファ: AUX_DEPTH
ステンシルバッファ: AUX_STENCIL
補助バッファ: AUX_AUX
デプスバッファ: AUX_DEPTH(AUX_DEPTH16と等価) または AUX_DEPTH24
パレット: AUX_FIXED_332_PAL
例) RGB モード、ダブルバッファ、直接レンダリング、デプスバッファ
auxInitDisplayMode(AUX_RGB | AUX_DOUBLE | AUX_DIRECT | AUX_DEPTH);
void auxInitPosition(int x, int y, int width, int height);
void APIENTRY auxInitPosition(int x, int y, int width, int height);
ウィンドウの表示位置(x, y) とウィンドウサイズ(width, height) を指定します。
例) 表示位置(0, 0), ウィドウサイズを(256, 256)
auxInitPosition(0, 0, 256, 256);
void InitDisplayModePolicy(GLenum type);
void APIENTRY auxInitDisplayModePolicy(GLenum type);
ディスプレイモードのポリシーを type で指定します。
AUX_USE_ID, AUX_EXACT_MATCH, AUX_MINIMUM_CRITERIA のいずれか。
デフォルトは AUX_MINIMIM_CRITERIA。条件に合うビジュアル(ピクセルフォーマット)で最初に見つかったものを選択します。
AUX_EXACT_MATCH は条件に合うビジュアル(ピクセルフォーマット)のうち、最もカラーバッファのサイズが大きいものを選択します。
AUX_USE_ID はビジュアル(ピクセルフォーマット)を auxInitDisplayModeID を用いて、番号で直接指定します。
(古い GLAUX ライブラリではサポートしていません。)
例) ディスプレイモードのポリシーを AUX_EXACT_MATCH でウィンドウを開きます。
auxInitDisplayMode(AUX_RGB | AUX_DOUBLE | AUX_DEPTH);
auxInitDisplayModePolicy(AUX_EXACT_MATCH);
auxInitWindow("OpenGL");
GLenum InitDisplayModeID(GLint id);
GLenum APIENTRY auxInitDisplayModeID(GLint id);
ディスプレイモードのIDを id で指定します。
ディスプレイモードのポリシーが AUX_USE_ID の場合に、id で指定したビジュアル(ピクセルフォーマット)を選択します。
(古い GLAUX ライブラリではサポートしていません。)
例) 8 番のビジュアルを直接してウィンドウを開きます。
auxInitDisplayModePolicy(AUX_USE_ID);
auxInitDisplayModeID(8);
auxInitWindow("OpenGL");
GLenum auxInitWindow(char *title);
#ifdef UNICODE
#define auxInitWindow auxInitWindowW
#else
#define auxInitWindow auxInitWindowA
#endif
GLenum APIENTRY auxInitWindowA(LPCSTR title);
GLenum APIENTRY auxInitWindowW(LPCWSTR title);
auxInitDisplayMode および auxInitPosition で設定した内容でウィンドウを開きます。
ウィンドウのタイトルを title に設定します。
void auxCloseWindow(void);
void APIENTRY auxCloseWindow(void);
ウィンドウを閉じます。
void auxQuit(void);
void APIENTRY auxQuit(void);
アプリケーションを終了します。
void auxSwapBuffers(void);
void APIENTRY auxSwapBuffers(void);
ダブルバッファ時、バックバッファとフロントバッファを交換(またはコピー)します。
古い GLAUX ライブラリには auxSwapBuffers がなく、
代わりに glXSwapBuffers(auxXDisplay(), auxWindow()) を使わなければならないかもしれません。(X11)
Display *auxXDisplay(GLvoid); (UNIX のみ)
auxInitWindow で設定したディスプレイを返します。
例) auxSwapBuffers の代わりに glXSwapBuffers を使う例。
glXSwapBuffers(auxXDisplay(), auxXWindow());
Window auxXWindow(GLvoid); (UNIX のみ)
auxInitWindow で設定したウィンドウを返します。
例) auxSwapBuffers の代わりに glXSwapBuffers を使う例。
glXSwapBuffers(auxXDisplay(), auxXWindow());
int auxXScreen(void); (UNIX のみ)
auxInitWindow で設定したスクリーンを返します。
(古い GLAUX ライブラリではサポートしていません。)
HWND APIENTRY auxGetHWND(void);
auxInitWindow で設定した HWND を返します。
HDC APIENTRY auxGetHDC(void);
auxInitWindow で設定した HDC を返します。
HGLRC APIENTRY auxGetHGLRC(void);
auxInitWindow で設定した HGLRC を返します。
void auxReshapeFunc(void (*func)(int, int));
typedef void (CALLBACK* AUXRESHAPEPROC)(int, int);
void APIENTRY auxReshapeFunc(AUXRESHAPEPROC);
ウィンドウサイズの変更、移動等、ウィンドウ操作を行った場合に呼び出すコールバック関数を指定します。
コールバック関数
void func(int w, int h);
void CALLBACK func(int w, int h);
引数にウィンドウサイズ(w, h)が渡されます。
コールバック関数の実行後、再描画が自動的に実行されます。
例) リシェイプ・コールバック関数で、viewport、カメラの設定を行います。
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char **argv)
{
:
auxReshapeFunc(reshape);
:
}
void auxExposeFunc(void (*func)(int, int));
typedef void (CALLBACK* AUXEXPOSEPROC)(int, int);
void APIENTRY auxExposeFunc(AUXEXPOSEPROC);
Expose イベント(ウィンドウをマップした時、隠れたウィンドウが表に出た時、ウィンドウの内容をクリアした時に発生するイベント)用コールバック関数を指定します。
コールバック関数
void func(int w, int h);
void CALLBACK func(int w, int h);
引数にウィンドウサイズ(w, h)が渡されます。
void auxIdleFunc(void (*func)(void));
typedef void (CALLBACK* AUXIDLEPROC)(void);
void APIENTRY auxIdleFunc(AUXIDLEPROC);
アイドル時に呼び出すコールバック関数を指定します。
コールバック関数
void func(void);
void CALLBACK func(void);
void auxKeyFunc(int key, void (*func)(void));
typedef void (CALLBACK* AUXKEYPROC)(void);
void APIENTRY auxKeyFunc(int key, AUXKEYPROC func);
キーイベントで呼び出すコールバック関数を指定します。
キーごとに呼び出すコールバック関数を変えることができます。
デフォルトでは、AUX_ESCAPE は auxQuit が登録されています。
定義済みキー
AUX_RETURN | Enter/Returnキー |
AUX_ESCAPE | ESCキー |
AUX_SPACE | SPCキー |
AUX_LEFT | 左キー |
AUX_UP | 上キー |
AUX_RIGHT | 右キー |
AUX_DOWN | 下キー |
AUX_A 〜 AUX_Z | A 〜 Zキー |
AUX_a 〜 AUX_z | a 〜 zキー |
AUX_0 〜 AUX_9 | 0 〜 9キー |
コールバック関数
void func(void);
void CALLBACK func(void);
コールバック関数の実行後、再描画が自動的に実行されます。
例) ESCキーを押すと、プログラムを終了する設定。
auxKeyFunc(AUX_ESCAPE, auxQuit);
void auxMouseFunc(int mouse, int mode, void (*func)(AUX_EVETREC *));
typedef void (CALLBACK* AUXMOUSEPROC)(void);
void APIENTRY auxMouseFunc(int mouse, int mode, AUXMOUSEPROC func);
マウスイベントで呼び出すコールバック関数を指定します。
mouse | AUX_LEFTBUTTON | マウスの左ボタン |
AUX_RIGHTBUTTON | マウスの右ボタン |
AUX_MIDDLEBUTTON | マウスの中央ボタン |
mode | AUX_MOUSEDOWN | マウスボタンが押された時 |
AUX_MOUSEUP | マウスボタンが離された時 |
AUX_MOUSELOC | マウスボタンを押しながら移動した時 |
コールバック関数
void func(AUX_EVENTREC *event);
void CALLBACK func(AUX_EVENTREC *event);
コールバック関数の実行後、再描画が自動的に実行されます。
event->event | AUX_MOUSEDOWN | マウスボタンが押された |
AUX_MOUSEUP | マウスボタンが離された |
AUX_MOUSELOC | マウスボタンを押しながら移動した |
event->data[AUX_MOUSEX] | マウスのX座標(左上が原点) |
event->data[AUX_MOUSEY] | マウスのY座標(左上が原点) |
event->data[AUX_MOUSESTATUS] | マウスボタン |
ティーポット以外のオブジェクトにはテクスチャ座標は定義されません。
このため、テクスチャマッピングを行う場合は、glTexGen によるテクスチャ座標の自動生成を用いる必要があります。
glTexGen によるテクスチャ座標の自動生成では、面単位でテクスチャ座標軸を変更することができないため、
オブジェクト単位で同じ座標系でのマッピングとなります。
void auxWireSphere(GLdouble radius);
void APIENTRY auxWireSphere(GLdouble radius);
ワイヤーフレームの球を描画します。球の半径を radius で指定します。
球の中心は原点(0, 0, 0)で、極はZ軸です。経線を16個、緯線を16個に分割されます。
内部で gluSphere を呼び出しています。
void auxSolidSphere(GLdouble radius);
void APIENTRY auxSolidSphere(GLdouble radius);
ソリッドモデルの球を描画します。球の半径を radius で指定します。
球の中心は原点(0, 0, 0)で、極はZ軸です。経線を16個、緯線を16個に分割されます。
内部で gluSphere を呼び出しています。
void auxWireCube(GLdouble size);
void APIENTRY auxWireCube(GLdouble size);
ワイヤーフレームの立方体を描画します。立方体の1辺の長さを size で指定します。
立方体の中心は原点(0, 0, 0)です。
void auxSolidCube(GLdouble size);
void APIENTRY auxSolidCube(GLdouble size);
ソリッドモデルの立方体を描画します。立方体の1辺の長さを size で指定します。
立方体の中心は原点(0, 0, 0)です。
void auxWireBox(GLdouble width, GLdoubel height, GLdouble depth);
void APIENTRY auxWireBox(GLdouble width, GLdoubel height, GLdouble depth);
ワイヤーフレームの直方体を描画します。直方体の大きさを width, height, depth で指定します。
直方体の中心は原点(0, 0, 0)です。
void auxSolidBox(GLdouble width, GLdoubel height, GLdouble depth);
void APIENTRY auxSolidBox(GLdouble width, GLdoubel height, GLdouble depth);
ソリッドモデルの直方体を描画します。直方体の大きさを width, height, depth で指定します。
直方体の中心は原点(0, 0, 0)です。
void auxWireTorus(GLdouble innerRadius, GLdoubel outerRadius);
void APIENTRY auxWireTorus(GLdouble innerRadius, GLdoubel outerRadius);
ワイヤーフレームのトーラスを描画します。inner 5分割、outer 10分割。
中心は原点(0, 0, 0)であり、Z軸回りのトーラスを描画します。
void auxSolidTorus(GLdouble innerRadius, GLdoubel outerRadius);
void APIENTRY auxSolidTorus(GLdouble innerRadius, GLdoubel outerRadius);
ソリッドモデルのトーラスを描画します。inner 8分割、outer 15分割。
中心は原点(0, 0, 0)であり、Z軸回りのトーラスを描画します。
void auxWireCylinder(GLdouble radius, GLdoubel height);
void APIENTRY auxWireCylinder(GLdouble radius, GLdoubel height);
ワイヤーフレームの円柱を描画します。
円柱の半径を radius、円柱の高さを height で指定します。
円周は12分割、高さは2分割。
Y軸方向に伸びる円柱で、上下面の蓋はなく閉じていません。
内部で gluCylinder を呼び出しています。(Z軸に-1.0移動後、X軸 -90度回転)
OBJECT_LINEAR でテクスチャ座標を自動生成する場合、X軸回転を行っていることに注意してください。
void auxSolidCylinder(GLdouble radius, GLdoubel height);
void APIENTRY auxSolidCylinder(GLdouble radius, GLdoubel height);
ソリッドモデルの円柱を描画します。
円柱の半径を radius、円柱の高さを height で指定します。
円周は12分割、高さは2分割。
Y軸方向に伸びる円柱で、上下面の蓋はなく閉じていません。
内部で gluCylinder を呼び出しています。(Z軸に-1.0移動後、X軸 -90度回転)
OBJECT_LINEAR でテクスチャ座標を自動生成する場合、X軸回転を行っていることに注意してください。
void auxWireIcosahedron(GLdouble radius);
void APIENTRY auxWireIcosahedron(GLdouble radius);
ワイヤーフレームの20面体を描画します。
void auxSolidIcosahedron(GLdouble radius);
void APIENTRY auxSolidIcosahedron(GLdouble radius);
ソリッドモデルの20面体を描画します。
void auxWireOctahedron(GLdouble radius);
void APIENTRY auxWireOctahedron(GLdouble radius);
ワイヤーフレームの8面体を描画します。
void auxSolidOctahedron(GLdouble radius);
void APIENTRY auxSolidOctahedron(GLdouble radius);
ソリッドモデルの8面体を描画します。
void auxWireTetrahedron(GLdouble radius);
void APIENTRY auxWireTetrahedron(GLdouble radius);
ワイヤーフレームの4面体を描画します。
void auxSolidTetrahedron(GLdouble radius);
void APIENTRY auxSolidTetrahedron(GLdouble radius);
ソリッドモデルの4面体を描画します。
void auxWireDodecahedron(GLdouble radius);
void APIENTRY auxWireDodecahedron(GLdouble radius);
ワイヤーフレームの12面体を描画します。
void auxSolidDodecahedron(GLdouble radius);
void APIENTRY auxSolidDodecahedron(GLdouble radius);
ソリッドモデルの12面体を描画します。
void auxWireCone(GLdouble base, GLdouble height);
void APIENTRY auxWireCone(GLdouble base, GLdouble height);
ワイヤーフレームの円錐を描画します。
Z軸周り15分割、Z軸に沿って10分割。
円錐の底面の中心が原点(0, 0, 0)、半径 base で、(0, 0, height)が円錐の先端となります。
底面は蓋はなく、閉じていません。
内部で gluCone を呼び出しています。
void auxSolidCone(GLdouble base, GLdouble height);
void APIENTRY auxSolidCone(GLdouble base, GLdouble height);
ソリッドモデルの円錐を描画します。
Z軸周り15分割、Z軸に沿って10分割。
円錐の底面の中心が原点(0, 0, 0)、半径 base で、(0, 0, height)が円錐の先端となります。
底面は蓋はなく、閉じていません。
内部で gluCone を呼び出しています。
void auxWireTeapot(GLdouble scale);
void APIENTRY auxWireTeapot(GLdouble scale);
ワイヤーフレームのユタ・ティーポットを描画します。
グリッド10。
テクスチャ座標の生成にも対応。
ライティングを行う場合は、GL_AUTO_NORMAL を有効にして法線の自動生成を行う必要があります。
また、内部で glScalef を使っているため、スケールが 1.0 でなく、法線の正規化が必要です。
(他にスケール変更していない場合は、法線の再スケーリング(GL_RESCALE_NORMAL)でも可能。OpenGL 1.2 以上)
左手系でモデリングされているため、Z方向を-1.0倍して面の向きを変更するか、
glFrontFace(GL_CW) で表面の向きを変更する必要があります。
(テクスチャマッピングを行う場合は、そのままではそれぞれ画像が上下反転、上下左右反転します。
詳しくは auxSolidTeapot の説明をご覧ください。)
例) ティーポットを描画(Z 方向を-1.0倍する場合)
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE); /* または glEnable(GL_RESCALE_NORMAL); */
glPushMatrix();
glScalef(1.0, 1.0, -1.0);
auxWireTeapot(0.6);
glPopMatrix();
例) 面の向きを変える場合
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE); /* または glEnable(GL_RESCALE_NORMAL); */
glFrontFace(GL_CW);
auxWireTeapot(0.6);
glFrontFace(GL_CCW);
void auxSolidTeapot(GLdouble scale);
void APIENTRY auxSolidTeapot(GLdouble scale);
ソリッドモデルのユタ・ティーポットを描画します。
グリッド14。
テクスチャ座標の生成にも対応。
ライティングを行う場合は、GL_AUTO_NORMAL を有効にして法線の自動生成を行う必要があります。
また、内部で glScalef を使っているため、スケールが 1.0 でなく、法線の正規化が必要です。
(他にスケール変更していない場合は、法線の再スケーリング(GL_RESCALE_NORMAL)でも可能。OpenGL 1.2 以上)
左手系でモデリングされているため、Z方向を-1.0倍して面の向きを変更するか、
glFrontFace(GL_CW) で表面の向きを変更する必要があります。
例) ティーポットを描画(Z 方向を-1.0倍する場合)
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE); /* または glEnable(GL_RESCALE_NORMAL); */
glPushMatrix();
glScalef(1.0, 1.0, -1.0);
auxSolidTeapot(0.6);
glPopMatrix();

ただし、そのままテクスチャマッピングを行うと、画像の上下が逆となります。
例) テクスチャマッピングを行う(Z 方向を-1.0倍する場合)
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE); /* または glEnable(GL_RESCALE_NORMAL); */
glPushMatrix();
glScalef(1.0, 1.0, -1.0);
auxSolidTeapot(0.6);
glPopMatrix();

テクスチャマトリックスを用いて、T を -1.0 倍することで上下反転します。
例) 面の向きを変える場合
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE); /* または glEnable(GL_RESCALE_NORMAL); */
glFrontFace(GL_CW);
auxSolidTeapot(0.6);
glFrontFace(GL_CCW);

テクスチャの上下、左右が逆となるので注意。
例) テクスチャマッピングを行う(面の向きを変える場合)
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(-1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE); /* または glEnable(GL_RESCALE_NORMAL); */
glFrontFace(GL_CW);
auxSolidTeapot(0.6);
glFrontFace(GL_CCW);

テクスチャマトリックスを用いて、S, T を -1.0 倍することで上下反転、左右反転します。