コード例 #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();
    }
コード例 #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();
    }
コード例 #3
0
ファイル: OVRDistortionMesh.cs プロジェクト: KimTaehee/vdesk
    private static extern void OVR_CopyDistortionMesh(DistMeshVert[] leftEye, int[] leftEyeIndicies, 
	                                                  ref DistScaleOffsetUV scaleOffset, bool rightEye, bool flipY);