Exemplo n.º 1
0
    // Use this for initialization
    public void SetFishEyeUV(FishEyeMethod fishEyeMethod)
    {
        this.fishEyeMethod = fishEyeMethod;

        Vector3[] vertices = GetComponent <MeshFilter>().mesh.vertices;

        Vector2[] newUV = new Vector2[vertices.Length];

        for (int i = 0; i < vertices.Length; i++)
        {
            Vector2 direc = vertices[i];

            direc = direc.normalized;

            Vector3 p = vertices[i];

            float theta = Mathf.Atan(Mathf.Sqrt(p.x * p.x + p.y * p.y) / p.z);

            float phi = Mathf.Atan(p.y / p.x);

            if (float.IsNaN(theta))
            {
                theta = 0.0f;
            }

            if (float.IsNaN(phi))
            {
                phi = 0.0f;
            }

            if (fishEyeMethod == FishEyeMethod.EquiDistance)
            {
                newUV[i] = uvCenter - 0.5f * direc * theta / (0.5f * Mathf.PI);
            }
            else if (fishEyeMethod == FishEyeMethod.EquiAngle)
            {
                newUV[i] = uvCenter - 0.5f * direc * Mathf.Sin(theta * 0.5f) * (Mathf.Sqrt(2.0f));
            }
            else if (fishEyeMethod == FishEyeMethod.Stereo)
            {
                newUV[i] = uvCenter - 0.5f * direc * Mathf.Tan(theta * 0.5f);
            }
            else if (fishEyeMethod == FishEyeMethod.Ortho)
            {
                newUV[i] = uvCenter - 0.5f * direc * Mathf.Sin(theta);
            }
        }

        GetComponent <MeshFilter>().mesh.uv = newUV;
    }
    // Use this for initialization
    public void SetFishEyeUV(FishEyeMethod fishEyeMethod)
    {
        this.fishEyeMethod = fishEyeMethod;

        Vector3[] vertices = GetComponent<MeshFilter>().mesh.vertices;

        Vector2[] newUV = new Vector2[vertices.Length];

        for (int i = 0; i < vertices.Length; i++)
        {
            Vector2 direc = vertices[i];

            direc = direc.normalized;

            Vector3 p = vertices[i];

            float theta = Mathf.Atan(Mathf.Sqrt(p.x * p.x + p.y * p.y) / p.z);

            float phi = Mathf.Atan(p.y / p.x);

            if (float.IsNaN(theta)) theta = 0.0f;

            if (float.IsNaN(phi)) phi = 0.0f;

            if (fishEyeMethod == FishEyeMethod.EquiDistance)
                newUV[i] = uvCenter - 0.5f * direc * theta / (0.5f * Mathf.PI);
            else if (fishEyeMethod == FishEyeMethod.EquiAngle)
                newUV[i] = uvCenter - 0.5f * direc * Mathf.Sin(theta * 0.5f) * (Mathf.Sqrt(2.0f));
            else if(fishEyeMethod == FishEyeMethod.Stereo)
                newUV[i] = uvCenter - 0.5f * direc * Mathf.Tan(theta * 0.5f) ;
            else if (fishEyeMethod == FishEyeMethod.Ortho)
                newUV[i] = uvCenter - 0.5f * direc * Mathf.Sin(theta);
        }

        GetComponent<MeshFilter>().mesh.uv = newUV;
    }