使用Kinect在OpenGL中将多个纹理/帧粘贴在一起
我遇到了以下情况:使用Kinect在OpenGL中将多个纹理/帧粘贴在一起,opengl,graphics,3d,kinect,Opengl,Graphics,3d,Kinect,我遇到了以下情况: 我有一个Kinect相机,我一直在拍摄照片(但只有当用户按下一个键时,照片才会被存储) 我使用库来检索帧的深度和颜色(我对骨架跟踪或类似的东西不感兴趣) 对于单个帧,我使用freenect附带的glpclview示例 从Kinect传感器检索空间数据后,在glpclview示例中,当前帧的绘制方式如下: glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_SHORT, 0, xyz); glEnableCli
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_SHORT, 0, xyz);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(3, GL_SHORT, 0, xyz);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, gl_rgb_tex);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 640, 480, 0, GL_RGB, GL_UNSIGNED_BYTE, rgb);
glPointSize(2.0f);
glDrawElements(GL_POINTS, 640*480, GL_UNSIGNED_INT, indices);
在哪里
static unsigned int indices[480][640];
static short xyz[480][640][3];
char *rgb = 0;
short *depth = 0;
其中:
- rgb是当前帧的颜色信息
- 深度是当前帧的深度信息
- xyz构造为: xyz[i][j][0]=j xyz[i][j]=i xyz[i][j]=深度[i*640+j]
- 索引是(我猜仅限于)跟踪rgb/深度数据的数组,其结构如下: 指数[i][j]=i*640+j
glTexImage2D(GL_TEXTURE_2D, 0, 3, 640, 480, 0, GL_RGB, GL_UNSIGNED_BYTE, rgb)
如果是,我应该将640和480更改为什么值,因为现在xyz和rgb是640x480x(帧数)的连续指针
为了得到一个更好的想法,我试图最终得到类似的东西(除了机器人:D)
如果有人有更好的想法,请提示我如何处理这个问题,请让我知道 这并不像分配一个更大的数组那么简单
如果您想将多个点云缝合在一起以制作更大的地图,您应该研究SLAM算法(这就是它们在您链接到的视频中运行的算法)。您可以在中找到许多实现。您还可以研究ICP算法(迭代最近点)和Microsoft的KinectFusion(以及PCL的开源KinFu实现)。非常感谢您,先生!它给了我一个起点!我在这里还遇到了另一个有趣的解决方案: