24. その他

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

好まれた方法は、幾何学を2つのパスに表現することです: 最初、バックグラウンド色にセットされた絵の具で、それを、満たすモードに表現し、そして、再びそれをラインモードに表現してください。 ポリゴンオフセットをそう使いなさい ポリゴンの上のラインは正しく与えます。 ポリゴンオフセットされたセクションは、あなたに役立っているかもしれません。

しばしば、勾配満たしやイメージなどの不均一なバックグラウンドを保存する必要があります。 このケースにおいて、すべてのGL_FALSEに設定されたglColorMask()によって、満たすパスを実行し、そして、いつものようにラインパスを実行してください。 また、Z戦いを最小化するために、ポリゴンオフセットを用いてください。

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

ラスタ化セクションでこの問題を見てください

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

この問題の最もありそうな原因は、文脈が流通させられなかったことです。 OpenGL文脈が存在しなければならず、作られる どのようなOpenGL呼び出しでも機能し、有意義な価値を戻すために、ウィンドウのために流通します。

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

これがほとんどOpenGLが必要である必要がないので、続いているものは、決して徹底的なリストではありません:

http://www.3dfiles.com/
http://www.3dcafe.org/
http://www.saturn-online.de/~cosmo/
http://www.swma.net/

要求するどのようなパッケージでも使ってあなた自身の3Dモデルを作ることができて、それから、幾何学ファイルをロードします。 ModelMagic3Dはシェアウェアであり、ソースコードによって来ます。 GLSceneはまた入手可能です。

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

3DグラフィックスAPIであるOpenGLは、アプリケーション具体的なファイル形式を読むことへの内蔵のサポートを全然持っていません。 もし具体的なファイルの種類を読む必要があるアプリケーションを書いているならば、特定のファイルの種類をサポートするために、コードを追加する必要があるでしょう。

多くのOpenGLユーザーは、これをするために、すでにコードを書き、ウェブで 場合によっては、コード 入手可能です。 少しはここでリストされます。 もし捜しているものを見つけることができないならば、ウェブ検索をしてみるでしょう。

このファイル形式情報はさまざまな種々のファイル形式をカバーします。

OkinoのPolyTransは、最も主要な3Dファイル形式をOpenGL Cコードに変換できます。 デモはそれらのウェブサイトで入手可能です。

岐路は多くのファイル形式を輸入し、頂点配列によって使用に適当なC/C++ compilableデータとしてデータを出力することができます。

3DWinOGLは、どのようなファイル形式でも読み取り、OpenGLプリミティブデータを戻すシェアウェアです。

もし3DスタジオMAXを使っているならば、輸出品が、ASCII(すなわち、大きいファイルサイズ)である呼ばれるASEをフォーマットするのを見るけれども、非常に構文解析しやすい。

XGLファイル形式は、すべてのOpenGL3D情報を蓄える可能性があることを意図しています。 オープンソースparserと3DSファイルコンバーターは入手可能です。

GLUTソース配布をダウンロードし、中にprogs/デモ/スムーズであるように見えてください。 ファイルglm.cは、Wavefront OBJファイルを読み取るためのルーチンを含んでいます。

glEliteは、DXF、ASCII、およびLightWaveファイルを読みます。 glEliteについての情報は以下のアドレスに発見されるかもしれません: http://www.helsinki.fi/~tksuoran/lw.htmlhttp://www.cs.helsinki.fi/~tksuoran/glelite/

3D探検は、C/C++ソースに輸出することを含むいくつかの種々のファイル形式を輸入し、輸出します。

使用のためにOpenGLによってデザインされたDelphiの3DS輸入ライブラリは、ここで見つけられえます

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

表現を保存するために、最も容易な方法は、あなたにスクリーンまたはウィンドウを捕らえさせる多くのイメージユーティリティのうちの何でも使うことであり、それを保存してください ファイルである 。

これをプログラムに基づいて遂行するために、glReadPixels()によってイメージを読み、イメージファイルを作成するルーチンへのインプットとしてイメージデータを使います。

同様に、イメージファイルを読み、テクスチャーマップ、あなたに、イメージファイルを読むルーチンが必要なので、それを使うために。 そして、glTexImage2D()によってテクスチャーデータをOpenGLに送ってください。

OpenGLはあなたのためのイメージファイルを読まず、書きません。 イメージファイルを読むか、または書くためにあなた自身のコードを書くことができること、他の誰かが書いたコードを含んでください。またはイメージファイル・ライブラリへの呼び出し。 以下のリンクは合計3つの戦略についての情報を含んでいます。

このファイル形式情報はさまざまな種々のファイル形式をカバーします。

独立なJPEGグループは読み書きJPEGファイルのための自由なライブラリを持っています。

C++mkOpenGLJPEGImageクラスを使って、JPEGイメージファイルとして与えることを省くことができて、OpenGLテクスチャーにロードJPEGとBMPファイルで直接反対します。

TGAファイルを読むためのソースコードはここで見つけられえます

gdライブラリは、あなたにプログラム内のJPGとPNGファイルを作成させます

Imlib(「ダウンロード」 セクション を検索してください)は、JPEG、GIF、PNG、およびTIFFファイルの外でプログラムが書くことを可能にする帯封ライブラリです。

Delphiのイメージローダライブラリはここで見つけられえます

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

BSP木はOpenGLアプリケーションにおいて有益であるかもしれません。

OpenGLアプリケーションは、一般に、隠面除去を実行するために、深さテストを用います。 しかし、アプリケーションおよび幾何学データベースの性質に依存することによって、BSP木は、深さテストと連携して使われる時または深さテストの代わりに使われる時に、性能を強化できます。

BSP木は、また、不可視の幾何学をデータベースから選ぶために使用できます。

BSP木が、後ろ-前の表現を保証する優秀なソート方法を提供する時 可能な混合を持つ半透明なプリミティブ 。

BSP木についてのより多くの情報は、BSP FAQに発見されるかもしれません。

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

はい。 OpenGLの何も、octreeを使うことを防止しません。 octreeは、閉塞選択拡張と連携して使われる時に、特に役立っています(HP GL_HP_occlusion_testなど)。

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

OpenGLはradiosityへの少しの直接的なサポートも含まず、それは、前計算されたradiosityを含んでいるデータベースを表示することを防止しません 見積もる 。

アプリケーションは、表示されるデータベースの上のそれ自身のradiosity繰返しを実行する必要があります。 個々の頂点で十分な色値が計算された後に、アプリケーションは正常なOpenGLプリミティブとしてデータベースをし、個々の頂点で、計算された色を指定します。 glShadeModel()はGL_SMOOTHに設定されるべきで、点火は使用不可にされるべきです。

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

OpenGLは、raytracingすることへの直接的なサポートを全然含んでいません。

リアルな影と映像を生み出すために、raytracingを用いたいかもしれません。 しかし、raytracingせずにOpenGLのこれらの効果を多くの点でシミュレーションできます。 いくつかのアルゴリズムのためのテクスチャー・マッピングにおいて影のセクションまたはセクションを見てください。

光線交差テストの一部としてOpenGLを使うことができます。 例えば、場面は、個々のプリミティブに割り当てられたユニークな色によって場面に表現されえます。 この色は、与えられたピクセルで光線が横切っているプリミティブを決定するために、後ろに読まれえます。 もしこのアルゴリズムにおいて正確な幾何学が使われるならば、あるエイリアシングは結果として生じているでしょう。 これらのエイリアシング人工物を減らすために、代わりに、隣接巻をできます。

また、第2の光線の交差テストのために、観点と眺め方向、あなたを変更してこのアルゴリズムを使うことができます。

レイトレーシングアプリケーションは、最終的なイメージを表示するためのOpenGLも使うことができます。 このケースでは、アプリケーションは、個々のピクセルの色値を計算することについて責任があります。 ピクセルはその時個々のGL_POINTSプリミティブとしてされるか、または配列において蓄えられて、呼び出しを経てglDrawPixels()に表示できます。

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

Openglプログラミングガイド〈第3版〉は、いくつかのテクニックを、幾何学のデータのCSG操作の結果を表示することに記述します。

GLUT 3.7配布は、有益であるかもしれないcsg.cと呼ばれる例プログラムを含んでいます。

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

OpenGLは衝突検出への直接的なサポートを全然含んでいません。 アプリケーションはこの操作自身を実行する必要があります。

OpenGLは、潜在的な衝突を、それが光線交差を評価できるのと同じ方法で評価するために用いられえます(すなわち、場面は、オブジェクトの隣接長方形に限定された正書法の投影と見方フィールドによって、動作の方向に見てオブジェクトの観点からされます。) 可視のプリミティブは潜在的な衝突候補者です。 範囲を決定するために、それらのZ価値を試験できます。

呼ばれる衝突検出に自由なライブラリがあります I_COLLIDE 見つけてもよい 有益なので、入手可能である 。

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

OpenGLコマンドをあなたの後のNo.は出し、必然的に、それらは実行されます。

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

OpenGLスペックは、実行を待っているバッファにおいてインプリメンテーションがコマンドとデータを格納することを可能にします。 glFlush()は、これらのバッファを、空にされて、実行します。 従って、どのような未決定の表現コマンドでも実行されるけれども、それらの実行が完全な前に、glFlush()は戻ることができます。 glFinish()は、すべてのコマンドの効果が実行されて、アップデートされるまで、インプリメンテーションに、戻って来ないのを指示します。

glFlush()の典型的な用途は、前のバッファに与える時にコマンドがexectedされることを保証することであるかもしれません。

もしアプリが、OpenGLおよびウィンドウシステムの引いているコマンドを使うのを引くならば、glFinish()は特に有益でしょう。 そのようなアプリケーションは最初、OpenGLを引き、そして、ウィンドウシステムの引いているコマンドを出すことを続行する前に、glFinish()を呼びます。

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

OpenGLは、現在、サービスを、プリントすることに全然提供しません。 OpenGL ARBは、もし現在ならば印刷のためのより一般的なインタフェースを可能にするGLSストリームプロトコルを議論し、システム具体的な方法によって、プリントして遂行されるだけです。

マイクロソフトWindowsプラットフォームにおいて、ALT-PrintScreenはクリップボードにアクティブ・ウインドウをコピーします。 (全体のスクリーンをコピーするためには、デスクトップを、それをクリックすることによってアクティブにし、そして、ALT-PrintScreenを使ってください。) そして、マイクロソフトペイントやそこからの印刷などのどのような2D画像処理ソフトウェアにでもクリップボードの内容を貼り付けることができます。

スクリーンまたはウィンドウキャプチャユーティリティを提供するどのような共通の2D画像処理パッケージででも与えているOpenGLを捕らえることができて、そこからプリントします。

また、プラットフォームで入手可能などのような方法でもprogramaticallyに使うのをプリントできます。 例えば、マイクロソフトWindowsにおいて、ウィンドウを読むために、glReadPixels()を使用してもよく、ピクセルデータをDIBに書き、印刷のためのDIBを提出します。

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

IBMは、これをするZAPdbと呼ばれる製品を持っています。 それは、IBMとHPを含む多くのUNIXインプリメンテーションによって出荷します。 それはWindowsNTで過去に入手可能であったけれども、その現在のステータスは未知です。 無IBM WebページはZAPdb ダウンロードで利用可能である を持っているようです。

インテルのGPTはこの機能もサポートします。

自由なユーティリティ呼ばれたGLTrace2があり、それはZAPdbとGPTと同様なキャプチャ機能を含んでいます。 GLTrace2についてのより多くの情報は、ここで見つけられえます

理論において、することができて コード OpenGL機能エントリポイントを含んでいる簡単なライブラリ 、通過するファンクションコールとパラメータを記録します。 このライブラリopengl32.dllを名付けて、それをWindowsシステムフォルダに蓄えてください(第一に、既存のopengl32.dllを保存するために慎重であってください)。 これは難しいプログラミング仕事であるはずがないけれども、それは退屈で、時間を無駄遣いしているかもしれません。 この解決はマイクロソフトWindowsに制限されません; 適切なライブラリ名を使うことによってすることができます コード アプリケーションを提供する 動的にloadableなライブラリによってリンクされるどのようなプラットフォームのこのキャプチャユーティリティでも 。

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

展望セクションは、ステレオの表示を作成することについての問題を含み、リンクを作成立体写真についての情報に持っています。 基本的なアイデアは、OpenGLで次の通りです:

  1. glColorMask(GL_TRUE、GL_FALSE、GL_FALSE、GL_FALSE)
  2. もし赤いイメージが左のイメージであるならば、投射を設定し、左イメージのための行列をモデル見てください。
  3. クリアな色と深さバッファおよび左イメージをします。
  4. glColorMask(GL_FALSE、GL_FALSE、GL_TRUE、GL_FALSE)
  5. 投射を設定し、右のイメージのための行列をモデル見てください。
  6. クリアな色と深さバッファおよび右のイメージをします。
  7. スワップバッファ。

見えて、どのようにこれをするかのGLUT 3.7デモがあります。