0

openNiライブラリをインストールして、kinectをコンピューターで動作させました。私の問題は、私がC++の単なる初心者プログラミングであるということです。

このページからハンドトラッキングのコードをコピーしました。

http://openni.org/Documentation/ProgrammerGuide.html

VisualStudio11ベータプロジェクトに貼り付けます。

変数xnは定義されていないと私に言い続けています...しかし、xnが何であるかはわかりません。

コードで変数xnを定義する方法、またはコードを機能させるために私がしなければならないことを教えてください。

実現:これはコードであり、上記のページにあります

#define GESTURE_TO_USE "Click"

xn::GestureGenerator g_GestureGenerator;
xn::HandsGenerator g_HandsGenerator;

void XN_CALLBACK_TYPE 
Gesture_Recognized(xn::GestureGenerator& generator,
                   const XnChar* strGesture,
                   const XnPoint3D* pIDPosition,
                   const XnPoint3D* pEndPosition, void* pCookie)
{
    printf("Gesture recognized: %s\n", strGesture);
    g_GestureGenerator.RemoveGesture(strGesture);
    g_HandsGenerator.StartTracking(*pEndPosition);
}
void XN_CALLBACK_TYPE
Gesture_Process(xn::GestureGenerator& generator,
                const XnChar* strGesture,
                const XnPoint3D* pPosition,
                XnFloat fProgress,
                void* pCookie)
{}

void XN_CALLBACK_TYPE
Hand_Create(xn::HandsGenerator& generator,
            XnUserID nId, const XnPoint3D* pPosition,
            XnFloat fTime, void* pCookie)
{
  printf("New Hand: %d @ (%f,%f,%f)\n", nId,
         pPosition->X, pPosition->Y, pPosition->Z);
}
void XN_CALLBACK_TYPE
Hand_Update(xn::HandsGenerator& generator,
            XnUserID nId, const XnPoint3D* pPosition,
            XnFloat fTime, void* pCookie)
{
}
void XN_CALLBACK_TYPE
Hand_Destroy(xn::HandsGenerator& generator,
             XnUserID nId, XnFloat fTime,
             void* pCookie)
{
  printf("Lost Hand: %d\n", nId);
  g_GestureGenerator.AddGesture(GESTURE_TO_USE, NULL);
}

void main()
{

  XnStatus nRetVal = XN_STATUS_OK;

  Context context;
  nRetVal = context.Init();
  // TODO: check error code

  // Create the gesture and hands generators
  nRetVal = g_GestureGenerator.Create(context);
  nRetVal = g_HandsGenerator.Create(context);
  // TODO: check error code

  // Register to callbacks
  XnCallbackHandle h1, h2;
  g_GestureGenerator.RegisterGestureCallbacks(Gesture_Recognized,
                                              Gesture_Process,
                                              NULL, h1);
  g_HandsGenerator.RegisterHandCallbacks(Hand_Create, Hand_Update,
                                         Hand_Destroy, NULL, h2);

  // Start generating
  nRetVal = context.StartGeneratingAll();
  // TODO: check error code

  nRetVal = g_GestureGenerator.AddGesture(GESTURE_TO_USE);

  while (TRUE)
  {
    // Update to next frame
    nRetVal = context.WaitAndUpdateAll();
    // TODO: check error code
  }

  // Clean up
  context.Shutdown();
}
4

2 に答える 2

1

xn名前空間です。

少なくとも 1 つのヘッダー ファイルを含める必要があるようです。

ファイルの先頭に次を追加してみてください。

#include <XnCppWrapper.h>

他にも未定義のxn::クラスがあるかもしれません。その場合は、ドキュメントを使用してクラスを特定し、どのヘッダー ファイルを変更する必要があるかを確認してください#include

于 2012-05-01T21:26:22.573 に答える
0

ヘッダー ファイルが含まれていないようです。この問題を解決するには、必要なすべてのヘッダーも含まれる次の 2 つのヘッダー ファイルを含める必要があります。

#include <XnOpenNI.h>
#include <XnVNite.h>

xn:: 名前空間が必要なため、これらのヘッダーを単独で使用しても問題は解決しません。

xn::この問題は、各宣言の前にマーカーを使用することで解決できます

また

これを解決する最も簡単な方法は、ヘッダー宣言の後に次の行をコードに含めることです。

using namespace xn;
于 2012-06-22T13:14:48.583 に答える