Example #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;
        }
    }
Example #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);
            }
        }
Example #3
0
    void Start()
    {
        if (uiText != null)
        {
            uiText.supportRichText = false;
        }

        data = new StringBuilder(2048);

        monitors = new List <BoolMonitor>()
        {
            new BoolMonitor("One", () => OVRInput.Get(OVRInput.Button.One)),
        };

        result_skel_LH = OVRPlugin.GetSkeleton(OVRPlugin.SkeletonType.HandLeft, out skel_LH);
        result_skel_RH = OVRPlugin.GetSkeleton(OVRPlugin.SkeletonType.HandRight, out skel_RH);

        result_mesh_LH = OVRPlugin.GetMesh(OVRPlugin.MeshType.HandLeft, out mesh_LH);
        result_mesh_RH = OVRPlugin.GetMesh(OVRPlugin.MeshType.HandRight, out mesh_RH);
    }
Example #4
0
        private IEnumerator InitializeMeshAndSend(OVRPlugin.Hand hand)
        {
            var meshType = GetHandMeshTypeFromOVRHandType(hand);

            if (OVRPlugin.GetMesh(meshType, out var mesh))
            {
                try
                {
                    var meshDataJson = XmlSerialize.Serialize(HandRelatedDataContainer.AsMeshData(
                                                                  new MeshData(meshType, mesh)
                                                                  ));
                    StartCoroutine(SendDataTCP(meshDataJson)); //mesh data is too big for single UDP packet
                }
                catch (Exception e)
                {
                    Debug.LogError($"Unable to send mesh data: {e.ToString()}");
                }
            }
            yield return(new WaitForSeconds(WaitNSecondsBetweenHandDataInitializationIfNotReady));
        }