Пример #1
0
    private void Initialize(MeshType meshType)
    {
        if (null == _mesh)
        {
            _mesh = new Mesh();
        }

        var ovrpMesh = new OVRPlugin.Mesh();

        if (OVRPlugin.GetMesh((OVRPlugin.MeshType)_meshType, out ovrpMesh))
        {
            var vertices = new Vector3[ovrpMesh.NumVertices];
            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                vertices[i] = ovrpMesh.VertexPositions[i].FromFlippedXVector3f();
            }
            _mesh.vertices = vertices;

            var uv = new Vector2[ovrpMesh.NumVertices];
            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                uv[i] = new Vector2(ovrpMesh.VertexUV0[i].x, -ovrpMesh.VertexUV0[i].y);
            }
            _mesh.uv = uv;

            var triangles = new int[ovrpMesh.NumIndices];
            for (int i = 0; i < ovrpMesh.NumIndices; ++i)
            {
                triangles[i] = ovrpMesh.Indices[ovrpMesh.NumIndices - i - 1];
            }
            _mesh.triangles = triangles;

            var normals = new Vector3[ovrpMesh.NumVertices];
            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                normals[i] = ovrpMesh.VertexNormals[i].FromFlippedXVector3f();
            }
            _mesh.normals = normals;

            var boneWeights = new BoneWeight[ovrpMesh.NumVertices];
            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                var currentBlendWeight  = ovrpMesh.BlendWeights[i];
                var currentBlendIndices = ovrpMesh.BlendIndices[i];

                boneWeights[i].boneIndex0 = (int)currentBlendIndices.x;
                boneWeights[i].weight0    = currentBlendWeight.x;
                boneWeights[i].boneIndex1 = (int)currentBlendIndices.y;
                boneWeights[i].weight1    = currentBlendWeight.y;
                boneWeights[i].boneIndex2 = (int)currentBlendIndices.z;
                boneWeights[i].weight2    = currentBlendWeight.z;
                boneWeights[i].boneIndex3 = (int)currentBlendIndices.w;
                boneWeights[i].weight3    = currentBlendWeight.w;
            }
            _mesh.boneWeights = boneWeights;

            IsInitialized = true;
        }
    }
Пример #2
0
        private IEnumerator InitializeHandMesh()
        {
            bool success = false;

            while (!success)
            {
                var mesh = new OVRPlugin.Mesh();
                OVRPlugin.MeshType meshType = GetHandMeshTypeFromOVRHandType(_hand.HandType);
                if (OVRPlugin.GetMesh(meshType, out mesh))
                {
                    success = InitializeMesh(ref mesh);
                }
                yield return(null);
            }
        }
Пример #3
0
 private static BoneWeight[] GetMeshBoneWeights(ref OVRPlugin.Mesh mesh)
 {
     BoneWeight[] ws = new BoneWeight[mesh.NumVertices];
     for (int i = 0; i < ws.Length; ++i)
     {
         var currentBlendWeight  = mesh.BlendWeights[i];
         var currentBlendIndices = mesh.BlendIndices[i];
         ws[i].boneIndex0 = (int)currentBlendIndices.x;
         ws[i].weight0    = currentBlendWeight.x;
         ws[i].boneIndex1 = (int)currentBlendIndices.y;
         ws[i].weight1    = currentBlendWeight.y;
         ws[i].boneIndex2 = (int)currentBlendIndices.z;
         ws[i].weight2    = currentBlendWeight.z;
         ws[i].boneIndex3 = (int)currentBlendIndices.w;
         ws[i].weight3    = currentBlendWeight.w;
     }
     return(ws);
 }
Пример #4
0
        private bool InitializeMesh(ref OVRPlugin.Mesh mesh)
        {
            // copy vertices
            var vertices = new Vector3[mesh.NumVertices];

            for (int i = 0; i < vertices.Length; ++i)
            {
                vertices[i] = mesh.VertexPositions[i].FromFlippedZVector3f();
            }
            Mesh.vertices = vertices;
            // copy uv
            var uv = new Vector2[mesh.NumVertices];

            for (int i = 0; i < uv.Length; ++i)
            {
                uv[i] = new Vector2(mesh.VertexUV0[i].x, -mesh.VertexUV0[i].y);
            }
            Mesh.uv = uv;
            // copy triangles
            var trianglesLength = mesh.NumIndices;
            var triangles       = new int[trianglesLength];

            for (int i = 0; i < trianglesLength; ++i)
            {
                triangles[i] = mesh.Indices[trianglesLength - i - 1];
            }
            Mesh.triangles = triangles;
            // copy normals
            var normalsLength = mesh.NumVertices;
            var normals       = new Vector3[normalsLength];

            for (int i = 0; i < normalsLength; ++i)
            {
                normals[i] = mesh.VertexNormals[i].FromFlippedZVector3f();
            }
            Mesh.normals = normals;

            Mesh.boneWeights = GetMeshBoneWeights(ref mesh);
            HandSkinedMeshRenderer.sharedMesh          = Mesh;
            HandSkinedMeshRenderer.updateWhenOffscreen = true;
            _isInitialized = true;
            return(true);
        }
 public bool InitializeMesh(OVRPlugin.Mesh mesh)
 {
     return((bool)InitializeMeshMethod.Invoke(HandMesh, new object[] { mesh }));
 }
Пример #6
0
 public MeshData(OVRPlugin.MeshType meshType, OVRPlugin.Mesh mesh)
 {
     MeshType = meshType;
     Mesh     = mesh;
 }
Пример #7
0
        private static Mesh InitializeMesh(OVRPlugin.MeshType meshType, OVRPlugin.Mesh ovrpMesh)
        {
            var mesh = new Mesh();

            //Same routine that initializes OVRMesh (without API call as data is provided)
            //var ovrpMesh = new OVRPlugin.Mesh();
            //if (OVRPlugin.GetMesh(meshType, out ovrpMesh))
            //{
            var vertices = new Vector3[ovrpMesh.NumVertices];

            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                vertices[i] = ovrpMesh.VertexPositions[i].FromFlippedZVector3f();
            }
            mesh.vertices = vertices;

            var uv = new Vector2[ovrpMesh.NumVertices];

            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                uv[i] = new Vector2(ovrpMesh.VertexUV0[i].x, -ovrpMesh.VertexUV0[i].y);
            }
            mesh.uv = uv;

            var triangles = new int[ovrpMesh.NumIndices];

            for (int i = 0; i < ovrpMesh.NumIndices; ++i)
            {
                triangles[i] = ovrpMesh.Indices[ovrpMesh.NumIndices - i - 1];
            }
            mesh.triangles = triangles;

            var normals = new Vector3[ovrpMesh.NumVertices];

            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                normals[i] = ovrpMesh.VertexNormals[i].FromFlippedZVector3f();
            }
            mesh.normals = normals;

            var boneWeights = new BoneWeight[ovrpMesh.NumVertices];

            for (int i = 0; i < ovrpMesh.NumVertices; ++i)
            {
                var currentBlendWeight  = ovrpMesh.BlendWeights[i];
                var currentBlendIndices = ovrpMesh.BlendIndices[i];

                boneWeights[i].boneIndex0 = (int)currentBlendIndices.x;
                boneWeights[i].weight0    = currentBlendWeight.x;
                boneWeights[i].boneIndex1 = (int)currentBlendIndices.y;
                boneWeights[i].weight1    = currentBlendWeight.y;
                boneWeights[i].boneIndex2 = (int)currentBlendIndices.z;
                boneWeights[i].weight2    = currentBlendWeight.z;
                boneWeights[i].boneIndex3 = (int)currentBlendIndices.w;
                boneWeights[i].weight3    = currentBlendWeight.w;
            }
            mesh.boneWeights = boneWeights;
            //}

            return(mesh);
        }