5. Microsoft Windows での詳細

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

サミュエルPaikは、マイクロソフトウェブサイトについてのOpenGL情報にリンクの大きい宝庫を作成しました。

ブレーンホッジのWebページを見てくださいこのページのいくつかの例が推奨されないAUXライブラリを使うことに気づいてください

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

消費者レベル3Dグラフィックス市場は速く動きます。 すぐ、このFAQに置かれたどのような情報でも旧式です。

質問を、comp.graphics.api.openglニュースグループへのこのトピック、またはウィンテルベースの3Dゲームに捧げられた多くのニュースグループのうちの1つに投稿してさしつかえありません。 ウェブ検索もしてさしつかえありません。

トムのハードウェアガイド敏速グラフィックスは現在のグラフィックスカードについてのたくさんの情報を持っています

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

現在、OpenGLは、ハードウェア加速を可能にするか、または使用不可にするために、スイッチを含んでいません。 何人かのベンダが環境変数またはソフトウェアスイッチをこの機能に提供できます。

もしグラフィックスカードを取り付けるけれども、以下のためのハードウェア加速チェックを見ないならば

もしマルチモニタコンフィギュレーションを設定しようとしているならば、加速問題も持っているでしょう。 ハードウェア加速与えは、このコンフィギュレーションのすべて(または何でも)の機器においてサポートできるわけではありません。

アプリケーションから与えているソフトウェアを強制するためには、加速されたハードウェアではないピクセルフォーマットを選んでください。 これをするために、ChoosePixelFormat()を使うことができず、それが入手可能な時には、いつもそれがハードウェア加速ピクセルフォーマットを選びます。 代わりに、入手可能なピクセルフォーマットのリストを通じて繰返すために、DescribePixelFormat()を使用してください。 PFD_GENERIC_FORMAT属性ビットセットを持つどのようなフォーマットも、加速されたハードウェアではありません。

入手可能なピクセルフォーマットの上に繰返すことの例は、ここで見つけられえます

ハードウェア加速を使用不可にするそれほど風流ではない方法は、OpenGL ICDを動かすことまたは新しく名前をつけることです

また、デバイス・ドライバがダイアログボックスによって使用不可にハードウェア加速をサポートするかどうかをわかるために、機器のドキュメンテーションをチェックしてください

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

OpenGLは、ハードウェア加速用法を決定するために、直接的な質問を提供しません。 しかし、これは、通常、間接法を使って推定できます。

もしWin32インタフェース(GLUTと対比されるような)を使っているならば、DescribePixelFormat()を呼び、戻されたdwFlags bitfieldをチェックしてください。 もしPFD_GENERIC_ACCELERATEDがクリアで、PFD_GENERIC_FORMATが設定されるならば、ピクセルフォーマットは一般的なインプリメンテーションによってサポートされるだけです。 ハードウェア加速はこのフォーマットに可能ではありません。 ハードウェア加速のために、違うフォーマットを選ぶ必要があります。

もしglGetStringし(GL_VENDOR)ならば、「Microsoft Corporation」を除いた何かを戻す それは、ボードのICDを使っているのを意味しています。 もしそれが「Microsoft Corporation」を戻すならば、これは、機器が促進できないピクセルフォーマットを選んだのを暗示しています。 しかし、glGetString(GL_VENDOR)によって、もしまだ、このケースに加速されたハードウェアであるかもしれないのを意味しているICDの代わりに機器がMCDを持っているならば、これも戻ります。

ハードウェア加速をチェックする別の方法は、一時的にICDを削除することまたは新しく名前をつけることです。従って、それはロードできません。 もし性能が低下するならば、それは、前に加速されたハードウェアであったのを意味しています。 ICDをそのオリジナルな位置に回復することを忘れず、名付けないでください。 (ICDファイル名を見つけるためには、regeditユーティリティを実行し、「OpenGLdrivers」と名付けられたキーを検索してください。)

機器のための知られている性能統計に対して後ろのバッファに結果をし、比較することによって性能データも集めることができます。 この方法は、特に、いくつかの国の結合またはOpenGL機能のために与えているソフトウェアに戻る機器に有益です。 詳細については性能においてセクションを見てください

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

もし機器がOpenGLをサポートするならば、メーカーは、ICD(一般的に、デバイス・ドライバとして差し向けられます に )をそれに提供するでしょう。 ICDをインストールした後に、OpenGLアプリケーションは機器のハードウェア機能を使うことができます。

もし機器がディスクのICDによって来なかったならば、どこで最新のドライバーをダウンロードできるかをわかるために、メーカーのWebページをチェックする必要があるでしょう。 チップメーカーは、たぶん、ボードメーカーより流通するICDを持ちます。 デバイス・ドライバダウンロードページを見つけて、機器のために最新のパッケージを取ってき、提供された手順あたりそれをインストールしてください。

nVidiaデバイス・ドライバについて反応炉危険をチェックしてください。 それらは、しばしば、より流通するおよびnVidiaがそれらのWebページから入手可能にするよりよい実行OpenGLデバイス・ドライバを持っています。

GLsetup〈自由なユーティリティ〉は入手可能です。 GLsetup Webページによると、それ「ユーザーの3Dグラフィックスハードウェアを検出し、正しいデバイス・ドライバをインストールします。」。 Windows 2000デバイス・ドライバはサポートできません。 http://www.glsetup.comからそれを得ることができます。

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

それは単にコードのバグであるかもしれません。 しかし、もし別のOpenGLインプリメンテーションで同じで コード作品罰金 ならば、これは、問題がグラフィックス機器またはそのICDにあるのを暗示しています。 機器のための最新のICDを得ることについての情報のための先決問題を見てください

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

同じウィンドウの他のAPI(DirectDrawなどの)からの呼び出しを持つMoxing OpenGL呼び出しは、何人かのドライバーに取り組まず、従って無ポータブルです。 私はせず、それが推薦されます。

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

ウィンドウを作成し、ディスプレイ解像度および/またはピクセル深さを変更するために、DirectDrawを用いることができます。 そして、ウィンドウのDCを得て、それからOpenGL文脈を作成してください。 これは、いくつかの機器に取り組むと知られています。

私達が主題にいる間、マイクロソフトは必要とせず、その結果、それ、OpenGLをDirectDraw表面に表現する能力について試験を受けません。 まさに表面のDCを得ることができるので、OpenGLに与えることがサポートされるのを意味していません。 いつも、文脈を作成するか、またはそれら 電流 をmaiingする時に、エラーリターンをチェックしてください。

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

8bppにいますか? 8bppでの加速をサポートするPCに3Dアクセレータがほとんどありません。

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

ピクセルフォーマットはハードウェア加速を選びます。 フラグGENERIC_FORMATとGENERIC_ACCELERATEDに注意を払ってください。 もしICDを使っているならば、もし3D-DDIまたはMCDおよびonのどちらも使っていないならば、onにおいてそれらの両方を望んでいます。 ChoosePixelFormat()を使うだけである代わりにDescribePixelFormat()を使うことを繰返す必要があるかもしれません。

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

Windows 98において、複数のモニタが使用可能な時には、マイクロソフトは、OpenGLハードウェア加速を使用不可にすると決めました。 WindowsNT4.0では、同一の(または、ほとんど同一であるところです)カードを使う時に、何人かのドライバーが複数のモニタをサポートします。 私は、カードの種々のタイプによって複数のモニタとハードウェア加速OpenGL仕事を信じません。 私はWindows 2000によって物語を知らないけれども、それはWindowsNT4.0と同様そうです。

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

見方クラスはOnEraseBkgnd()イベントハンドラを持っているべきです。 この機能を無効にし、TRUEを戻すことによってフラッシュすることを取り除くことができます。 これは、Windowsに、窓をきれいにしたと言います。 もちろん、窓を本当はきれいにしませんでした。 しかし、機能を無効にして、マイクロソフトがあなたのためにそれをしようとすることを防ぎ、フラッシュすることを防止するべきです。

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

これはMS OpenGLについての問題です。 バグが一般的なコードにあること、またはことによると MS Windows自身 それが純粋なソフトウェア表現によってさえ起こる 。 バグのまわりで働くためには、これらの2つのmethidsのうちの1つを試してください:

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

OpenGL参照マニュアルエディタデイブShreinerによると

" 完全に注目せずにはいられない理由がない限り… 私は、opengl32.dllを使い、古いopengl.dll物を死なせることを本当に提案します。

"opengl.dllは、SGIによって、マイクロソフトWindowsのためのOpenGLのWindowsリリースのためのたった今すっかり未サポートであったOpenGLから来ます。 私達は、2年より多くへのそのリリースをサポートするのをやめました−−誰のようにコードが触れません。 …

" 現在、理由で使用opengl32.dll? 大部分は、SGIは、そこで OpenGLインプリメンテーション that 見つけるICDキット、サンプルドライバー、およびソフトウェアを、マイクロソフトに提供します。 その、opengl.dll、onlyでそれを出荷し、(ある意味では)サポートするために私達がマイクロソフトを取ってきたそれと本当に同じコードベース(修正および新しい機能による)。"

opengl.dllによってリンクすることについてのより多くの情報は、ここで見つけられえます

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

ここで2のよい比較が見つけられえます

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

OpenGLとマイクロソフト財団クラス(MFC)に精通している必要があります。 オンラインのMFC参照の入手可能、MFC FAQ。 OpenGLをMFCアプリケーションに追加するMFCグルである必要はない。 C++を持つ熟知は、マスターMFCをより容易にすることができて、MFCを より多く 知り、より多くあなたはOpenGLコードに集中できます。 もしMFCの基本の知識だけを持っているならば、下のダウンロード可能なソースコード例を見て、それを再生するのに必要なステップを見てください。

マイクロソフトウェブサイトについてのOpenGL情報へのリンクのサミュエルPaikの宝庫は、OpenGLとMFCを使うことについての情報も持っています。

ここには、役立っているかもしれない本のリストがあります。

Windows 95とWindowsNTのためにロンFosnerによってプログラミングしているOpenGL。 これはまた、白書として知られています。 それは、マイクロソフトWindowsのOpenGLを使うことについてのよい情報を含んでいます。 それの情報の多くはMSDNウェブサイトに見つけられうるけれども、本は情報をより論理的で、容易にdigestableなフォーマットで示し、よいデモで来ます。

Opengl Superbible: WindowsNTとWindows 95のためにリチャードSによってプログラミングしているOpenglへの完全なガイド。 ライトとマイケル甘味。 この本は章をOpenGLとMFCに含んでいます。

デイビッドホワイトなどによるVisual C++6解放を持つMFCプログラミング 本は短い章をOpenGLに含み、DirectXをもっと中心に行います。

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

OpenGLをMFCアプリケーションに追加するために、以下を少なくともする必要があります:

OpenGLを、フレームウィンドウ、ダイアログボックス、およびコントロールを含むどのようなCWndオブジェクトにでも表現することができます。

この例をダウンロードしてください。それはCStaticな帳票管理のOpenGLを示します。 このコードは、パラメータとしてその建設者にどのようなCWndでも取るCGlViewクラスを使います。 作成より、眺めはCFormViewから派生し、SDIアプリケーションを容易に作成すると、することができて、パラメータとして「これ」(CViewのinstantiation)を建設者に通過します。 マイクロソフトVisual C++v6.0を使ってこのサンプルコードを再生するために、これらのステップに従ってください:

  1. もしすでにそうしていなかったならば、例をダウンロードしてください。 続いているステップにおいてコードをそれから借りる必要があります。
  2. AppWizardを使ってMFCアプリケーションを作成してください。 使用は派生 CFormViewからの見方クラス を除いて履行を怠ります。 プロジェクトは資源エディタにおいて開きます。 帳票管理を、開いているCFormViewに追加してください。 それをIDC_OPENGLWINと呼んでください。
  3. Project->Settings...->Linkを選び、glu32.lib opengl32.libをオブジェクト/ライブラリモジュールのリストに追加してください。
  4. Project->AddからPeoject->Filesまでを選んでください… そして、上記の例コードからCGlView.cpp OpenGL眺めクラスソースファイルを追加してください。
  5. クラス表示から、クリック アプリケーションの表示クラス を正してください。および、選びます 追加メンバー変数 … 可変のタイプを、CGlView*とm_pclGLViewへの名、およびアクセス に 秘密である に設定してください。
  6. アプリケーションの見方クラスヘッダーファイルにおいて、#includeを追加してください クラス定義のすぐ前の「CGlView.h」 。
  7. 「theApp」のグローバルな宣言を見つけてください。 この宣言のすぐ後に、2つの新しいグローバル変数を追加してください:
    CGlView *g_pclGLView = NULL;
    MSG msg;
  8. 素晴らしいバーでは、アプリケーションの表示クラスフィルタが課されることをすべてクラスメンバーに設定してください。および、OnInitialUpdateメンバー機能を選びます。
  9. CGlViewクラスが働くように、それは、CWndがそのウィンドウのためのOpenGLを初期設定することを必要とします。 この例のために、私達のCWndは、ステップ1において私達が追加したCStatic帳票管理です。 この機能の既存のコードの後に、以下を追加してください:
    pclStaticで(CStaticです) =GetDlgItem のでCStaticです(IDC_OPENGLWIN);
    m_pclGLView =新規CGlView(pclStatic);
  10. View->ClassWizardによってクラスウィザードを開いてください。 メッセージマップタブから、プロジェクトのアプリケーションクラスを選んでください。 運転メッセージのための機能ハンドラを追加してください。 ダウンロードされた例から、生成されたコードを運転メッセージハンドラと交換してください。

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

MFCの何もOpenGLアプリケーションを遅い運転に保証していません。 しかし、いくつかの貧しく書かれたMFCアプリケーションがゆっくり動くかもしれません。 これはどのような開発環境でも可能性であり、OpenGLに特有ではありません。 以下を注意するために、ここにはいくつかの物があります:

  1. デバッグの代わりにリリースとしてアプリケーションを構築してください。 TRACEデバッグ機能を使用不可にしてください。
  2. 非能率なデータコピーを実行するCArray、CMap、CListなどのMFCクラスを避けてください。
  3. WM_PAINTメッセージを避けて性能を改善することができるかもしれません。 例えば、上で問題を見てください これをするソース 。
  4. MFCクラスは汎用です。 最大の性能のために、MFCクラスの調整されたインプリメンテーションを書いてください。
  5. 冗長な呼び出しなどを避けるなどの標準の効率的なプログラミングテクニックを使ってください

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

このFAQは例を含んでいます

アランOursland、Visual C++バージョン4.x、DevCentral学習センター、http://devcentral.iftech.com/learning/tutorials/mfc-win32/opengl/の使用OpenGL。 これはよいけれども、日付を書かれます。 それは、あなた SDI MFC OpenGLアプリケーションで始められる をつかまえます。

Mahesh Venkitachalam、OpenGLコード、http://home.att.net/~bighesh/ogl.html。 Maheshはa 無 のOpenGLを示します いくつかのOpenGLテクニックとともにアプリケーション見事、最小MFCプログラム 。

ローマ人Podobedov、Windows(MFC)のためのOpenGLプログラムのスケルトン。 http://madli.ut.ee/~romka/opengl/demos/win32_eng.htm。 これはコントロールまたはアプリケーションウィザードなしで最小のMFCプログラムです。

ポールMartz ランダムなフラクタル地形を生成する 。 http://www.gameprogrammer.com/fractal.html。 これはMFC SDIアプローチのよい例です。 しかし、例の主要なフォーカスは、地形 to which OpenGL バックシートを取る とMFC です。

[5] ピエールAlliez、ダイアログにおいてOpenGLを始めます。 http://codeguru.earthweb.com/opengl/texture_mapping.shtml

ピエールAlliez、開始モード。 http://www.codeguru.com/opengl/start.shtml。 これはsplitterウィンドウ例です。

ピエールAlliez どのようにOpenGLクライアントを断線し、それをクリップボード、http://codeguru.earthweb.com/opengl/snap.shtmlに送るか 。

ピエールAlliez、OpenGLとMFCを使っているA小形VRMLビューア。 http://www.codeproject.com/opengl/wrl_viewer.asp

ウーベKotyczka、Enu.zip、http://www.8ung.at/kotyczka/opengl_en.html。 この少し大きく、印象的なMFC寄与がデモをすること複数のOpenGL眺め、ラバーバンディング、色ランプ、マウストラックボールタイプコントロール、MFC MDIとSDI枠組でのOpenGL印刷など。 これはVC++6.0(SP4)で組み立てられました。

5.190 WGL と GDI コールとを混在させるためには何を知ればいいですか?
5.200 コードが WindowsNT や 2000 でクラッシュします。9X では動きます。なぜ?
5.210 WGL 関数を正しく使うには?

チャールズE。 Hardwidgeがチュートリアルの記事を持っていること、およびこれらの問題に対処するダウンロードのための例。 アイデアが、WGL、GDIを使うことであることおよびマイクロソフトOpenGL ICDメカニズムが仮定されないOpenGL機能そのようなもの。