2014-11-13 13 views
4

현재 XNA에서 Kinect SDK v1.8의 Depth Data를 작업 중입니다. 인체의 Depth보기 내부에 이미지를 표시하고 싶습니다. 아래의 이미지는 내가 할 싶어 무엇을 단지 예입니다Kinect Depth View를 사용하여 인체 내부에있는 객체 표시

void kinectSensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e) 
{ 
    using (DepthImageFrame depthImageFrame = e.OpenDepthImageFrame()) 
    { 
     if (depthImageFrame != null) 
     { 
      short[] pixelsFromFrame = new short[depthImageFrame.PixelDataLength]; 

      depthImageFrame.CopyPixelDataTo(pixelsFromFrame); 
      byte[] convertedPixels = ConvertDepthFrame(pixelsFromFrame, ((KinectSensor)sender).DepthStream, 640 * 480 * 4); 

      Color[] color = new Color[depthImageFrame.Height * depthImageFrame.Width]; 
      kinectRGBVideo = new Texture2D(graphics.GraphicsDevice, depthImageFrame.Width, depthImageFrame.Height); 

      // Set convertedPixels from the DepthImageFrame to a the datasource for our Texture2D 
      kinectRGBVideo.SetData<byte>(convertedPixels); 
     } 
    } 
} 


// Converts a 16-bit grayscale depth frame which includes player indexes into a 32-bit frame 
// that displays different players in different colors 
private byte[] ConvertDepthFrame(short[] depthFrame, DepthImageStream depthStream, int depthFrame32Length) 
{ 
    int tooNearDepth = depthStream.TooNearDepth; 
    int tooFarDepth = depthStream.TooFarDepth; 
    int unknownDepth = depthStream.UnknownDepth; 
    byte[] depthFrame32 = new byte[depthFrame32Length]; 

    for (int i16 = 0, i32 = 0; i16 < depthFrame.Length && i32 < depthFrame32.Length; i16++, i32 += 4) 
    { 
     int player = depthFrame[i16] & DepthImageFrame.PlayerIndexBitmask; 
     int realDepth = depthFrame[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth; 

     // transform 13-bit depth information into an 8-bit intensity appropriate 
     // for display (we disregard information in most significant bit) 
     byte intensity = (byte)(~(realDepth >> 4)); 

     if (player == 0 && realDepth == 0) 
     { 
      // white 
      depthFrame32[i32 + RedIndex] = 255; 
      depthFrame32[i32 + GreenIndex] = 255; 
      depthFrame32[i32 + BlueIndex] = 255; 
     } 
     else if (player == 0 && realDepth == tooFarDepth) 
     { 
      // dark purple 
      depthFrame32[i32 + RedIndex] = 66; 
      depthFrame32[i32 + GreenIndex] = 0; 
      depthFrame32[i32 + BlueIndex] = 66; 
     } 
     else if (player == 0 && realDepth == unknownDepth) 
     { 
      // dark brown 
      depthFrame32[i32 + RedIndex] = 66; 
      depthFrame32[i32 + GreenIndex] = 66; 
      depthFrame32[i32 + BlueIndex] = 33; 
     } 
     else 
     { 
      // tint the intensity by dividing by per-player values 
      depthFrame32[i32 + RedIndex] = (byte)(intensity >> IntensityShiftByPlayerR[player]); 
      depthFrame32[i32 + GreenIndex] = (byte)(intensity >> IntensityShiftByPlayerG[player]); 
      depthFrame32[i32 + BlueIndex] = (byte)(intensity >> IntensityShiftByPlayerB[player]); 
     } 
    } 

    return depthFrame32; 
} 

하지만 어떻게 어떤 생각을 가지고 있지 않다 : 깊이보기위한

http://static.gamespot.com/uploads/original/1535/15354745/2429785-screen4.jpg

, 이것은 내가 무슨 짓을했는지입니다 몸체 깊숙한 곳에서 물건을 보여주기 위해 누군가가 나를 도와 준다면 나는 적절할 것입니다. 감사

+0

좋은 전제 및 코드 시도하지만 연구는 지금까지 시도 ? 다른 어떤 인터넷 검색? – MickyD

+0

정말 그런 것을 찾으려고했지만 불행히도 할 수 없었습니다. 아무도 샘플을 가지고 있다면 저를 도와주세요. –

답변

4

나는 투명성 HLSL 코드를 쓴 나는 것입니다 내 전경에 사용되는 신체와 다른 이미지 내부의 투명 하나 개의 이미지 :

http://pastebin.com/4LNZpda8