コード例 #1
0
 // Token: 0x0600057F RID: 1407 RVA: 0x0001B6A4 File Offset: 0x000198A4
 public static global::UnityEngine.Vector3[] GetMappedPoints(this global::UnityEngine.Mesh aMesh, global::UnityEngine.Vector2 aUVPos)
 {
     global::System.Collections.Generic.List <global::UnityEngine.Vector3> list = new global::System.Collections.Generic.List <global::UnityEngine.Vector3>();
     global::UnityEngine.Vector3[] vertices = aMesh.vertices;
     global::UnityEngine.Vector2[] uv       = aMesh.uv;
     int[] triangles = aMesh.triangles;
     for (int i = 0; i < triangles.Length; i += 3)
     {
         int num  = triangles[i];
         int num2 = triangles[i + 1];
         int num3 = triangles[i + 2];
         global::UnityEngine.Vector3 barycentric = global::VRGIN.Helpers.MeshExtension.GetBarycentric(uv[num], uv[num2], uv[num3], aUVPos);
         bool flag = global::VRGIN.Helpers.MeshExtension.InTriangle(barycentric);
         if (flag)
         {
             global::UnityEngine.Vector3 vector = barycentric.x * vertices[num] + barycentric.y * vertices[num2] + barycentric.z * vertices[num3];
             list.Add(vector);
         }
     }
     return(list.ToArray());
 }
コード例 #2
0
    // Token: 0x060000A2 RID: 162 RVA: 0x00007B2C File Offset: 0x00005D2C
    public void BuildMesh()
    {
        global::Valve.VR.HmdQuad_t hmdQuad_t = default(global::Valve.VR.HmdQuad_t);
        bool flag = !global::SteamVR_PlayArea.GetBounds(this.size, ref hmdQuad_t);

        if (!flag)
        {
            global::Valve.VR.HmdVector3_t[] array = new global::Valve.VR.HmdVector3_t[]
            {
                hmdQuad_t.vCorners0,
                hmdQuad_t.vCorners1,
                hmdQuad_t.vCorners2,
                hmdQuad_t.vCorners3
            };
            this.vertices = new global::UnityEngine.Vector3[array.Length * 2];
            for (int i = 0; i < array.Length; i++)
            {
                global::Valve.VR.HmdVector3_t hmdVector3_t = array[i];
                this.vertices[i] = new global::UnityEngine.Vector3(hmdVector3_t.v0, 0.01f, hmdVector3_t.v2);
            }
            bool flag2 = this.borderThickness == 0f;
            if (flag2)
            {
                base.GetComponent <global::UnityEngine.MeshFilter>().mesh = null;
            }
            else
            {
                for (int j = 0; j < array.Length; j++)
                {
                    int num  = (j + 1) % array.Length;
                    int num2 = (j + array.Length - 1) % array.Length;
                    global::UnityEngine.Vector3 normalized  = (this.vertices[num] - this.vertices[j]).normalized;
                    global::UnityEngine.Vector3 normalized2 = (this.vertices[num2] - this.vertices[j]).normalized;
                    global::UnityEngine.Vector3 vector      = this.vertices[j];
                    vector += global::UnityEngine.Vector3.Cross(normalized, global::UnityEngine.Vector3.up) * this.borderThickness;
                    vector += global::UnityEngine.Vector3.Cross(normalized2, global::UnityEngine.Vector3.down) * this.borderThickness;
                    this.vertices[array.Length + j] = vector;
                }
                int[] triangles = new int[]
                {
                    0,
                    1,
                    4,
                    1,
                    5,
                    4,
                    1,
                    2,
                    5,
                    2,
                    6,
                    5,
                    2,
                    3,
                    6,
                    3,
                    7,
                    6,
                    3,
                    0,
                    7,
                    0,
                    4,
                    7
                };
                global::UnityEngine.Vector2[] uv = new global::UnityEngine.Vector2[]
                {
                    new global::UnityEngine.Vector2(0f, 0f),
                    new global::UnityEngine.Vector2(1f, 0f),
                    new global::UnityEngine.Vector2(0f, 0f),
                    new global::UnityEngine.Vector2(1f, 0f),
                    new global::UnityEngine.Vector2(0f, 1f),
                    new global::UnityEngine.Vector2(1f, 1f),
                    new global::UnityEngine.Vector2(0f, 1f),
                    new global::UnityEngine.Vector2(1f, 1f)
                };
                global::UnityEngine.Color[] colors = new global::UnityEngine.Color[]
                {
                    this.color,
                    this.color,
                    this.color,
                    this.color,
                    new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f),
                    new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f),
                    new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f),
                    new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f)
                };
                global::UnityEngine.Mesh mesh = new global::UnityEngine.Mesh();
                base.GetComponent <global::UnityEngine.MeshFilter>().mesh = mesh;
                mesh.vertices  = this.vertices;
                mesh.uv        = uv;
                mesh.colors    = colors;
                mesh.triangles = triangles;
                global::UnityEngine.MeshRenderer component = base.GetComponent <global::UnityEngine.MeshRenderer>();
                component.material             = global::UnityEngine.Resources.GetBuiltinResource <global::UnityEngine.Material>("Sprites-Default.mat");
                component.reflectionProbeUsage = 0;
                component.shadowCastingMode    = 0;
                component.receiveShadows       = false;
                component.useLightProbes       = false;
            }
        }
    }
コード例 #3
0
    // Token: 0x06000102 RID: 258 RVA: 0x0000AC3C File Offset: 0x00008E3C
    public static global::UnityEngine.Mesh CreateHiddenAreaMesh(global::Valve.VR.HiddenAreaMesh_t src, global::Valve.VR.VRTextureBounds_t bounds)
    {
        bool flag = src.unTriangleCount == 0U;

        global::UnityEngine.Mesh result;
        if (flag)
        {
            result = null;
        }
        else
        {
            float[] array = new float[src.unTriangleCount * 3U * 2U];
            global::System.Runtime.InteropServices.Marshal.Copy(src.pVertexData, array, 0, array.Length);
            global::UnityEngine.Vector3[] array2 = new global::UnityEngine.Vector3[src.unTriangleCount * 3U + 12U];
            int[] array3 = new int[src.unTriangleCount * 3U + 24U];
            float num    = 2f * bounds.uMin - 1f;
            float num2   = 2f * bounds.uMax - 1f;
            float num3   = 2f * bounds.vMin - 1f;
            float num4   = 2f * bounds.vMax - 1f;
            int   num5   = 0;
            int   num6   = 0;
            while ((long)num5 < (long)((ulong)(src.unTriangleCount * 3U)))
            {
                float num7 = global::SteamVR_Utils.Lerp(num, num2, array[num6++]);
                float num8 = global::SteamVR_Utils.Lerp(num3, num4, array[num6++]);
                array2[num5] = new global::UnityEngine.Vector3(num7, num8, 0f);
                array3[num5] = num5;
                num5++;
            }
            int num9  = (int)(src.unTriangleCount * 3U);
            int num10 = num9;
            array2[num10++] = new global::UnityEngine.Vector3(-1f, -1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num, -1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(-1f, 1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num, 1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num2, -1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(1f, -1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num2, 1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(1f, 1f, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num, num3, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num2, num3, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num, num4, 0f);
            array2[num10++] = new global::UnityEngine.Vector3(num2, num4, 0f);
            int num11 = num9;
            array3[num11++] = num9;
            array3[num11++] = num9 + 1;
            array3[num11++] = num9 + 2;
            array3[num11++] = num9 + 2;
            array3[num11++] = num9 + 1;
            array3[num11++] = num9 + 3;
            array3[num11++] = num9 + 4;
            array3[num11++] = num9 + 5;
            array3[num11++] = num9 + 6;
            array3[num11++] = num9 + 6;
            array3[num11++] = num9 + 5;
            array3[num11++] = num9 + 7;
            array3[num11++] = num9 + 1;
            array3[num11++] = num9 + 4;
            array3[num11++] = num9 + 8;
            array3[num11++] = num9 + 8;
            array3[num11++] = num9 + 4;
            array3[num11++] = num9 + 9;
            array3[num11++] = num9 + 10;
            array3[num11++] = num9 + 11;
            array3[num11++] = num9 + 3;
            array3[num11++] = num9 + 3;
            array3[num11++] = num9 + 11;
            array3[num11++] = num9 + 6;
            result          = new global::UnityEngine.Mesh
            {
                vertices  = array2,
                triangles = array3,
                bounds    = new global::UnityEngine.Bounds(global::UnityEngine.Vector3.zero, new global::UnityEngine.Vector3(float.MaxValue, float.MaxValue, float.MaxValue))
            };
        }
        return(result);
    }
コード例 #4
0
    // Token: 0x06000075 RID: 117 RVA: 0x00005330 File Offset: 0x00003530
    public void UpdateModel()
    {
        this.fovLeft   = global::UnityEngine.Mathf.Clamp(this.fovLeft, 1f, 89f);
        this.fovRight  = global::UnityEngine.Mathf.Clamp(this.fovRight, 1f, 89f);
        this.fovTop    = global::UnityEngine.Mathf.Clamp(this.fovTop, 1f, 89f);
        this.fovBottom = global::UnityEngine.Mathf.Clamp(this.fovBottom, 1f, 89f);
        this.farZ      = global::UnityEngine.Mathf.Max(this.farZ, this.nearZ + 0.01f);
        this.nearZ     = global::UnityEngine.Mathf.Clamp(this.nearZ, 0.01f, this.farZ - 0.01f);
        float num  = global::UnityEngine.Mathf.Sin(-this.fovLeft * 0.0174532924f);
        float num2 = global::UnityEngine.Mathf.Sin(this.fovRight * 0.0174532924f);
        float num3 = global::UnityEngine.Mathf.Sin(this.fovTop * 0.0174532924f);
        float num4 = global::UnityEngine.Mathf.Sin(-this.fovBottom * 0.0174532924f);
        float num5 = global::UnityEngine.Mathf.Cos(-this.fovLeft * 0.0174532924f);
        float num6 = global::UnityEngine.Mathf.Cos(this.fovRight * 0.0174532924f);
        float num7 = global::UnityEngine.Mathf.Cos(this.fovTop * 0.0174532924f);
        float num8 = global::UnityEngine.Mathf.Cos(-this.fovBottom * 0.0174532924f);

        global::UnityEngine.Vector3[] array = new global::UnityEngine.Vector3[]
        {
            new global::UnityEngine.Vector3(num * this.nearZ / num5, num3 * this.nearZ / num7, this.nearZ),
            new global::UnityEngine.Vector3(num2 * this.nearZ / num6, num3 * this.nearZ / num7, this.nearZ),
            new global::UnityEngine.Vector3(num2 * this.nearZ / num6, num4 * this.nearZ / num8, this.nearZ),
            new global::UnityEngine.Vector3(num * this.nearZ / num5, num4 * this.nearZ / num8, this.nearZ),
            new global::UnityEngine.Vector3(num * this.farZ / num5, num3 * this.farZ / num7, this.farZ),
            new global::UnityEngine.Vector3(num2 * this.farZ / num6, num3 * this.farZ / num7, this.farZ),
            new global::UnityEngine.Vector3(num2 * this.farZ / num6, num4 * this.farZ / num8, this.farZ),
            new global::UnityEngine.Vector3(num * this.farZ / num5, num4 * this.farZ / num8, this.farZ)
        };
        int[] array2 = new int[]
        {
            0,
            4,
            7,
            0,
            7,
            3,
            0,
            7,
            4,
            0,
            3,
            7,
            1,
            5,
            6,
            1,
            6,
            2,
            1,
            6,
            5,
            1,
            2,
            6,
            0,
            4,
            5,
            0,
            5,
            1,
            0,
            5,
            4,
            0,
            1,
            5,
            2,
            3,
            7,
            2,
            7,
            6,
            2,
            7,
            3,
            2,
            6,
            7
        };
        int num9 = 0;

        global::UnityEngine.Vector3[] array3 = new global::UnityEngine.Vector3[array2.Length];
        global::UnityEngine.Vector3[] array4 = new global::UnityEngine.Vector3[array2.Length];
        for (int i = 0; i < array2.Length / 3; i++)
        {
            global::UnityEngine.Vector3 vector     = array[array2[i * 3]];
            global::UnityEngine.Vector3 vector2    = array[array2[i * 3 + 1]];
            global::UnityEngine.Vector3 vector3    = array[array2[i * 3 + 2]];
            global::UnityEngine.Vector3 normalized = global::UnityEngine.Vector3.Cross(vector2 - vector, vector3 - vector).normalized;
            array4[i * 3]     = normalized;
            array4[i * 3 + 1] = normalized;
            array4[i * 3 + 2] = normalized;
            array3[i * 3]     = vector;
            array3[i * 3 + 1] = vector2;
            array3[i * 3 + 2] = vector3;
            array2[i * 3]     = num9++;
            array2[i * 3 + 1] = num9++;
            array2[i * 3 + 2] = num9++;
        }
        global::UnityEngine.Mesh mesh = new global::UnityEngine.Mesh();
        mesh.vertices  = array3;
        mesh.normals   = array4;
        mesh.triangles = array2;
        base.GetComponent <global::UnityEngine.MeshFilter>().mesh = mesh;
    }
コード例 #5
0
 // Token: 0x06000672 RID: 1650 RVA: 0x0001F681 File Offset: 0x0001D881
 public RenderModel(global::UnityEngine.Mesh mesh, global::UnityEngine.Material material)
 {
     this.mesh     = mesh;
     this.material = material;
 }
コード例 #6
0
    // Token: 0x060000C9 RID: 201 RVA: 0x00008D80 File Offset: 0x00006F80
    private global::SteamVR_RenderModel.RenderModel LoadRenderModel(global::Valve.VR.CVRRenderModels renderModels, string renderModelName, string baseName)
    {
        global::System.IntPtr zero = global::System.IntPtr.Zero;
        global::Valve.VR.EVRRenderModelError evrrenderModelError;
        for (;;)
        {
            evrrenderModelError = renderModels.LoadRenderModel_Async(renderModelName, ref zero);
            bool flag = evrrenderModelError != global::Valve.VR.EVRRenderModelError.Loading;
            if (flag)
            {
                break;
            }
            global::System.Threading.Thread.Sleep(1);
        }
        bool flag2 = evrrenderModelError > global::Valve.VR.EVRRenderModelError.None;

        global::SteamVR_RenderModel.RenderModel result;
        if (flag2)
        {
            global::UnityEngine.Debug.LogError(string.Format("Failed to load render model {0} - {1}", renderModelName, evrrenderModelError.ToString()));
            result = null;
        }
        else
        {
            global::Valve.VR.RenderModel_t renderModel_t  = (global::Valve.VR.RenderModel_t)global::System.Runtime.InteropServices.Marshal.PtrToStructure(zero, typeof(global::Valve.VR.RenderModel_t));
            global::UnityEngine.Vector3[]  array          = new global::UnityEngine.Vector3[renderModel_t.unVertexCount];
            global::UnityEngine.Vector3[]  array2         = new global::UnityEngine.Vector3[renderModel_t.unVertexCount];
            global::UnityEngine.Vector2[]  array3         = new global::UnityEngine.Vector2[renderModel_t.unVertexCount];
            global::System.Type            typeFromHandle = typeof(global::Valve.VR.RenderModel_Vertex_t);
            int num = 0;
            while ((long)num < (long)((ulong)renderModel_t.unVertexCount))
            {
                global::System.IntPtr intPtr;
                intPtr..ctor(renderModel_t.rVertexData.ToInt64() + (long)(num * global::System.Runtime.InteropServices.Marshal.SizeOf(typeFromHandle)));
                global::Valve.VR.RenderModel_Vertex_t renderModel_Vertex_t = (global::Valve.VR.RenderModel_Vertex_t)global::System.Runtime.InteropServices.Marshal.PtrToStructure(intPtr, typeFromHandle);
                array[num]  = new global::UnityEngine.Vector3(renderModel_Vertex_t.vPosition.v0, renderModel_Vertex_t.vPosition.v1, -renderModel_Vertex_t.vPosition.v2);
                array2[num] = new global::UnityEngine.Vector3(renderModel_Vertex_t.vNormal.v0, renderModel_Vertex_t.vNormal.v1, -renderModel_Vertex_t.vNormal.v2);
                array3[num] = new global::UnityEngine.Vector2(renderModel_Vertex_t.rfTextureCoord0, renderModel_Vertex_t.rfTextureCoord1);
                num++;
            }
            int     num2   = (int)(renderModel_t.unTriangleCount * 3U);
            short[] array4 = new short[num2];
            global::System.Runtime.InteropServices.Marshal.Copy(renderModel_t.rIndexData, array4, 0, array4.Length);
            int[] array5 = new int[num2];
            int   num3   = 0;
            while ((long)num3 < (long)((ulong)renderModel_t.unTriangleCount))
            {
                array5[num3 * 3]     = (int)array4[num3 * 3 + 2];
                array5[num3 * 3 + 1] = (int)array4[num3 * 3 + 1];
                array5[num3 * 3 + 2] = (int)array4[num3 * 3];
                num3++;
            }
            global::UnityEngine.Mesh mesh = new global::UnityEngine.Mesh();
            mesh.vertices  = array;
            mesh.normals   = array2;
            mesh.uv        = array3;
            mesh.triangles = array5;
            mesh.Optimize();
            global::UnityEngine.Material material = global::SteamVR_RenderModel.materials[renderModel_t.diffuseTextureId] as global::UnityEngine.Material;
            bool flag3 = material == null || material.mainTexture == null;
            if (flag3)
            {
                global::System.IntPtr zero2 = global::System.IntPtr.Zero;
                for (;;)
                {
                    evrrenderModelError = renderModels.LoadTexture_Async(renderModel_t.diffuseTextureId, ref zero2);
                    bool flag4 = evrrenderModelError != global::Valve.VR.EVRRenderModelError.Loading;
                    if (flag4)
                    {
                        break;
                    }
                    global::System.Threading.Thread.Sleep(1);
                }
                bool flag5 = evrrenderModelError == global::Valve.VR.EVRRenderModelError.None;
                if (flag5)
                {
                    global::Valve.VR.RenderModel_TextureMap_t renderModel_TextureMap_t = (global::Valve.VR.RenderModel_TextureMap_t)global::System.Runtime.InteropServices.Marshal.PtrToStructure(zero2, typeof(global::Valve.VR.RenderModel_TextureMap_t));
                    global::UnityEngine.Texture2D             texture2D = new global::UnityEngine.Texture2D((int)renderModel_TextureMap_t.unWidth, (int)renderModel_TextureMap_t.unHeight, 5, false);
                    bool flag6 = global::UnityEngine.SystemInfo.graphicsDeviceVersion.StartsWith("OpenGL");
                    if (flag6)
                    {
                        byte[] array6 = new byte[(int)(renderModel_TextureMap_t.unWidth * renderModel_TextureMap_t.unHeight * '\u0004')];
                        global::System.Runtime.InteropServices.Marshal.Copy(renderModel_TextureMap_t.rubTextureMapData, array6, 0, array6.Length);
                        global::UnityEngine.Color32[] array7 = new global::UnityEngine.Color32[(int)(renderModel_TextureMap_t.unWidth * renderModel_TextureMap_t.unHeight)];
                        int num4 = 0;
                        for (int i = 0; i < (int)renderModel_TextureMap_t.unHeight; i++)
                        {
                            for (int j = 0; j < (int)renderModel_TextureMap_t.unWidth; j++)
                            {
                                byte b  = array6[num4++];
                                byte b2 = array6[num4++];
                                byte b3 = array6[num4++];
                                byte b4 = array6[num4++];
                                array7[i * (int)renderModel_TextureMap_t.unWidth + j] = new global::UnityEngine.Color32(b, b2, b3, b4);
                            }
                        }
                        texture2D.SetPixels32(array7);
                        texture2D.Apply();
                    }
                    else
                    {
                        texture2D.Apply();
                        for (;;)
                        {
                            evrrenderModelError = renderModels.LoadIntoTextureD3D11_Async(renderModel_t.diffuseTextureId, texture2D.GetNativeTexturePtr());
                            bool flag7 = evrrenderModelError != global::Valve.VR.EVRRenderModelError.Loading;
                            if (flag7)
                            {
                                break;
                            }
                            global::System.Threading.Thread.Sleep(1);
                        }
                    }
                    material             = new global::UnityEngine.Material((this.shader != null) ? this.shader : global::EscalationVR.UnityHelper.GetShader("Standard"));
                    material.mainTexture = texture2D;
                    global::SteamVR_RenderModel.materials[renderModel_t.diffuseTextureId] = material;
                    renderModels.FreeTexture(zero2);
                }
                else
                {
                    global::UnityEngine.Debug.Log("Failed to load render model texture for render model " + renderModelName);
                }
            }
            base.StartCoroutine(this.FreeRenderModel(zero));
            result = new global::SteamVR_RenderModel.RenderModel(mesh, material);
        }
        return(result);
    }