//public void RenderHand(TangoPointCloud pointCloud) //{ // List<int> indices = new List<int>(); // List<points> closePoints = new List<points>(); // int idx = 0; // for (int i=0; i<pointCloud.m_pointsCount; i++) // { // if (Vector3.Distance(pointCloud.m_points[i], camera.transform.position) > 0.7f) // continue; // points newPoint = new points(pointCloud.m_points[i] , 0); // closePoints.Add(newPoint); // indices.Add(idx); // idx++; // } // int currId = 1; // int numPoints = cluster(closePoints, closePoints[0], 0, currId); // Debug.Log(numPoints); // List<Vector3> temp = new List<Vector3>(); // indices.Clear(); // idx = 0; // foreach (points point in closePoints) // { // //renderer.material.SetColor("_Color", Color.red); // if (point.classId == 1) // { // temp.Add(point.position); // indices.Add(idx); // idx++; // } // } // mesh.Clear(); // mesh.vertices = temp.ToArray(); // mesh.SetIndices(indices.ToArray(), MeshTopology.Points, 0); //} public void RenderHand(TangoPointCloud pointCloud) { if (firstTime) { firstTime = false; //StartCoroutine(SpawnBlock()); } List <int> closePoints = new List <int>(); List <Vector3> closePointPos = new List <Vector3>(); List <int> indices = new List <int>(); int idx = 0; for (int i = 0; i < pointCloud.m_pointsCount; i++) { if (Vector3.Distance(pointCloud.m_points [i], camera.transform.position) > 1f) { continue; } closePoints.Add(i); indices.Add(idx); idx++; closePointPos.Add(pointCloud.m_points [i]); } numPoints = idx; mesh.Clear(); if (numPoints < HAND_POINT_THRESH) { isHandVisible = false; handObject.SetActive(false); return; } else { isHandVisible = true; handObject.SetActive(true); } Vector3 centroid = pointCloud.GetAverageFromFilteredPoints(closePoints); //mesh.vertices = closePointPos.ToArray(); //mesh.SetIndices(indices.ToArray(), MeshTopology.Points, 0); if (handQueue.Count > 3) { handQueue.Dequeue(); } handQueue.Enqueue(centroid); Vector3 acc = new Vector3(0, 0, 0); Vector3[] handArray = handQueue.ToArray(); for (int i = 0; i < handQueue.Count; i++) { acc += handArray [i]; } acc /= handQueue.Count; initialHandObjPos = finalHandObjPos; Vector3 snappedPos = VoxelExtractionPointCloud.Instance.FromGrid(VoxelExtractionPointCloud.Instance.ToGrid(acc)); //for (int i = 0; i < VoxelConsts.PT_THRES; i++ ) // VoxelExtractionPointCloud.Instance.grid.setVoxel(VoxelExtractionPointCloud.Instance.ToGrid(acc)); //Debug.Log(snappedPos.x + " " + snappedPos.y + " " + snappedPos.z); finalHandObjPos = acc + new Vector3(0.5f, 0.5f, 0.5f); if (initialHandObjPos != finalHandObjPos) { StartCoroutine("MoveHand"); } //handObject.transform.position = finalHandObjPos; }