vr:: compute iproj correctly

This commit is contained in:
Zeno Rogue 2022-02-28 17:28:50 +01:00
parent b022c3c84e
commit 4891c735b7
1 changed files with 23 additions and 15 deletions

38
vr.cpp
View File

@ -794,6 +794,24 @@ EX void track_actions() {
}
}
EX void get_eyes() {
for(int a=0; a<2; a++) {
auto eye = vr::EVREye(a);
E4;
vrdata.proj[a] =
vr_to_hr(vrdata.vr->GetProjectionMatrix(eye, 0.01, 300));
vrdata.iproj[a] = MirrorZ * inverse(vrdata.proj[a]);
// println(hlog, "projection = ", vrdata.proj[a]);
vrdata.eyepos[a] =
vr_to_hr(vrdata.vr->GetEyeToHeadTransform(eye));
// println(hlog, "eye-to-head = ", vrdata.eyepos[a]);
}
}
EX void start_vr() {
if(true) { sm = Id; sm[1][1] = sm[2][2] = -1; }
@ -830,23 +848,12 @@ EX void start_vr() {
println(hlog, "recommended size: ", int(vrdata.xsize), " x ", int(vrdata.ysize));
for(int a=0; a<2; a++) {
auto eye = vr::EVREye(a);
vrdata.eyes[a] = new vr_framebuffer(vrdata.xsize, vrdata.ysize);
println(hlog, "eye ", a, " : ", vrdata.eyes[a]->ok ? "OK" : "Error");
vrdata.proj[a] =
vr_to_hr(vrdata.vr->GetProjectionMatrix(eye, 0.01, 300));
vrdata.iproj[a] = MirrorZ * inverse(vrdata.proj[a]);
println(hlog, "projection = ", vrdata.proj[a]);
vrdata.eyepos[a] =
vr_to_hr(vrdata.vr->GetEyeToHeadTransform(eye));
println(hlog, "eye-to-head = ", vrdata.eyepos[a]);
}
get_eyes();
//CreateFrameBuffer( m_nRenderWidth, m_nRenderHeight, leftEyeDesc );
//CreateFrameBuffer( m_nRenderWidth, m_nRenderHeight, rightEyeDesc );
@ -1021,7 +1028,8 @@ EX void gen_mv() {
EX shiftmatrix master_cview;
EX void render() {
track_poses();
track_poses();
get_eyes();
resetbuffer rb;
state = 2;
vrhr::frusta.clear();