(转载请注明出处)
使用SDK: Kinect for Windows SDK v2.0 public preview1409
同前面,因为SDK未完成,不附上函数/方法/接口的超链接。
这次让我们跨上3D吧。
所用接口是Direct3D11,还没学过OpenGL.
不过, D3D11的内容不再本节内,毕竟光D3D11就可以讲几十节。
在编码前,我们总结一下:
顶点, Kinect对于一位追踪对象,可以实时提供1347个顶点(由GetFaceModelVertexCount获取),那么,这1k+个顶点
的拓扑结构是什么?三角链(TRIANGLELIST)?还是三角带(TRIANGLESTRIP)?不,这些顶点均是独立的,每个点对应面部的某个
位置。所以需要索引。
索引, Kinect对每个面部模型的1347个顶点提供了对应的2630个三角形(由GetFaceModelTriangleCount获取)即
7890个索引(数字也够巧的),也就是说平均每个顶点使用了近6次。获取索引缓存的函数是GetFaceModelTriangles,
第一个参数是索引的数量(3倍于三角面的数量),目前就是7890,第二个参数自然就是索引缓存(CPU)了.
导出,我们需要支持导出.obj文本文件,这个格式的具体格式这里不说明,不过请注意,obj文件中索引从1开始。
询问策略, 这次我们使用D3D11,新开线程自然使用轮询模式,不过,我们键入S键保存数据,但是消息处理与渲染不在
同一线程,所以应对公共数据使用互斥锁保证安全.
渲染策略 D2D与D3D11在Win8上面可以完美交互,所以我们使用D2D渲染2D,使用D3D渲染3D,但是请注意,
D2D与D3D的切换会造成性