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; } }
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); } }
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); }
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 })); }
public MeshData(OVRPlugin.MeshType meshType, OVRPlugin.Mesh mesh) { MeshType = meshType; Mesh = mesh; }
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); }