1

アプリケーションでクアッドバッファビデオカードの存在を正しく検出して、3D表示が可能な場合にのみステレオ表示を有効にできるようにしたい。

私はここに2台のMacコンピュータを持っています:1)nvidiaQuadro4000ビデオカードを搭載したMacProMac OS10.6.8デスクトップ; 2)2つのビデオボードを備えたMacBookProラップトップMacOS 10.6.8 a:組み込みのIntel HDグラフィックスとb:nvidiaGeForce330M。

最初のコンピューターには、カードに3Dメガネ用のコネクタがあります。それは私がステレオ3Dを表示したいものです。2台目のラップトップコンピューターでハードウェアステレオを表示することはできないと思います。そのため、アプリケーションがどの種類のコンピューターを使用しているかを検出し、適切に反応するようにします。私はそれを行う方法を知っていると思いました。しかし、それは機能していません。私のアプリケーションは、クアッドバッファステレオが両方のコンピュータで機能すると考えています。

簡単なテストプログラムを目撃してください。

#!/usr/bin/python

"""
Test program to demonstrate apparent quad-
buffered stereo support on Mac laptop
"""

from OpenGL.GL import *
from PySide.QtGui import QMainWindow, QApplication
from PySide.QtOpenGL import QGLWidget, QGLFormat
import sys

class MyGLWidget(QGLWidget):
    "Simple OpenGL canvas to test stereoscopic display capabilities"
    def __init__(self, parent=None):
        # Constructor for QGLWidget grabs a default OpenGL context
        # (which was set up in the main program, below)
        QGLWidget.__init__(self, parent)
        if self.format().stereo():
            # According to Qt docs, this is supposed to be the way to detect
            # quad buffered stereo support
            print "Quad buffered stereo appears to work(2)"
        self.useStereo = self.format().stereo()

    def initializeGL(self):
        "initializeGL is called once, after the OpenGL context is really ready"
        print "initializeGL"
        if glGetBooleanv(GL_STEREO):
            # This is the real OpenGL way to detect quad buffered stereo
            print "Quad buffered stereo appears to work(3)"
        self.useStereo = glGetBooleanv(GL_STEREO)

    def paintGL(self):
        if self.useStereo:
            # Left eye fill with yellow
            glDrawBuffer(GL_BACK_LEFT)
            glClearColor(1, 1, 0, 1)
            glClear(GL_COLOR_BUFFER_BIT)
            # Right eye fill with cyan
            glDrawBuffer(GL_BACK_RIGHT)
            glClearColor(0, 1, 1, 1)
            glClear(GL_COLOR_BUFFER_BIT)
        else:
            # Both eyes fill with green
            glDrawBuffer(GL_BACK) # both left and right
            glClearColor(0, 1, 0, 1)
            glClear(GL_COLOR_BUFFER_BIT)

# Attempt to use stereoscopic QGLFormat OpenGL format
# To work, this must be called before MyGLWidget is constructed.
fmt = QGLFormat.defaultFormat()
fmt.setStereo(True)
if fmt.stereo():
    print "Quad buffered stereo appears to work(1)"
QGLFormat.setDefaultFormat(fmt)

# The usual Qt hello world boilerplate...
app = QApplication(sys.argv)
win = QMainWindow()
win.setCentralWidget(MyGLWidget(win))
win.show()
sys.exit(app.exec_())

両方のコンピューターで、3つすべての「クアッドバッファーステレオが機能しているようです」というメッセージが出力されます。
120Hzステレオモニターを備えたステレオ対応ワークステーションでは、120 Hzで黄色とシアンの色が切り替わるため、ウィンドウの背景は淡いライムグリーンに見えます。60Hzのモニターでは、発作を誘発する2つの色の間のちらつきを知覚することができます。このちらつきはラップトップにも表示されます。これは、クアッドバッファステレオを実際にサポートしている可能性があることを示しています。

最後の問題点:ラップトップを外部モニターに接続すると、外部モニターにちらつきが重なって表示されますが、ラップトップの画面ではウィンドウが黄色、つまりBACK_LEFTバッファーの色のみです。ノートパソコンの画面だけ、または外部モニターだけで、ちらつきの表現型を観察します。

GeForce 330Mビデオボードは本当にMacでクワッドバッファステレオをサポートしていますか?私のプログラムから実際のクアドロボードを検出するためのより良い方法はありますか?

4

1 に答える 1

1

私がテストしたすべてのMacコンピュータは、クアッドバッファステレオをサポートしています。いわゆる消費者レベル(つまり、Quadro以外)のビデオカードを使用している場合でも。これは私のラップトップでさえステレオをサポートすると主張する理由を説明しています。そうだから。

すべてのMacがクアッドバッファーステレオをサポートしていることを証明するには、同期信号なしでフレームシーケンシャルステレオを受け入れる3Dハードウェアが必要でした。私は今、それを仕事で持っています。そして、私はMacコンピューターから美しいクアッドバッファーステレオを見ています。これは素晴らしいです。では、なぜMac指向のstereo3Dソリューションを販売しているベンダーを見つけることができないのでしょうか。この美しい機能はMacに潜んでいて、誰もそれがそこにあることに気付いていないようです。

于 2012-09-07T12:37:14.030 に答える