やっぱり、最近はやりのステレオ表示が気になるわけで。
(「3D」っていうと、ポリゴンな「3Dグラフィクス」のことなのか、
それとも「立体視」のことなのか紛らわしい、と思う今日この頃。)
ってことで、思い切って
3D対応のディスプレイ(GD245HQ)と
NVIDIA 3D Vision (アクティブシャッターの付いたメガネのアレ)を購入し、
ステレオ表示環境をそろえてみた。
(ディスプレイについてのレビューは、またそのうち、ってことで。)
で、そうなってくると、
OpenGLのステレオバッファを使って
自分でステレオ表示ができるプログラムを作ってみたくなるのだが、
GeForce系ではステレオバッファがサポートされておらず、
実質的にはQuadro系のグラフィックボードを使うしかない。
ということで、つづいてQuadro 2000を購入。
Quadro高いよ・・・。
ってなことで、
OpenGLでステレオバッファを使ってステレオ表示する方法を調べてみた。
→プログラム側でやること
- まずは、レンダリングコンテキストを作成するときに
ピクセルフォーマットでスレテオバッファを指定。 - で、右目用、左目用のシーンを
glDrawBuffer() で BackLeft, BackRight を指定して
左目用バックバッファと右目用バックバッファそれぞれに描画する。 - wglSwapBuffers() を呼べば
BackLeft, BackRight 両方いっぺんにフロントバッファに
転送されるので、そこはあんまり気にする必要は無いっぽい。
NVIDIAコントロールパネルで設定する必要があるのが少々めんどくさい。
- NVIDIAコントロールパネルの「Manage 3D setting」内、
「Program Setting」タブで、「Add」ボタンをクリックしてビルドしたプログラムを選択。
(Visual Sutudio のデバッグで実行する場合は、~.vshost.exe を選択する。) - でもって、その下のリスト(Feature - Setting のリスト)で、
「Stereo - Display mode」 を 「Generic active stereo (with NVIDIA IR Emmitter)」、
「Stereo - Enable」 を 「On」
に設定する。
同時にメガネのアクティブシャッターもONになるはず。
DirectXだとフルスクリーンにしないとステレオ表示できないが、
OpenGLだとウィンドウ表示でもステレオ表示できるみたい。
(ただし、Windows Aero がOFFになる。)
ちなみに、OpenGLの場合は
IR Emitter(メガネの同期用の赤外線送信機)の
On/Offスイッチと、裏のホイールは機能しません。
なので、プログラム側でステレオ表示のOn/Off機能とか
奥行き感の調整機能とかを用意しないといけないようだ。
あと、右目・左目のシーンを描画するときに、
左右の視点の位置のずらし方をうまくやらないと不自然な見え方になってしまうので、
このへんもプログラム側で工夫しないといけない。