예제 #1
0
        private void InitDeviceInfo()
        {
            int width  = _kinect.GetCalibration().DepthCameraCalibration.ResolutionWidth;
            int height = _kinect.GetCalibration().DepthCameraCalibration.ResolutionHeight;

            DeviceInfo = new KinectDeviceInfo(width, height);
        }
예제 #2
0
        private void InitResultData(KinectDeviceInfo deviceInfo)
        {
            _depthImageColors = new Color32[deviceInfo.TotalPixelNum];

            _resultData.Vertexes     = new Vector3[deviceInfo.TotalPixelNum];
            _resultData.Colors       = new Color32[deviceInfo.TotalPixelNum];
            _resultData.RGBTexture   = new Texture2D(deviceInfo.Width, deviceInfo.Height);
            _resultData.DepthTexture = new Texture2D(deviceInfo.Width, deviceInfo.Height);
        }
예제 #3
0
        private List <int> GetIndicateList(KinectDeviceInfo deviceInfo, KinectResultData resultData)
        {
            List <int> indicateList = new List <int>();

            if (_meshTopology == MeshTopology.Points)
            {
                for (int i = 0; i < deviceInfo.TotalPixelNum; i++)
                {
                    bool isVaridPoint = resultData.Vertexes[i].magnitude != 0;
                    if (isVaridPoint)
                    {
                        indicateList.Add(i);
                    }
                }
                return(indicateList);
            }

            for (int y = 0; y < deviceInfo.Height - 1; y++)
            {
                for (int x = 0; x < deviceInfo.Width - 1; x++)
                {
                    int index = y * deviceInfo.Width + x;
                    int a     = index;
                    int b     = index + 1;
                    int c     = index + deviceInfo.Width;
                    int d     = index + deviceInfo.Width + 1;

                    bool isVaridA = resultData.Vertexes[a].magnitude != 0;
                    bool isVaridB = resultData.Vertexes[b].magnitude != 0;
                    bool isVaridC = resultData.Vertexes[c].magnitude != 0;
                    bool isVaridD = resultData.Vertexes[d].magnitude != 0;

                    switch (_meshTopology)
                    {
                    case MeshTopology.Triangles:
                        if (isVaridA & isVaridD & isVaridC)
                        {
                            indicateList.Add(a);
                            indicateList.Add(d);
                            indicateList.Add(c);
                        }
                        if (isVaridA & isVaridB & isVaridD)
                        {
                            indicateList.Add(a);
                            indicateList.Add(b);
                            indicateList.Add(d);
                        }
                        break;

                    case MeshTopology.Quads:
                        if (!(isVaridA && isVaridB && isVaridC && isVaridD))
                        {
                            continue;
                        }
                        indicateList.Add(a);
                        indicateList.Add(b);
                        indicateList.Add(d);
                        indicateList.Add(c);
                        break;

                    default:
                        if (isVaridA & isVaridB)
                        {
                            indicateList.Add(a);
                            indicateList.Add(b);
                        }
                        if (isVaridC & isVaridD)
                        {
                            indicateList.Add(c);
                            indicateList.Add(d);
                        }
                        break;
                    }
                }
            }
            return(indicateList);
        }