Ejemplo n.º 1
0
    // first pass
    private void UpdateDepthMesh(DepthMesh depthMesh, ushort[] depthData, float scale, int downSampleSize)
    {
        shearTransformation    = Matrix4x4.identity;
        shearTransformation[8] = shearX / NUM_PIXELS;
        shearTransformation[9] = shearY / NUM_PIXELS;

        for (int y = 0; y < activeHeight; y += downSampleSize)
        {
            for (int x = 0; x < activeWidth; x += downSampleSize)
            {
                int idx = x / downSampleSize;
                int idy = y / downSampleSize;

                int fullIndex  = y * activeWidth + x;
                int smallIndex = (idy * (activeWidth / downSampleSize)) + idx;

                float depth = depthData[fullIndex];
                depth = (depth < MAX_DEPTH) ? depth : MAX_DEPTH;
                depth = (depth == 0) ? MAX_DEPTH : depth;
                depth = (depth / MAX_DEPTH) * scale;

                depthMesh.OrigVerts[smallIndex].z = depth;
                depthMesh.verts[smallIndex]       = shearTransformation.MultiplyPoint3x4(depthMesh.OrigVerts[smallIndex]);
            }
        }
        depthMesh.Apply();
    }
Ejemplo n.º 2
0
    private void UpdateDepthMesh(DepthMesh depthMesh, ushort[] depthData, float scale, int downSampleSize)
    {
        int maxIndex = m_frameManager.MaxDepthSamples;

        for (int y = 0; y < m_frameManager.DepthFrameHeight; y += downSampleSize)
        {
            for (int x = 0; x < m_frameManager.DepthFrameWidth; x += downSampleSize)
            {
                int idx = x / downSampleSize;
                int idy = y / downSampleSize;

                int fullSampleIndex = y * m_frameManager.DepthFrameWidth + x;
                int downSampleIndex = (idy * (m_frameManager.DepthFrameWidth / downSampleSize)) + idx;
                downSampleIndex = (downSampleIndex >= maxIndex) ? maxIndex - 1 : downSampleIndex;

                ushort d = depthData[fullSampleIndex + downSampleSize / 2];
                d = (d < maxDepth) ? d : maxDepth;
                d = (d == 0) ? maxDepth : d;
                float depth = d * scale + Application.Instance.FarClipPlaneDistance - maxDepth * scale;

                depthMesh.verts[downSampleIndex].z = depth;
            }
        }
        depthMesh.Apply();
    }
Ejemplo n.º 3
0
    private void SetActive(bool active)
    {
        IsActive = active;

        if (active)
        {
            m_depthMesh = m_depthManager.GetDepthMesh();
        }
        else
        {
            m_meshCollider.sharedMesh = null;
        }
    }
Ejemplo n.º 4
0
    void Start()
    {
        meshCollider = ColliderMesh.GetComponent <MeshCollider>();

        kinectMeshFilter = GetComponent <MeshFilter>();

        blurMaterial      = new Material(Resources.Load("Shaders/Blur13") as Shader);
        depthCopyMaterial = new Material(Resources.Load("Shaders/DepthCopy") as Shader);

        SimulatedKinectCamera.depthTextureMode = DepthTextureMode.Depth;
        sensor = KinectSensor.GetDefault();

        if (sensor != null)
        {
            if (!sensor.IsOpen)
            {
                sensor.Open();
            }

            FrameDescription fd = sensor.DepthFrameSource.FrameDescription;
            activeWidth  = NUM_PIXELS;
            activeHeight = NUM_PIXELS;

            // downsample to lower resolution
            kinectDepthMesh   = new DepthMesh(activeWidth / KINECTMESH_DOWNSAMPLING, activeHeight / KINECTMESH_DOWNSAMPLING);
            colliderDepthMesh = new DepthMesh(activeWidth / COLLIDERMESH_DOWNSAMPLING, activeHeight / COLLIDERMESH_DOWNSAMPLING);

            kinectMeshFilter.mesh.MarkDynamic();
            kinectMeshFilter.mesh.vertices  = kinectDepthMesh.mesh.vertices;
            kinectMeshFilter.mesh.triangles = kinectDepthMesh.mesh.triangles;

            meshCollider.sharedMesh.MarkDynamic();
            meshCollider.sharedMesh.vertices  = colliderDepthMesh.mesh.vertices;
            meshCollider.sharedMesh.triangles = colliderDepthMesh.mesh.triangles;

            // texture buffers
            simulatedKinectRenderBuffer      = new RenderTexture(activeWidth, activeHeight, 16, RenderTextureFormat.Depth);
            simulatedKinectRenderBufferColor = new RenderTexture(activeWidth, activeHeight, 0, RenderTextureFormat.ARGB32);
            shadowRenderBuffer = new RenderTexture(fd.Width, fd.Height, 0, RenderTextureFormat.ARGB32);

            digitalKinectDepthTexture = new Texture2D(activeWidth, activeHeight, TextureFormat.ARGB32, false);
        }
        Camera.main.GetComponent <CameraRenderHooks>().OnPreRenderEvent  += ProcessDepth;
        Camera.main.GetComponent <CameraRenderHooks>().OnPostRenderEvent += RenderShadowQuad;
    }
Ejemplo n.º 5
0
    void Start()
    {
        m_frameManager = Application.Instance.KinectFrameManager;
        m_camera       = Application.Instance.MainCamera;

        // downsample to lower resolution
        m_kinectDepthMesh = new DepthMesh(m_frameManager.DepthWidthDownsampled, m_frameManager.DepthHeightDownsampled);

        float   depthAspect = m_frameManager.DepthWidthDownsampled / m_frameManager.DepthHeightDownsampled;
        Vector2 meshSize    = new Vector2(ReefHelper.DisplayHeight * depthAspect, ReefHelper.DisplayHeight);

        depthOffset = new Vector3(-ReefHelper.DisplayHeight * depthAspect / 2, ReefHelper.DisplayHeight / 2);

        m_kinectDepthMesh.SetOffset(new Vector2(0.5f, 0.5f));
        m_kinectDepthMesh.Init(meshSize, false);

        maxDepth   = m_frameManager.MaxReliableDistance;
        worldDepth = Application.Instance.FarClipPlaneDistance * DepthScale / maxDepth;
    }
Ejemplo n.º 6
0
    // second pass
    private void UpdateDepthMesh(DepthMesh depthMesh, Texture2D depthTexture, float scale, int downSampleSize)
    {
        byte[] depthData = depthTexture.GetRawTextureData();

        for (int y = 0; y < activeHeight; y += downSampleSize)
        {
            for (int x = 0; x < activeWidth; x += downSampleSize)
            {
                int idx = x / downSampleSize;
                int idy = y / downSampleSize;

                int fullIndex  = y * activeWidth * 4 + x * 4; // ARGB
                int smallIndex = idy * (activeWidth / downSampleSize) + idx;

                float depth = depthData[fullIndex] * scale;
                depthMesh.verts[smallIndex].z = depth;
            }
        }
        depthMesh.Apply();
    }
Ejemplo n.º 7
0
 // Use this for initialization
 void Start()
 {
     DepthMesh  = GetComponent <DepthMesh>();
     ClickCount = 0;
 }
Ejemplo n.º 8
0
 void Start()
 {
     MeshScript = GetComponent <DepthMesh>();
 }