[英]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.