OpenGL FAQ とトラブルシューティングガイド(日本語版)

Last update : 2001.11.02(ChangeLog)
本家の更新に合わせて日本語版も更新作業中
http://www.gimlay.org/~andoh/opengl/oglfaq/
maintained by Yukio Andoh (andoh@opengl.com)


1 このFAQについて 15 透明、半透明と、ブレンディングの使い方
2 はじめに 16 ディスプレイリストと頂点配列
3 GLUT 17 フォントの使い方
4 GLU 18 ライトと影
5 Microsoft Windows での詳細 19 曲線、表面、エバリュエータの使い方
6 ウィンドウ、バッファ、レンダリングコンテキスト 20 ピッキングとセレクションの使い方
7 ウィンドウ・システム、オペレーティングシステムと入力装置とのインタフェース 21 テクスチャ・マッピング
8 ビューイングとカメラ変換の使い方と gluLookAt() について 22 パフォーマンス
9 変換 23 拡張とバージョン
10 クリッピング、カリング、可視性テスト 24 その他
11 付録 A マイクロソフトOpenGL情報
12 デプスバッファ 付録 B ソースコード一覧
13 ポリゴン上の線描画と、ポリゴンオフセット 付録 C OpenGL の歴史
14 フレームバッファのラスタ化の方法と操作方法 OpenGL FAQ 英語版

1  このFAQについて

1.010 紹介

1.020 貢献する方法と、貢献者

1.030 Zip ファイルとして FAQ の全てをダウンロードする方法

1.031 PDF 版 FAQを印刷する方法

1.040 変更履歴

2  はじめに

2.005 3Dグラフィックスの情報をどこで見つけることができますか?

2.010 どこで例、チュートリアル、ドキュメントや他の OpenGL 情報を見つけることができますか?

2.020 どんなOpenGL本が入手可能ですか?

2.030 どんな OpenGL チャットルームとニュースグループが利用できますか?

2.040 ソースコードのある OpenGL 実装にはどのようなものがありますか?

2.050 OpenGL を利用するにはどんなコンパイラが使用できますか?

2.060 OpenGLプログラムをコンパイルして、実行するために何を必要としますか?

2.070 なぜコンパイル、リンク時または実行時にエラーになるのか解りません。

2.080 どのようにウィンドウを初期化し、コンテキストなどを生成すれば良いですか?

2.090 フルスクリーンのウィンドウを作るにはどうしたら良いですか?

2.100 OpenGLプログラムの一般的な形式は、どんなものですか?

2.110 ウィンドウが空白です。どうしたらよいですか?

2.120 最初のフレームは正しく表示されます、しかしその後のフレームは不正確であるか、表示されません。もしくは空白の画面になります。どうしてでしょう?

2.130 AUX ライブラリとはどのようなものですか?

2.140 {Open,Net,Free}BSD や Linux の OpenGL にはどのようなものがありますか?

2.150 OpenGL 1.2 はどこにありますか?

2.160 OpenGL適合テストとは何ですか?

3  GLUT

3.010 GLUT とは何ですか?それは OpenGL とどのように違うのですか?

3.020 GLUT を使わなければいけませんか?

3.030 左マウスボタン押下時の操作と右マウスボタン押下時とで違う動作をする必要があります。しかし一つのglutMotionFunc() しか設定できません。それはパラメータとしてボタン情報を渡すことができません。どうしたら良いでしょう?

3.040 GLUT は何をするのですか?

3.050 GLUT でアニメーションを実行するにはどのようにしたら良いですか?

3.060 ウィンドウを開いた後でそのサイズを変更することはできますか(glutInitWindowSize() とglutCreateWindow() を呼んだ後で)?

3.070 GLUT プログラム起動時に割り当てるメモリ領域がある、プログラム終了時にどのようにメモリを解放すればよいか?

3.080 GLUT プログラムでユーザがウィンドウを閉じたことをどのようにして知ることができますか?

3.090 コールしたプログラムからどのようにして glutMainLoop() へ戻ってくることができますか?

3.100 Windows の GLUT アプリケーションからどのようにしたらコンソールウィンドウを取り除けますか?

3.110 私の GLUT に関する質問の回答はここにはありません。どこにより詳しい情報がありますか?

4  GLU

4.010 GLU とは何ですか?それは OpenGL とどのように違うのですか?

4.020 GLU はどのようにして球、円柱、円板形状を描くのですか?

4.030 gluPickMatrix はどのような働きをしますか?

4.040 GLUテセレーションルーチンはどのように使えますか?

4.050 なぜテセレーションコールバックルーチンが呼ばれないのでしょう?

4.060 GLU NURBS ルーチンはどのように使えますか?

4.070 gluProject と gluUnProject はどのように使えますか?

5  Microsoft Windows での詳細

5.010 Win32 OpenGL プログラミングに関する良い情報源はありますか?

5.020 ある価格範囲の Wintel OpenGL カードを探しています。良い提案はありますか?

5.030 Wintel カードのハードウェアレンダリングの有効/無効をどのようにしたら切り替えることができますか?

5.040 私のプログラムが Wintel カード上でハードウェアアクセラレーションが得られるかどうかは、どのようにしたら判りますか?

5.050 Wintel カードのための OpenGL ICD はどこから手に入れることができますか?

5.060 Wintel 用のカードを使っていますが、どうも機能していないように感じます。何が起こっているのでしょう?

5.070 DirectDraw で OpenGL を使うことができますか?

5.080 スクリーン解像度や、ビクセルの色数の深さを変えるのに、DirectDraw を使ってもいいのでしょうか?

5.090 私のカードは OpenGL をサポートしています。しかしどのピクセルフォーマットを試してもアクセラレーションが得られません

5.100 どのようにしたらハードウェアアクセラレーションが得られるのでしょう?

5.110 OpenGL ハードウェアアクセラレーションが複数モニタには効かないのはなぜですか?

5.120 なぜダブルバッファを使っていても、MFC ウィンドウがフラッシュ(点滅)するのでしょうか?

5.121 なぜダブルバッファウィンドウが不完全に見える、または黒い斜線が入るのですか?

5.130 opengl.dll と opengl32.dll との違いは何ですか?

5.140 Direct3D と OpenGL とどちらを使ったら良いでしょう?

5.150 MFC で OpenGL を使うためには、何を知っている必要がありますか?

5.160 MFC で OpenGL を使うにはどのようにしたらよいですか?

5.170 OpenGL は MFC で使った時に、本来のスピードより遅くなりますか?

5.180 MFC の例がどこにありますか?

5.190 WGL と GDI コールとを混在させるためには何を知ればいいですか?

5.200 コードが WindowsNT や 2000 でクラッシュします。9X では動きます。なぜ?

5.210 WGL 関数を正しく使うには?

6  ウィンドウ、バッファ、レンダリングコンテキスト

6.010 オーバーレイプレーンはどのようにして使うのですか?

7  ウィンドウ・システム、オペレーティングシステムと入力装置とのインタフェース

7.010 ウィンドウの幅と高さ、スクリーンの幅と高さの最大値を得るにはどうしたら良いですか?

7.020 どんなユーザーインターフェイスシステムを使うべきですか?

7.030 複数モニタを使うにはどうしたら?

8  ビューイングとカメラ変換の使い方と gluLookAt() について

8.010 OpenGL においてカメラはどのように働きますか?

8.020 シーンの中でどのように視点やカメラを動かすことができますか?

8.030 ModelView やプロジェクションマトリックスのどこでカメラを動かせばいいのですか?

8.040 ズーム操作の実行はどのようにして行えばいいのですか?

8.050 現在 ModelView マトリックスがカレントの状態です。オブジェクト空間でのカメラ位置を指定するにはどのようにしたら良いのでしょうか?

8.060 シーン内においてのカメラの「軌道」はどのようにして作ればよいですか?

8.070 全てのモデルが表示できるようにビューを自動計算するにはどうしたら良いですか?バウンディング球と、上方ベクトルがわかっています

8.080 なぜ、gluLookAt が動かないのでしょう?

8.090 指定された点 (XYZ) をシーンの中央に表示されるにはどうしたらよいでしょうか?

8.100 プロジェクションマトリックスに gluLookAt() のコールを加えました。フォグ、ライティング、テクスチャマッピングが動かなくなりました。何が起こったのでしょう?

8.110 立体表示を行うにはどうしたら?

9  変換

9.001 変換のことが解りません。どこでマトリックスについて多くのことを学ぶことができますか?

9.005 OpenGL のマトリックスは行メジャーですか列メジャーですか?

9.010 OpenGL 座標の単位は何ですか?

9.011 座標はどのように変換されますか?異なる座標系ではどう違いますか?

9.020 シーンの一つのオブジェクトだけを変形させる、または各オブジェクトを変形させるにはどのようにしたら良いですか?

9.030 三次元描画の上に二次元で描くにはどうしたら良いですか?

9.040 OpenGL マトリックス変換を介さずに、ラスタライゼーションのための二次元座標を直接与えるにはどうしたら良いですか?

9.050 絶対座標と、相対座標を使う際の利点と欠点は何ですか?

9.060 同じ場面を複数の視点から見たように描くにはどのようにしたら良いですか?

9.070 固定された座標系のシステムの中のローカル座標系のオブジェクトを変形させるにはどうしたら良いですか?

9.080 glFrusum() と gluPerspective() を使う時の利点と欠点は何か?なぜ他のものよりそれを使った方が良いのですか?

9.085 glFrustum() を呼ぶときに、gluPerspective() に合わせるようにするにはどうすれば良いですか?

9.090 スクリーンいっぱいの四角形を描くにはどうすれば良いですか?

9.100 与えられたオブジェクト空間座標に対応するスクリーン座標を得るにはどのようにしたら良いですか?

9.110 スクリーン上のピクセルに対応するオブジェクト空間座標を求めるにはどうしたら良いですか?

9.120 モデルビューマトリックスだけで変形する頂点座標を見つけるにはどのようにしたら良いですか?

9.130 表示画面から得られた点のオブジェクト空間座標での距離を求めるにはどうしたら良いですか?

9.140 ウィンドウのサイズ変更後も正しいアスペクト比を保つにはどうしたら良いですか?

9.150 OpenGL は左手座標系の空間を使うことができますか?

9.160 あるオブジェクトまたは点を指すか、後を追うような形でオブジェクトを変形させることができますか?

9.162 オブジェクトを揺らしたり、ピッチ&ロール変換するには?

9.170 鏡を描くにはどのようにしたら良いですか?

9.180 自分の空間内での大きさを計るにはどうしたら良いですか?

10  クリッピング、カリング、可視性テスト

10.010 頂点がクリップされたかされないかはどうしたら解りますか?

10.020 隠れているか、見えているかのテストはどのようにしたらできますか?

10.030 矩形でないビューポートの場合どう描けばよいのでしょう?

10.040 OpenGL プリミティブの、ある頂点がウィンドウの外に出た時に、突然色や、マッピングがおかしくなりました。何が起こっているのでしょうか?

10.050 ジオメトリがビューボリュームの中に在ることが分かっています。その際、パフォーマンスを最大にするために OpenGL のボリュームクリッピングをオフにするには、どうしたらよいですか?

10.060 オブジェクトの近くに視点を動かすと、オブジェクトが消え始めますOpenGL の zNear クリッピングプレーンの効果を無くすることができますか?

10.070 ウィンドウの左端や一番下の外にある点を glRasterPos の初期値としてglBitMap や glDrawPixels プリミティブを描くのにはどうしたら良いですか?

10.080 glClear は切り取った長方形の外ではなぜ働かないのですか?

10.090 面カリングはどのようにして使うのですか?それが表面の法線を使わないのはなぜですか?

11  

11.010 テクスチャマップの色の青と赤が逆に、黄色とシアン、その他が逆になっています。どうしてでしょう?

11.020 RGBウィンドウにカラーインデックスで描くにはどうしたら良いですか?またはその逆はどうしたら良いですか?

11.030 Microsoft Windows で描こうとする時、色がほとんど見つかりません。いったい何が起こっているのでしょうか?

11.040 プリミティブに正確な色を指定するにはどうしたら良いですか?

11.050 プリミティブごとに個別の色で描くにはどうしたら良いですか?

12  デプスバッファ

12.010 デプスバッファを機能させるにはどうしたら良いですか?

12.020 パースペクティブ描画において、デプスバッファが働きません。どうしてですか?

12.030 デプスバッファに以前保存されたデプスイメージを書き込むにはどうしたら良いですか?

12.040 デプスバッファは動いているように見えます。けれどもポリゴンが突き抜けて前に出ているところがあります。何が起こっているのでしょうか?

12.050 デプスバッファの精度がとても低いのはなぜでしょうか?

12.060 zNear クリッピングプレーンをオフにするにはどうすれば良いですか?

12.070 前面の方がデプスバッファの精度が高いのはなぜですか?

12.080 普通の大きさには十分な精度があるデプスバッファが、私の扱う巨大なシーンでは十分ではありません。なにかいい方法はありますか?

13  ポリゴン上の線描画と、ポリゴンオフセット

13.010 ポリゴンオフセットを使うための基本は何ですか?

13.020 glPolygonOffset() では二つのパラメータをコールします。それらの意味は何ですか?

13.030 OpenGL 1.0 のポリゴンオフセット拡張と、OpenGL 1.1 以降のポリゴンオフセットインタフェースの違いは何ですか?

13.040 塗りつぶされたプリミティブの上に線プリミティブを描くとき、ポリゴンオフセットが働かないのはなぜですか?

13.050 ポリゴンオフセットを使いたくないとき、同一平面上のプリミティブを描くためにどのような方法がありますか?

14  フレームバッファのラスタ化の方法と操作方法

14.010 OpenGL のフレームバッファに直接書き込むためのアドレスを取得するにはどうしたら良いですか?

14.015 glDrawPixels と glReadPixels はどのように使うのですか?

14.020 既存のウィンドウにおいて、ダブルバッファとシングルバッファのモードを切り替えるにはどうしたら良いですか?

14.030 フレームバッファから一つのピクセルの情報を読み取るにはどうしたら良いですか?

14.040 描かれたプリミティブの Z値を得るにはどうしたら良いですか?

14.050 ステンシルバッファに描いたパターンを入れるにはどうしたら良いですか?

14.060 フロントバッファから、バックバッファへ、またはその逆へコピーするにはどうしたら良いですか?

14.070 ウィンドウの一部が他のウィンドウと重なっている場合、glReadPixels でその重なっている部分のピクセルデータがおかしいのはなぜですか?

14.080 異なる変換で見るとき、スムーズシェーディングされた四角形の外見が違うのはなぜですか?

14.090 線の正確なピクセル化された情報はどうしたら得られますか?

14.100 覆うか、留め継ぎにして広い線のエンドポイントをつけるにはどうしたら良いですか?

14.110 ラバーバンド線を描くにはどうしたら良いですか?

14.120 塗りつぶしモードで四角形を描いて、その後ラインモードで四角形を描いた場合、なぜ線と四角形は同じピクセルに描かれないのですか?

14.130 スクリーンいっぱいの四角形を描くにはどうしたら良いですか?

14.140 glClear()を呼ばずにバッファを初期化するかきれいにするにはどうしたら良いですか?

14.150 線や多角形のアンチエイリアシングを働かせるためにはどうしたら良いですか?

14.160 フルシーンアンチエイシリアシングを行うにはどうしたら良いですか?

15  透明、半透明と、ブレンディングの使い方

15.010 透明と、半透明、ブレンドされたプリミティブの違いは何か?

15.020 透明効果はどのようにしたら使えますか?

15.030 網戸のような透明効果はどうしたら作れますか?

15.040 OpenGL でグラスを描くにはどのようにしたら良いですか?

15.050 半透明のプリミティブ正しく描くために、後ろから前面にむかって順にプリミティブを描く必要がありますか?

15.060 ブレンディングを使いたいがアルファ情報を取得することができない。アルファ情報無しで、透明効果をブレンドするか、つくることができますか?

15.070 半透明のプリミティブを描き、その後ろにもう一つのプリミティブを描きます。一つ目のプリミティブを透して二つ目のプリミティブが見えると思うのですが、実際は見えません。なぜですか?

15.080 テクスチャーマップを透明や、半透明で利用するにはどのようにしたら良いですか?

16  ディスプレイリストと頂点配列

16.010 ディスプレイリストがたくさんの記憶容量を使うのはなぜですか?

16.020 異なるコンテキスト間でディスプレイリストを共有するにはどうしたら良いですか?

16.030 ネスト(階層化)されたディスプレイリストは動きますか?呼び出されたリストは呼び出しリストにコピーされるのですか?

16.040 ディスプレイリストが呼ばれている間、ある特定の機能を動かすことができますか?

16.050 ディスプレイリストの中の多くの機能呼び出しを、他の OpenGL 機能の呼び出しに差し換えることができますか?

16.060 ディスプレイリストからパラメータと呼び出される機能のリストを得ることができますか?

16.070 ディスプレイリストを使うようプログラムを書き換えました。けれども少しも速くなりません。なぜですか?

16.080 領域を節約するため、ディスプレイリストに保管する前に全ての座標を short に変換しておかなければいけませんか?

16.090 ディスプレイリストの中にテクスチャーを置くと速く動きますか?

16.100 ディスプレイリストの中に頂点配列を置くと速く動きますか?

16.110 コンテキスト間でディスプレイリストを共有しているとき、一方のコンテキストでディスプレイリストを削除してしまった場合、 何が起こりますか?また、完全に削除するためには全てコンテキストにおいて、削除を実行しなければいけませんか?

16.120 どのくらいたくさんのディスプレイリストを作ることができますか?

16.130 ディスプレイリストはどのくらいメモリを消費しますか?

16.140 ディスプレイリストが使っていたメモリ領域が使用後に解放されるかどうかはどうやったら解りますか?

16.150 形状の頂点として、頂点配列を利用するにはどのようにしたら良いですか?

17  フォントの使い方

17.010 OpenGL シーンにフォントを追加するには?

17.020 OpenGL シーンで TrueType フォントを使用するには?

17.030 輝かせたり、影をつけたり、回転させたりできる 3D 文字列を作成するには?

18  ライトと影

18.010 ライト処理について知っておくべき一般的な事がらは?

18.020 なぜ私のオブジェクトはすべて同一色で、陰影も光もないのでしょう?

18.030 OpenGLに曲面法線を自動的に計算させるには?

18.040 モデルにライティングしても、フラット・シェーディングしか得られないのですが?

18.050 光を動かしたり、動かないようにしたり、光の位置をコントロールするには?

18.060 スポットライトを機能させるには?

18.070 GL_MAX_LIGHTSで定義された数より多くのライトを生成するには?

18.080 glMaterial*()関数の呼び出しと、glColorMaterial()の使用のどちらが速いですか?

18.090 シーンのサイズを変更した後、照光処理が不正確になるのはのなぜ?

18.100 ライティング処理を行ったら、すべてのオブジェクトが光ってしまいました。いくつかのオブジェクトだけを照らすことは出来ますか?

18.110 OpenGLでQuake のようなライトマップを使うには?

18.120 屈折光の効果を得るには?

18.130 焦面をレンダリングするには?

18.140 自分のシーンに影を追加するには?

19  曲線、表面、エバリュエータの使い方

19.010 OpenGLのエバリュエータで B-スプライン曲面を作るには?

19.020 エバリュエータによって生成された幾何学的数値を取得するには?

20  ピッキングとセレクションの使い方

20.010 ユーザがマウスでどのプリミティブを選んだのかを知るには?

20.020 セレクションを利用するためには何を知らなければなりませんか?

20.030 なぜセレクションが機能しないのでしょうか?

20.040 セレクションコードのデバッグするには?

20.050 PHIGS や PEX と同じようなピッキングのハイライトを行うには?

21  テクスチャ・マッピング

21.010 テクスチャ・マッピングのための基本手順はどういうものですか?

21.020 テクスチャ・マッピングを使用しようとしているのですが、うまくいきません。何がいけないのでしょう?

21.030 テクスチャ・マッピングを利用すると、ライティングが機能しなくなるのはなぜでしょう?

21.040 ライティングとテクスチャ・マッピングはうまくいきます。しかし、スペキュラーのハイライトがでないのはなぜでしょう?

21.050 テクスチャ・コーディネイトを自動で生成するには?

21.060 ディスプレイ・リストにテクスチャ・マップを入れておくべきでしょうか?

21.070 テクスチャ・オブジェクトはどのように機能するのでしょうか?

21.080 違ったレンダリングのコンテクスト間で、テクスチャを共有するには?

21.090 表面に複数のテクスチャを適用するには?

21.100 ライト・マッピングをするにはどうしたらよいですか?

21.110 GIF, JPG, BMP のようなファイルをテクスチャ・マップで使用するには?

21.120 どのようにテクスチャーマップに与えることができますか?

21.130 自分のデバイスによってハードウェアアクセラレーションされるテクスチャ・マップの最大サイズは?

21.140 球体、円柱、その他複数の断面のあるオブジェクトにテクスチャ・マップするには?

22  パフォーマンス

22.010 パフォーマンスについて知るべきことは?

22.020 アプリケーションのパフォーマンス測定方法は?

22.030 どのプリミティブが最速か?

22.040 冗長なコールにかかる時間は?

22.050 (n) 個の光源をつけている状態で (n+1) 番目の光源をオンにすると、突然パフォーマンスが劇的に落ちたが、何が起きたのか?

22.060 n 個の異なるテクスチャ・マップを使用中に、(n+1) 枚目のテクスチャ・マップを使用し始めると、パフォーマンスが劇的に落ちたが、何が起きたのか?

22.070 glDrawPixels()とglReadPixels()コマンドが大変遅いのはなぜか?

22.080 絶対座標と相対座標とどちらを使う方が速いか?

22.090 ディスプレイリストと頂点配列とどちらが速いか?

22.100 三角形から三角形ストリップにするにはどうするのですか?

23  拡張とバージョン

23.010 どこで種々の OpenGL 拡張に関する情報が得られますか?

23.020 どのバージョンの OpenGL をプログラムで使用しているかどうすれば分かりますか?

23.030 OpenGL1.0、1.1、および1.2各バージョンの違いは何ですか?

23.040 OpenGL の異なるバージョンに対してどのようにコーディングするか?

23.050 どの拡張がサポートされているかはどうすればわかるか?

23.060 目的のプラットフォームに存在していないかもしれない拡張に対してはどのようにコーディングするのか?

23.070 マイクロソフト Windows では拡張ルーチンをどのようにコールするのか?

23.080 Linux では拡張ルーチンをどのようにコールするのか?

23.090 拡張一覧およびファンクションのプロトタイプはどこにあるか?

24  その他

24.010 陰線消去して、ワイヤーフレームのシーンを描画するには?

24.020 ラバーバンドの線を表現するには?

24.030 初期化コードで OpenGL 実装の情報を得るために glGetString() を呼んだが、文字列を戻さないのはなぜか?

24.039 三次元モデルファイルはどこにあるか?

24.040 3DS, OBJ, DEM などの形状ファイルを読みこみ、それを OpenGL で表示する方法は?

24.050 OpenGL 描画した画像を GIF, TIF, JPG, BMP などのイメージファイルで保存する方法は?またそれらのイメージファイルを読み込んでテクスチャ・マップとして使用する方法は?

24.060 OpenGL で BSP ツリー構造が使えますか?

24.070 OpenGL で octree 構造が使えますか?

24.080 OpenGL でラジオシティ法が使えますか?

24.090 OpenGL でレイトレーシング法が使えますか?

24.100 OpenGL で CSG(空間領域構成法) を使うには?

24.110 OpenGL で衝突検出を行うには?

24.120 OpenGLが内部バッファでコマンドのキャッシングが可能なのは分かったが、こうしたバッファが実行されないもしくは空であるだけなので、無効にすることは可能か?

24.130 glFlush() と glFinish() の違いは?これらのルーチンはどう使うのか?

24.140 OpenGL で印刷するのはどうすれば?

24.150 アプリケーションの OpenGL 関数呼び出しを記録し、ログを取ることは可能か?

24.160 赤青ステレオ画像の描画方法は?

Appendix A マイクロソフト OpenGL 情報

Appendix B ソースコード一覧

Appendix C OpenGL の歴史

Original: OpenGL FAQ and Troubleshooting Guide
This Japanese version based on [2001.11.01] version.
Special Thanks to: Paul Martz and many contributors.