2012-01-18 66 views
3

我正在使用在Windows 7上運行的開源觸覺和3D圖形庫Chai3D。我已經重寫了庫,以便與Nvidia Nvision一起進行立體3D。我正在使用OpenGL和GLUT,並使用glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_STEREO)來初始化顯示模式。它在Quadro卡上效果很好,但在GTX 560m和GTX 580卡上它表示像素格式不受支持。我知道顯示器能夠顯示3D,而且我知道這些顯卡能夠渲染它。我嘗試調整屏幕的分辨率和其他所有我能想到的,但似乎沒有任何工作。我曾在不同的地方閱讀過使用OpenGL的立體3D只能在全屏模式下工作。所以,我能想到的唯一可能的原因是我以窗口模式啓動。如何強制應用程序在啓用3D的全屏模式下啓動?任何人都可以提供一個使用OpenGL的四緩衝立體3D代碼示例,它適用於後來的GTX模型卡?如何在GTX 560及更高版本上使用OpenGL進行立體3D?

回答

2

簡單:你不行。不是你試圖去做的方式。

有一個預先存在的程序與立體眼鏡做事情和做你正在做的事情有區別。您試圖做的是使用OpenGL的內置立體聲支持:創建立體幀緩衝區的能力,您可以在其中任意渲染左右幀緩衝區。

NVIDIA不允許他們使用非Quadro顯卡。它有驅動程序中的黑客將強制立體聲應用與nVision和控制面板。但NVIDIA的GeForce驅動程序不允許您創建立體幀緩衝區。

在你問之前,不,我不知道NVIDIA爲什麼不讓你控制立體聲。

+0

嗯,我知道這是可能的DirectX。那麼,OpenGL的問題是什麼?是否有可能使用DirectX初始化3D,然後對所有繪圖使用OpenGL等? – 2012-01-18 23:43:19

+0

然後,想一想,我知道我的GTX 580是一個四級卡(它使用相同的架構)。我聽說有些人能夠將驅動程序改裝成實際的四驅車。 – 2012-01-18 23:46:48

+0

@JohnJenkins:不,它不是。 D3D沒有用於立體渲染的API。你所說的是一個幕後的驅動技巧,僅此而已。 D3D 11.1 *將*明確支持立體顯示器,但11.0和以前的所有版本都不支持。 – 2012-01-19 00:06:06

7

您的體驗沒有技術上的原因,但簡直就是NVidia的產品政策。 Quadbuffer立體聲被認爲是一種專業功能,所以NVidia僅在其Quadro顯卡上才提供它,即使GeForce GPU也可以。這不是最近的發展。早在1999年就是這樣。例如,當時我(當然還有)GeForce2 Ultra。但從技術上講,這是與Quadro完全相同的芯片,唯一的區別是PCI-ID向系統報告。人們可以通過修補PCI-ID(通過修補驅動程序或將額外的電阻焊接到顯卡PCB上)來欺騙駕駛者,使其認爲您擁有Quadro。

Direct3D黑客的立體3D模式已經被我的GeForce2支持。那時,驅動程序複製了渲染命令,但將模型視圖的平移應用到投影矩陣。這些天它實現了着色器和多重rendertarget技巧。

NVision3D API確實允許您爲特定的眼睛(這是爲了電影播放器​​和圖像查看器)blit圖像。但是它也允許你模擬四緩衝立體聲:而不是GL_BACK_LEFT和GL_BACK_RIGHT緩衝區創建兩個幀緩衝對象,你可以像使用四緩衝立體聲一樣綁定和使用它。然後在渲染後,將結果圖像(作爲紋理)粘貼到NVision3D API。

只需50行管理代碼,您就可以構建一個可在NVision3D和四緩衝立體聲上無縫工作的程序。 NVidia所做的是毫無意義的,他們現在應該停下來,在消費類GPU上正確支持quadbuffer立體像素格式。

+0

謝謝。最後一些答案。你能提供一個這個管理代碼的例子,或者將我指向一個源代碼?我如何讓眼鏡進入3D模式並同步傳輸圖像?我在nvidia控制面板中看不到任何選項來強制3D模式。 – 2012-01-20 04:35:56

+0

@datenwolf,你可以評論[報告](http://www.mtbs3d.com/phpbb/viewtopic.php?f=105&t=16849&start=40)新的驅動程序啓用GTX卡上的四重緩衝? – foobarbecue 2015-02-05 20:57:00

+0

@foobarbecue:我必須看看它。關於立體視覺,我現在主要是做VR和HMD的東西,整個quadbuffer的支持對於這些人來說都不是問題。 – datenwolf 2015-02-08 04:25:03

0

因爲我正在爲自己的遊戲尋找這個問題,所以我發現這個鏈接有人攻擊了USB協議。http://users.csc.calpoly.edu/~zwood/teaching/csc572/final11/rsomers/

我沒有按照它通過,但在我研究這個時候它並沒有很難利用這些信息。所以你可能必須實現你自己的代碼才能在你的應用中支持它,這應該是可能的。不幸的是,通用的解決方案會更困難,因爲那樣你就必須破解驅動程序或以某種方式掛鉤到OpenGL庫並攔截這些調用。

相關問題