123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- using UnityEngine;
- using System.Collections;
- public class OffsetCenter : MonoBehaviour {
- /// Offset projection for 2 cameras in VR
- public float offset =0.0f;
- public float max_offset=0.002f;
- public Camera cameraleft;
- public Camera cameraright;
- private float correctionfactor;
- public static OffsetCenter instance;
- public bool autoCorrectOffset=true;
- private bool debugMetrics=false;
-
- private int vpixels;
- private int hpixels;
- private float ydpi;
- private float xdpi;
- private float xmm;
- private float ymm;
- private float mmdist;
- private float correction_factor = 0.0f;
- public void Start(){
- // Screen Metrics
- float dpi = Screen.dpi;
- Debug.Log (dpi);
- if(dpi <=0){
- dpi = 1;
- }
- vpixels=Screen.height;
- hpixels=Screen.width;
- xmm=hpixels/Screen.dpi/0.0393701f;
- ymm=vpixels/Screen.dpi/0.0393701f;
- mmdist = xmm / 2;
- }
-
- public void Update () {
- correction_factor=0.002f*((mmdist-55.0f)/(76.0f-55.0f));
- #if UNITY_EDITOR
- #elif UNITY_ANDROID
- if (autoCorrectOffset) {
- setCorrectionFactor(correction_factor);
- }
- #endif
- }
-
- private void SetVanishingPoint (Camera cam, Vector2 perspectiveOffset) {
- Matrix4x4 m = cam.projectionMatrix;
- float w = 2*cam.nearClipPlane/m.m00;
- float h = 2*cam.nearClipPlane/m.m11;
-
- float left = -w/2 - perspectiveOffset.x;
- float right = left+w;
- float bottom = -h/2 - perspectiveOffset.y;
- float top = bottom+h;
-
- cam.projectionMatrix = PerspectiveOffCenter(left, right, bottom, top, cam.nearClipPlane, cam.farClipPlane);
- }
-
- private static Matrix4x4 PerspectiveOffCenter (float left, float right, float bottom, float top, float near, float far)
- {
- float x = (2.0f * near) / (right - left);
- float y = (2.0f * near) / (top - bottom);
- float a = (right + left) / (right - left);
- float b = (top + bottom) / (top - bottom);
- float c = -(far + near) / (far - near);
- float d = -(2.0f * far * near) / (far - near);
- float e = -1.0f;
-
- Matrix4x4 m = new Matrix4x4();
- m[0,0] = x; m[0,1] = 0.0f; m[0,2] = a; m[0,3] = 0.0f;
- m[1,0] = 0.0f; m[1,1] = y; m[1,2] = b; m[1,3] = 0.0f;
- m[2,0] = 0.0f; m[2,1] = 0.0f; m[2,2] = c; m[2,3] = d;
- m[3,0] = 0.0f; m[3,1] = 0.0f; m[3,2] = e; m[3,3] = 0.0f;
- return m;
- }
- public void setCorrectionFactor(float fac){
- //offset=max_offset*fac;
- offset = fac * 10;
- correctionfactor=fac;
- Debug.Log (offset);
- SetVanishingPoint(cameraleft, new Vector2(offset, 0.0f));
- SetVanishingPoint(cameraright, new Vector2(-offset, 0.0f));
- }
- }
|