かみのメモ

コンピュータビジョン・プログラムな話題中心の勉強メモ

NVIDIA 3D Vision 2を入手したのでOpenGLでテストアプリを書いてみた

色々あってNVIDA謹製の3Dグラス「NVIDIA 3D Vision 2」と対応ディスプレイが手に入ったので、とりあえず立体視できる映像を表示してくれるプログラムを書いてみようと思った。

入手したデバイスはこれ↓

https://www.amazon.co.jp/dp/B006D9WLKO

NVIDIA 3D Vision 2 Kit GV1431-3DV2R

NVIDIA 3D Vision 2 Kit GV1431-3DV2R

その他の環境は以下の通り。

Windows 10 Home
GeForce GTX 1060 3GB
ASUS SWIFT PG248Q

とりあえず3Dグラスの動作確認

まずはEmitterをUSBでPCに接続。 手持ちのディスプレイはLCDだったのでVESA 3-pinのケーブルは使用せず。

デスクトップで右クリック>NVIDIAコントロールパネル>ステレオスコピック3D>ステレオスコピック3Dを設定します>ステレオスコピック3Dを有効にする、にチェックを入れてしばらく待つ。 画面が何度か明滅した後にセットアップのウィンドウが出てくるので指示に従って操作を進める。

自分の場合は最初、ディスプレイが3D対応だと認識されなかった。 ケーブルにDisplayPort - HDMIを使っていたので、試しにDisplayPort - DisplayPortに替えてみたらうまく認識された。

セットアップが済んだら最後にサンプル画像が出てくるので、ちゃんと立体視できていることを確認。

プログラムを書く

いつも使っているOpenGL+GLFWの環境で書く。

Visual Studio Community 2017
OpenGL 4.6.0 NVIDIA 388.73
GLFW 3.2.1

シェーダーを書くのが面倒だったので、旧APIで塗りつぶしの四角を描画する処理を実装した。

glfwInit();

glfwWindowHint(GLFW_STEREO, GLFW_TRUE);
GLFWwindow* const window = glfwCreateWindow(1920, 1080, "3DTest", glfwGetPrimaryMonitor(), NULL);
glfwMakeContextCurrent(window);
glfwSwapInterval(1);

glViewport(0, 0, 1920, 1080);

while (!glfwWindowShouldClose(window)){
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glDrawBuffer(GL_BACK_RIGHT);
    glColor3f(1.0f, 0.5f, 0.0f);
    glBegin(GL_QUADS);
    glVertex2f(0.5f, 0.5f);
    glVertex2f(0.0f, 0.5f);
    glVertex2f(0.0f, -0.5f);
    glVertex2f(0.5f, -0.5f);
    glEnd();

    glDrawBuffer(GL_BACK_LEFT);
    glColor3f(0.0f, 0.5f, 1.0f);
    glBegin(GL_QUADS);
    glVertex2f(-0.5f, 0.5f);
    glVertex2f(0.0f, 0.5f);
    glVertex2f(0.0f, -0.5f);
    glVertex2f(-0.5f, -0.5f);
    glEnd();

    glfwSwapBuffers(window);
    glfwPollEvents();
}

重要なのはwindowを作成する前にglfwWindowHint(GLFW_STEREO, GLFW_TRUE);を実行しておくことと、描画処理の前に右目用・左目用どちらに対してレンダリングするのかをglDrawBuffer(GL_BACK_RIGHT);glDrawBuffer(GL_BACK_LEFT);で指定してあげること。

あと、OpenGLのウィンドウが全画面表示されている状態でないと3D表示になってくれないようなのでglfwCreateWindow(1920, 1080, "3DTest", glfwGetPrimaryMonitor(), NULL);としておく。 NVIDIAコントロールパネルの設定をいじればこのあたりは改善できるかもしれない。

上記のプログラムを実行して、右目にオレンジの長方形、左目に青の長方形が見えていれば成功!

雑感

NVIDIA 3D Visionの情報が全然見つからないですね(汗。

最近はヘッドマウントディスプレイが台頭してきたこともあって、3Dグラス関連の技術が急速に廃れていっている印象があります。