|
@@ -2651,6 +2651,46 @@ void SetOculusView(int eye)
|
|
|
// Setup viewport and projection/modelview matrices using tracking data
|
|
|
rlViewport(eye*screenWidth/2, 0, screenWidth/2, screenHeight);
|
|
|
|
|
|
+ float hmdIPD = 0.064f;
|
|
|
+ float hmdHScreenSize = 0.14976f;
|
|
|
+ float hmdVScreenSize = 0.0936f;
|
|
|
+ //float hmdVScreenCenter = 0.04675f;
|
|
|
+ float hmdEyeToScreenDistance = 0.041f;
|
|
|
+ float hmdLensSeparationDistance = 0.064f;
|
|
|
+
|
|
|
+ //NOTE: fovy value hardcoded to 60 degrees (Oculus Rift CV1 vertical FOV is 100 degrees)
|
|
|
+ //float halfScreenDistance = hmdVScreenSize/2.0f;
|
|
|
+ //float yfov = 2.0f*atan(halfScreenDistance/hmdEyeToScreenDistance);
|
|
|
+
|
|
|
+ float viewCenter = (float)hmdHScreenSize*0.25f;
|
|
|
+ float eyeProjectionShift = viewCenter - hmdLensSeparationDistance*0.5f;
|
|
|
+ float projectionCenterOffset = 4.0f*eyeProjectionShift/(float)hmdHScreenSize;
|
|
|
+
|
|
|
+
|
|
|
+ // The matrixes for offsetting the projection and view for each eye, to achieve stereo effect
|
|
|
+ Vector3 projectionOffset = { -projectionCenterOffset, 0.0f, 0.0f };
|
|
|
+ Vector3 viewOffset = { -hmdIPD/2.0f, 0.0f, 0.0f };
|
|
|
+
|
|
|
+ // Negate the left eye versions
|
|
|
+ if (eye == 1)
|
|
|
+ {
|
|
|
+ projectionOffset.x *= -1.0f;
|
|
|
+ viewOffset.x *= -1.0f;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Adjust the view and projection matrixes
|
|
|
+ // View matrix is translated based on the eye offset
|
|
|
+ Matrix projCenter = MatrixPerspective(60.0, (double)((float)screenWidth*0.5f)/(double)screenHeight, 0.01, 1000.0);
|
|
|
+
|
|
|
+ Matrix projTranslation = MatrixTranslate(projectionOffset.x, projectionOffset.y, projectionOffset.z);
|
|
|
+ Matrix viewTranslation = MatrixTranslate(viewOffset.x, viewOffset.y, viewOffset.z);
|
|
|
+
|
|
|
+ eyeProjection = MatrixMultiply(projCenter, projTranslation); // projection
|
|
|
+ eyeModelView = MatrixMultiply(modelview, viewTranslation); // modelview
|
|
|
+
|
|
|
+ MatrixTranspose(&eyeProjection);
|
|
|
+
|
|
|
+ /*
|
|
|
// NOTE: fovy value hardcoded to 60 degrees (Oculus Rift CV1 vertical FOV is 100 degrees)
|
|
|
eyeProjection = MatrixPerspective(60.0, (double)(screenWidth/2)/(double)screenHeight, 0.01, 1000.0);
|
|
|
MatrixTranspose(&eyeProjection);
|
|
@@ -2659,6 +2699,7 @@ void SetOculusView(int eye)
|
|
|
Matrix eyeView = MatrixIdentity();
|
|
|
|
|
|
eyeModelView = MatrixMultiply(modelview, eyeView);
|
|
|
+ */
|
|
|
}
|
|
|
|
|
|
SetMatrixModelview(eyeModelView);
|