在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);
}
我意识到大多数实际的代码都隐藏在函数中,如果这些函数中的任何一个可能会导致问题,就说出来,我也会为它们提供代码。
我认为您的代码不会立即出现问题,但我可以给出一些建议:堆栈溢出有两个可能的原因:
-
通过在自动存储中分配对象,超出了可用堆栈的数量。
-
一个(集合)函数正在递归地调用它们自己,而没有正确地终止递归。
幸运的是,堆栈溢出非常容易调试:在调试器中运行程序,让堆栈溢出发生,并使用调试器检索回溯/堆栈跟踪。这将准确地显示是哪个函数调用导致了问题。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 运行时 kinect 输出的 3D 可视化
- 在Visual Studio 2013 C++中使用GLUT渲染Kinect输出(堆栈溢出)