各類走彎路, 矩陣還不是很會. git
osg的自帶漫遊器對像機有影響, 起初不知道.github
如今還有一些未解之迷, 好比90幀 的幀率是怎麼來的? SteamVR提供的?api
手柄模型目前依然用面的繪製方式, 很差看, 不會openGL,沒辦法.數組
找到了加載手柄的代碼:
error = vr::VRRenderModels()->LoadRenderModel_Async( pchRenderModelName, &pModel );//1: lh_basestation_vive 2:vr_controller_1_5
但這個函數LoadRenderModel_Async裏有源碼函數
CGLRenderModel::Draw() RenderModel把本身畫出來, 問題是經過什麼方式把本身畫出來
裏面調用的方法, 是來自glew.h的spa
那麼, 可否用原生的OpenGL 在OSG中繪圖?對象
1>main.obj : error LNK2001: 沒法解析的外部符號 __imp___glewActiveTexture
1>main.obj : error LNK2001: 沒法解析的外部符號 __imp___glewBindVertexArray
1>MSVCRT.lib(crtexe.obj) : error LNK2001: 沒法解析的外部符號 main
由於文件SDL.h, 出現了沒法解析main的錯誤.
LNK2001 是平臺問題 sample示例用的是Debug win32
Debug與Release的區別可能不要緊,由於Sample項目就是加載Release版的lib,但用Debug版編譯
這個Sample是在OSG64文件夾內的,倒是32位
編譯經過, 如今要加載dll
openvr108\samples\bin\win64 這裏面也有個glew32.dll
出現已中止工做 , 出錯位置是0x0000 沒有出錯的代碼處事件
沒有OpenGL的基礎, 這個錯誤我解決不了.圖片
############################################################################################文檔
若是, 顯示手柄是SteamVR或HTC VIVE內置的api. 那麼,是沒有模型文件的.
但, 在OpenGL裏, 與Unity裏, 手柄的表現是不同的. OpenGL裏沒有扳機按壓的過程.
renderModelName 與OpenGL裏的 同樣是:vr_controller_vive_1_5
############################################################################################
https://github.com/ValveSoftware/openvr/wiki/API-Documentation#initialization-and-cleanup
IVRSystem 兩隻眼睛的映射, 頭盔手柄的跟蹤, 事件的響應
Compositor排字工人 在updatePose裏有被用到 WaitGetPoses
IVOverlay 疑似在三維場景中顯示二維圖像的API 有例子, 但例子是QT的
若是要作模型程序,現有的VR場景要能跑通
Screenshots 我猜是截屏截成圖片, 兩個sample工程都沒用到, 不知具體是什麼
那麼, 桌面屏幕的投影是怎麼實現? HMD的投影是怎麼實現的? IVRSystem
扣代碼, 直接扣過來用啊. 目前需求是, 在VR裏顯示osg的場景,就這一點而已.
把OpenVRDll64那個工程再複製一遍過來後, 就沒有頭文件衝突的那一狀況了.
以前封裝的函數, 不能正常顯示
如今想封裝成一個inline函數 , 各類出錯
####
爲了拷手柄模型獲取代碼, 還要加引入頭文件的目錄
glew32.lib
出現不能解析的外部符號bool __cdecl CGLRenderModel::BInit
代碼還沒拷完
把glew32.dll拷過來, 這個dll在x64下也能用.
GetRenderModelCount() 這個函數取出來的模型數是51 ,太多了, 且不受設備開關的影響,多是一個常量
helloVR是怎麼取到設備名的, helloVR是怎麼取到設備id的
helloVR中, 經過 GetTrackedDeviceString這個函數取設備名
手柄的設備號是3或4
osg這邊取到的設備名是: generic_controller 與 generic_hmd 分別是3與4
設備數只有4個, 沒找到更多設備 vr::k_unTrackedDeviceIndex_Hmd 算上跳過的這個,五個
又要建全局變量, 還好在模塊內,其餘模塊調取不到.
還要應對手柄中途關掉或沒電的狀況.
在openvrdevice裏無法取得viewer因此繪圖依賴外部調用.
####
取到的3與4並非vr手柄模型, 輸出全部模型, 沒有以前的
lh_basestation_vive 2:vr_controller_1_5
vr 手柄在16個模型以外
大於4的模型名:5 : generic_tracker
大於4的模型名:6 : hard_bounds
大於4的模型名:7 : laser_pointer
大於4的模型名:8 : lh_basestation_01_boysandgirls
大於4的模型名:9 : lh_basestation_02_batman
大於4的模型名:10 : lh_basestation_03_robin
大於4的模型名:11 : lh_basestation_vive
大於4的模型名:12 : lighthouse_ufo
大於4的模型名:13 : mptam_hmd_model
大於4的模型名:14 : oculus_cv1_controller_left
大於4的模型名:15 : oculus_cv1_controller_right
能顯示手柄模型了 雖然不完美
###################################################################
如今手柄的移動與現實中不匹配.
看看hellovr裏怎麼作的.RenderControllerAxes裏做了處理
m_rmat4DevicePose這數據也是從mDeviceToAbsoluteTracking裏取的.
手柄的旋轉亂遭遭的, 是否是左手座標系?
在hellovr_opengl_main.cpp的1145行作矩陣的試驗
因此, 那矩陣的最後一行就是座標 這行不受
還能夠看看頭盔是怎麼移動的.
頭顯的移動, 也是受角度影響的, 卻沒問題. 有一個不一樣點是, 頭顯是做用於像機,而手柄是做用於場景中的物體.
環境不同, hellovr裏的取到的矩陣, 取到的最後一行不因角度的改變而改變.
hellovr輸出: 1.918463, 0.884200, 0.470154 , 1.000000
osg輸出: 0.179302, 0.00267851,0.0541984, 1
####################################################################
要麼學會計算, 要麼找出座標不一樣的緣由
####################################################################
openvrdevices是如何刷幀獲取設備座標的?
在OpenVRUpdateSlaveCallback裏 updatePose被調用
osg這邊, 與openGL有沒有什麼初始化參數上的區別?
從openvrdevices裏, 看不到什麼參數
有沒有90幀這個參數?沒有! 那麼updateSlave在哪被調用?
slave中有調用updateSlaveImplementation這個是osg的函數,多是由這個觸發osg刷新的,
否則osg只有60幀
OpenVRUpdateSlaveCallback : public osg::View::Slave::UpdateSlaveCallback
是用OSG的規範
m_view對象只,有兩個slave視口
gc->setSwapCallback(swapCallback); 是否是這句有影響?
最後,在swapBuffersImplementation失去線索
####################################################################
例子的代碼可讀性是有的, OpenVR文檔是有的, 但我該怎麼作?
如何由VR設備進行刷幀 , 我找不到, 只能由osg觸發刷幀
那麼, 先作出一個模型程序, 看可否取得View的刷幀事件回調函數.
就先用NodeCallback StackOverflow上,也是這麼講的
如今輸出了整個矩陣數組, 發現m[0][3] ~ m[2][3]是能夠的.
那爲何Matrix44不行?
建幾個立方體來做參照物
跟據參照物, 手柄的X與Z沒問題
參照物,大小爲.3的, 爲z向
1. 對於手柄, 有個軸是反的, 倒底是手柄模型要倒置仍是座標要倒置?
2. 像機的座標規範, 但可否用手柄的規範
狀態1:放桌上
0.957936 0.0671016 0.279027 0
-0.129168 0.969042 0.210413 0
-0.25627 -0.237603 0.936947 0
-0.0621173 0.0138077 -0.157989 1 <<Matrix44
狀態2:放椅子上
0.865644 0.010904 0.500541 0
-0.125182 0.972721 0.195301 0
-0.484757 -0.23172 0.843396 0
-1.19622 -0.439365 3.71773 1 <<Matrix44
狀態3: 椅子靠窗
0.945089 0.0206033 0.326164 0
-0.101473 0.967185 0.232931 0
-0.310661 -0.253237 0.916166 0
0.0451128 -0.428728 3.79893 1 <<Matrix44
狀態4:椅子離窗
0.956137 0.0306015 0.291316 0
-0.106346 0.962934 0.247889 0
-0.272932 -0.267997 0.923951 0
-2.19937 -0.433549 3.14582 1 <<Matrix44