簡體   English   中英

在Visual Studio 2013 C ++中使用GLUT渲染Kinect輸出(堆棧溢出)

[英]Rendering the Kinect output with GLUT in Visual Studio 2013 C++ (Stack overflow)

我一直在嘗試為項目移植一些有用的代碼,但是在使GLUT正常工作時遇到了一些困難。 每當調用cbRender函數時,Visual Studio都會彈出一個異常,指出有堆棧溢出:“ KinectBridgeWithOpenCVBasics-D2D.exe中0x00FAD357的未處理異常:0xC00000FD:堆棧溢出(參數:0x00000000,0x00272000)。”

我嘗試在cbRender的聲明中放置一個斷點,並進入下一步,使我進入了“ chkstk.asm not found” VB頁面。

到目前為止,這是我的主要功能:

int main(int argc, char** argv) {

HRESULT hr = NuiInitialize(
    NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX
    | NUI_INITIALIZE_FLAG_USES_COLOR);

if (hr != S_OK)
{
    cout << "NuiInitialize failed" << endl;
    return hr;
}

// Initialize Display Mode
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);

// Initialize OpenGL Window
glutInitWindowSize(window_width, window_height);
glutInitWindowPosition(window_xpos, window_ypos);
GLwindow = glutCreateWindow("Kinect Registration");
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

// Initialize OpenCV Window
namedWindow("Camera 0 | Camera 1", CV_WINDOW_AUTOSIZE);

// Setup The GL Callbacks
glutDisplayFunc(cbRender);
glutReshapeFunc(cbReSizeGLScene);
glutKeyboardFunc(cbKeyPressed);
glutMotionFunc(cbMouseMoved);
glutMouseFunc(cbMousePress);
glutTimerFunc(10, cbTimer, 10);

// Setup The CV Callbacks
cvSetMouseCallback("Camera 0 | Camera 1", cbMouseEvent);

glutMainLoop();

NuiShutdown();

return 0;
}

和cbRender函數:

void cbRender() {

    short xyz[window_height][window_width][3];
    unsigned char rgb[window_height][window_width][3];
    unsigned int indices[window_height][window_width];

    //Flush the OpenCV Mat's from last frame
    rgbCV.clear();
    depthCV.clear();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glPushMatrix();
    glScalef(zoom, zoom, 1);
    gluLookAt(0, 0, 3.5, 0, 0, 0, 0, 1.0, 0);
    glRotatef(rotangles[0], 1, 0, 0);
    glRotatef(rotangles[1], 0, 1, 0);
    draw_axes();

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glPointSize(2);
    //--------Camera 0 (P)-----------
    loadBuffers(0, indices, xyz, rgb);
    glVertexPointer(3, GL_SHORT, 0, xyz);
    glColorPointer(3, GL_UNSIGNED_BYTE, 0, rgb);
    glPushMatrix();
    // transform centroid of P to origin and rotate
    transformation(0);
    // projection matrix (camera specific - Can be improved)
    loadVertexMatrix();
    glDrawArrays(GL_POINTS, 0, window_width*window_height);
    glPopMatrix();
    glFlush();
    glutSwapBuffers();
    glDisable(GL_DEPTH_TEST);
}

我意識到大多數實際代碼都隱藏在函數中,並且如果其中任何一個函數可能導致問題,請這樣說,我也將為他們提供代碼。

我沒有立即看到您的代碼有問題,但是我可以提供一些建議:堆棧溢出有兩個可能的原因:

  • 通過在自動存儲中分配對象,超出了可用堆棧的數量。

  • (一組)函數在未正確終止遞歸的情況下遞歸調用自身。

幸運的是,堆棧溢出很容易調試:在調試器中運行程序,讓堆棧溢出發生,並使用調試器檢索回溯/堆棧跟蹤。 這將准確地顯示導致問題的函數調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM