// 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(); }
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(); }
private void SetActive(bool active) { IsActive = active; if (active) { m_depthMesh = m_depthManager.GetDepthMesh(); } else { m_meshCollider.sharedMesh = null; } }
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; }
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; }
// 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(); }
// Use this for initialization void Start() { DepthMesh = GetComponent <DepthMesh>(); ClickCount = 0; }
void Start() { MeshScript = GetComponent <DepthMesh>(); }