予有發展汽車控制系統的程序,它使用的TCL腳本語言和OpenGL的組合來附加地呈現行駛的汽車的行爲一條路。
我正在做的是實現OculusRift對它的支持,到目前爲止設法解決sesor部分,並右鍵單擊汽車駕駛的窗口,我可以將它發送到oculus裂谷。到目前爲止,它看起來像這樣:Youtube-Video
程序的可視部分有大量的已經功能包括瞭如調整FOV,魚眼鏡頭,攝像頭的方向,汽車內部視圖等
環視後選項軟件文件夾,我發現如下的TCL文件:
// ... cut here
gl pushmatrix
gl loadidentity
gl translate $x $y $z
gl rotate $xrot 1 0 0
gl rotate $yrot 0 1 0
gl rotate $zrot 0 0 1
gl translate $offx $offy $offz
lassign [lrange [OGL get modelviewmatrix] 12 14] tx ty tz
gl popmatrix
dict set ::View($view) CameraMode FixedToBodyA
dict set ::View($view) xrot $xrot
dict set ::View($view) yrot $yrot
dict set ::View($view) zrot [expr $zrot + $zrot_eyeAngle]
dict set ::View($view) dist $conf(dist)
dict set ::View($view) VPtOffset_x $tx
dict set ::View($view) VPtOffset_y $ty
dict set ::View($view) VPtOffset_z $tz
dict set ::View($view) FieldOfView $conf(fov)
dict set ::View($view) AspectRatio $conf(AspectRatio)
return;
}
我沒有發現,處理渲染本身,而是「GL」 - 命令就足以讓我明白,這TCL文件將被直接運行的任何行附加到渲染過程。所以我擴展了上面這樣的:
// load a self written DLL that wraps OVR functionality (Github link bellow)
# now run tclovrGetData() from the loaded DLL to get sensor data
set data [tclovrGetData]
// data = x y z xrot yrot zrot
gl pushmatrix
gl loadidentity
gl translate $x $y $z
gl rotate $xrot 1 0 0
...
正如你可以在視頻中看到,它看起來在監視器上不錯,但我們知道裂谷的鏡頭失真帶來的(這只是對我來說很輕微),還有一些色差。
我的想法
我要的是搶的是,在視頻「圖像/紋理/幀」屏幕上的每個10-20ms(我還是新來的術語),並做一些color-過濾(我想看看我是否可以減少色差)。然後或許(爲了使獨立)使用修改過的圖像創建一個新窗口並將其發送給Rift。基本上以所需的「格式」獲取圖像以便能夠對其執行計算。
我的想法是(因爲我們連接到渲染過程)添加一些額外的線路上面調用我的DLL中的附加功能,可以做以下TCL文件:
// Begin Oculus rendering loop
//1. get frame that is currently being rendered (in this process)
//2. copy this frame to memory
//3. perform some operations (color filtering) on this frame in memory
//4. send this frame to a new window
現在我的問題:
- 會是這樣的事情嗎?
- 有人能指引我進入正確的方向嗎?即我可以使用一些gl函數?
- 也許Direct3D的工作原理?
我看過This職位上計算器,但無法理解:/
顯示器硬件不應該爲你處理那種事情嗎?必須在軟件中完成硬件應該處理的事情永遠不會是有效的或合理的...... – 2014-11-05 16:33:00
是的,它應該。那麼OculusRift仍處於開發狀態。我也不知道是否在使用Oculus軟件進行渲染時進行某種後處理,以儘量減少這種情況。但至少我沒有看到來自鏡頭的色差校正。 我的第一個計劃實際上是使用Oculus渲染功能。但是我真的感到不知所措,特別是因爲我對模擬器軟件的訪問有限,因此不知道如何獲取紋理/幀信息以將它們重新路由到Oculus渲染引擎。 – Skavee 2014-11-06 10:27:38