2013-03-03 3 views
1

Я пытаюсь изолировать одного игрока через камеру глубины Kinect. Я открываю поток NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX для обработки информации о проигрывателе/​​глубине. Код, который я использую, чтобы сделать игрока это:Изолирующий плеер в глубине камеры Kinect

if (LockedRect.Pitch != 0) { 
     USHORT* curr = (USHORT*) LockedRect.pBits; 
     const USHORT* dataEnd = curr + ((width/2)*(height/2)); 
     index = 0; 

     while (curr < dataEnd && playerId != 0) { 
     USHORT depth  = *curr; 
     USHORT realDepth = NuiDepthPixelToDepth(depth); 
     BYTE intensity = 255; 
     USHORT player = NuiDepthPixelToPlayerIndex(depth); 


     // Only colour in the player 
     if (player == playerId) { 
      for (int i = index; i < index + 4; i++) 
      dest[i] = intensity; 
     } 
     else { 
      for (int i = index; i < index + 4; i++) 
      dest[i] = 0; 
     } 
     index += 4; 
     curr += 1;                 
     }  
} 

dest является OpenGL текстуры.

Проблема, с которой я сталкиваюсь, заключается в том, что переменная player изменяется, когда второй человек входит в кадр и заставляет человека, нарисованного в текстуре, быть новым человеком.

ответ

1

OK Я понял, как это сделать.

Мне нужно было получить идентификатор скелета (0-5), который отображает пользователя с глубиной (от 1 до 6). Поэтому, когда датчик нашел скелет, он сохранил идентификатор и установил его на playerId. PlayerId очищается только тогда, когда его скелет теряется датчиком.

Смежные вопросы