Exemplo n.º 1
0
    /// <summary>
    /// Generates the mesh.
    /// This should only be done when fov changes.
    /// </summary>
    /// <param name="lc">Lc.</param>
    /// <param name="rightEye">If set to <c>true</c> right eye.</param>
    /// <param name="flipY">If set to <c>true</c> flip y.</param>
    public void GenerateMesh(ref OVRLensCorrection lc, bool rightEye, bool flipY)
    {
        int numVerts = 0; int numIndicies = 0;

        // Generate OVR mesh for given eye
        OVR_GenerateDistortionMesh(ref numVerts, ref numIndicies, rightEye);
        // create space to copy mesh into
        DistMeshVert[] meshVerts = new DistMeshVert[numVerts];
        triIndices = new int[numIndicies];
        DistScaleOffsetUV scaleOffset = new DistScaleOffsetUV();

        // Copy mesh into above data
        OVR_CopyDistortionMesh(meshVerts, triIndices, ref scaleOffset, rightEye, flipY);
        // Set material scale and offset values
        lc._DMScale.x  = scaleOffset.Scale_x;
        lc._DMScale.y  = scaleOffset.Scale_y;
        lc._DMOffset.x = scaleOffset.Offset_x;
        lc._DMOffset.y = scaleOffset.Offset_y;
        // Copy local mesh into proper Unity mesh structure
        mesh      = new Mesh();
        positions = new Vector3[numVerts];
        uvR       = new Vector2[numVerts];
        uvG       = new Vector2[numVerts];
        uvB       = new Vector3[numVerts];

        for (int i = 0; i < numVerts; i++)
        {
            positions[i].x = meshVerts[i].ScreenPosNDC_x;
            positions[i].y = meshVerts[i].ScreenPosNDC_y;
            positions[i].z = meshVerts[i].Shade;                        // overload for shading on edges
            uvR[i].x       = meshVerts[i].TanEyeAnglesR_u;
            uvR[i].y       = meshVerts[i].TanEyeAnglesR_v;
            uvG[i].x       = meshVerts[i].TanEyeAnglesG_u;
            uvG[i].y       = meshVerts[i].TanEyeAnglesG_v;
            uvB[i].x       = meshVerts[i].TanEyeAnglesB_u;
            uvB[i].y       = meshVerts[i].TanEyeAnglesB_v;
        }

        mesh.vertices  = positions;
        mesh.uv        = uvR;
        mesh.uv1       = uvG;
        mesh.normals   = uvB;
        mesh.triangles = triIndices;

        // Destory internal distorion meshes
        OVR_DestroyDistortionMesh();
    }
Exemplo n.º 2
0
    /// <summary>
    /// Generates the mesh.
    /// This should only be done when fov changes.
    /// </summary>
    /// <param name="lc">Lc.</param>
    /// <param name="rightEye">If set to <c>true</c> right eye.</param>
    /// <param name="flipY">If set to <c>true</c> flip y.</param>
    public void GenerateMesh(ref OVRLensCorrection lc, bool rightEye, bool flipY)
    {
        int numVerts = 0; int numIndicies = 0;
        // Generate OVR mesh for given eye
        OVR_GenerateDistortionMesh(ref numVerts, ref numIndicies, rightEye);
        // create space to copy mesh into
        DistMeshVert[] meshVerts  = new DistMeshVert[numVerts];
        triIndices = new int[numIndicies];
        DistScaleOffsetUV scaleOffset = new DistScaleOffsetUV();
        // Copy mesh into above data
        OVR_CopyDistortionMesh(meshVerts, triIndices, ref scaleOffset, rightEye, flipY);
        // Set material scale and offset values
        lc._DMScale.x  = scaleOffset.Scale_x;
        lc._DMScale.y  = scaleOffset.Scale_y;
        lc._DMOffset.x = scaleOffset.Offset_x;
        lc._DMOffset.y = scaleOffset.Offset_y;
        // Copy local mesh into proper Unity mesh structure
        mesh 		= new Mesh();
        positions 	= new Vector3[numVerts];
        uvR 		= new Vector2[numVerts];
        uvG 		= new Vector2[numVerts];
        uvB 		= new Vector3[numVerts];

        for(int i = 0; i < numVerts; i++)
        {
            positions[i].x = meshVerts[i].ScreenPosNDC_x;
            positions[i].y = meshVerts[i].ScreenPosNDC_y;
            positions[i].z = meshVerts[i].Shade; 		// overload for shading on edges
            uvR[i].x       = meshVerts[i].TanEyeAnglesR_u;
            uvR[i].y       = meshVerts[i].TanEyeAnglesR_v;
            uvG[i].x       = meshVerts[i].TanEyeAnglesG_u;
            uvG[i].y       = meshVerts[i].TanEyeAnglesG_v;
            uvB[i].x       = meshVerts[i].TanEyeAnglesB_u;
            uvB[i].y       = meshVerts[i].TanEyeAnglesB_v;
        }

        mesh.vertices  = positions;
        mesh.uv        = uvR;
        mesh.uv2       = uvG;
        mesh.normals   = uvB;
        mesh.triangles = triIndices;

        // Destory internal distorion meshes
        OVR_DestroyDistortionMesh();
    }
Exemplo n.º 3
0
 private static extern void OVR_CopyDistortionMesh(DistMeshVert[] leftEye, int[] leftEyeIndicies,
                                                   ref DistScaleOffsetUV scaleOffset, bool rightEye, bool flipY);
Exemplo n.º 4
0
    /// <summary>
    /// Generates the mesh.
    /// This should only be done when fov changes.
    /// </summary>
    /// <param name="lc">Lc.</param>
    /// <param name="rightEye">If set to <c>true</c> right eye.</param>
    /// <param name="flipY">If set to <c>true</c> flip y.</param>
    public void GenerateMesh(ref OVRLensCorrection lc, bool rightEye, bool flipY, bool useCameraTexture)
    {
        // We only need to create the mesh once and re-use components when camera
        // is dirty
        bool create = true;

        if (!mesh)
        {
            mesh = new Mesh();
            mesh.MarkDynamic();
        }
        else
        {
            create = false;
        }

        int numVerts = 0; int numIndicies = 0;

        // Generate OVR mesh for given eye
        OVR_GenerateDistortionMesh(ref numVerts, ref numIndicies, rightEye);

        // create space to copy mesh into
        if (create)
        {
            meshVerts   = new DistMeshVert[numVerts];
            triIndices  = new int[numIndicies];
            scaleOffset = new DistScaleOffsetUV();
        }
        // Copy mesh into above data

        OVR_CopyDistortionMesh(meshVerts, triIndices, ref scaleOffset, rightEye, flipY);
        // Set material scale and offset values
        lc._DMScale.x = (useCameraTexture) ? scaleOffset.Scale_x : 0.5f * scaleOffset.Scale_x;

        lc._DMScale.y  = scaleOffset.Scale_y;
        lc._DMOffset.x = (useCameraTexture) ? scaleOffset.Offset_x : scaleOffset.Offset_x + ((rightEye) ? 0.25f : -0.25f);
        lc._DMOffset.y = scaleOffset.Offset_y;

        // Copy local mesh into proper Unity mesh structure
        if (create)
        {
            positions = new Vector3[numVerts];
            uvR       = new Vector2[numVerts];
            uvG       = new Vector2[numVerts];
            uvB       = new Vector3[numVerts];
        }

        for (int i = 0; i < numVerts; i++)
        {
            positions[i].x = meshVerts[i].ScreenPosNDC_x;
            positions[i].y = meshVerts[i].ScreenPosNDC_y;
            positions[i].z = meshVerts[i].Shade;                        // overload for shading on edges
            uvR[i].x       = meshVerts[i].TanEyeAnglesR_u;
            uvR[i].y       = meshVerts[i].TanEyeAnglesR_v;
            uvG[i].x       = meshVerts[i].TanEyeAnglesG_u;
            uvG[i].y       = meshVerts[i].TanEyeAnglesG_v;
            uvB[i].x       = meshVerts[i].TanEyeAnglesB_u;
            uvB[i].y       = meshVerts[i].TanEyeAnglesB_v;
            uvB[i].z       = meshVerts[i].TimewarpLerp;             // overload for timewarp lerp
        }

        mesh.vertices  = positions;
        mesh.uv        = uvR;
        mesh.uv1       = uvG;
        mesh.normals   = uvB;
        mesh.triangles = triIndices;

        // Destory internal distorion meshes
        OVR_DestroyDistortionMesh();
    }
Exemplo n.º 5
0
    /// <summary>
    /// Generates the mesh.
    /// This should only be done when fov changes.
    /// </summary>
    /// <param name="lc">Lc.</param>
    /// <param name="rightEye">If set to <c>true</c> right eye.</param>
    /// <param name="flipY">If set to <c>true</c> flip y.</param>
    public void GenerateMesh(ref OVRLensCorrection lc, bool rightEye, bool flipY)
    {
        // We only need to create the mesh once and re-use components when camera
        // is dirty
        bool create = true;
        if (!mesh)
        {
            mesh = new Mesh ();
            mesh.MarkDynamic();
        }
        else
            create = false;

        int numVerts = 0; int numIndicies = 0;
        // Generate OVR mesh for given eye
        OVR_GenerateDistortionMesh(ref numVerts, ref numIndicies, rightEye);

        // create space to copy mesh into
        if (create)
        {
            meshVerts = new DistMeshVert[numVerts];
            triIndices = new int[numIndicies];
            scaleOffset = new DistScaleOffsetUV ();
        }
        // Copy mesh into above data

        bool needsFlip = (SystemInfo.graphicsDeviceVersion.Contains ("GL")) ? flipY : !flipY;

        OVR_CopyDistortionMesh(meshVerts, triIndices, ref scaleOffset, rightEye, needsFlip);
        // Set material scale and offset values
        lc._DMScale.x  = 0.5f * scaleOffset.Scale_x;
        lc._DMScale.y  = scaleOffset.Scale_y;
        lc._DMOffset.x = scaleOffset.Offset_x + ((rightEye) ? 0.25f : -0.25f);
        lc._DMOffset.y = scaleOffset.Offset_y;

        // Copy local mesh into proper Unity mesh structure
        if (create)
        {
            positions = new Vector3[numVerts];
            uvR = new Vector2[numVerts];
            uvG = new Vector2[numVerts];
            uvB = new Vector3[numVerts];
        }

        for(int i = 0; i < numVerts; i++)
        {
            positions[i].x = meshVerts[i].ScreenPosNDC_x;
            positions[i].y = meshVerts[i].ScreenPosNDC_y;
            positions[i].z = meshVerts[i].Shade; 		// overload for shading on edges
            uvR[i].x       = meshVerts[i].TanEyeAnglesR_u;
            uvR[i].y       = meshVerts[i].TanEyeAnglesR_v;
            uvG[i].x       = meshVerts[i].TanEyeAnglesG_u;
            uvG[i].y       = meshVerts[i].TanEyeAnglesG_v;
            uvB[i].x       = meshVerts[i].TanEyeAnglesB_u;
            uvB[i].y       = meshVerts[i].TanEyeAnglesB_v;
        }

        mesh.vertices  = positions;
        mesh.uv        = uvR;
        mesh.uv1       = uvG;
        mesh.normals   = uvB;
        mesh.triangles = triIndices;

        // Destory internal distorion meshes
        OVR_DestroyDistortionMesh();
    }
Exemplo n.º 6
0
    private static extern void OVR_CopyDistortionMesh(DistMeshVert[] leftEye, int[] leftEyeIndicies, 
	                                                  ref DistScaleOffsetUV scaleOffset, bool rightEye, bool flipY);