C# 如何在shadermodel 3.0中将Kinect depthdata short[]设置为纹理格式的int?
大家好,我们正在与Kinect和C#XNA在Windows7上进行一个项目。C# 如何在shadermodel 3.0中将Kinect depthdata short[]设置为纹理格式的int?,c#,xna,kinect,C#,Xna,Kinect,大家好,我们正在与Kinect和C#XNA在Windows7上进行一个项目。 我们遇到了一个意想不到的问题:来自Kinect相机的深度数据为我们提供了一个short[],但我们只能以int32格式或float16或float32或float64格式创建纹理 因此,问题是在CPU上将这个相当大的short[]图像转换成int32或float的速度慢得可笑。在Shadermodel 3.0上没有bitwize操作,所以据我所知,我们不能将float比特破解回int 我们正在考虑进入C++,但这让我们
我们遇到了一个意想不到的问题:来自Kinect相机的深度数据为我们提供了一个
short[]
,但我们只能以int32
格式或float16
或float32
或float64
格式创建纹理
因此,问题是在CPU上将这个相当大的short[]
图像转换成int32
或float
的速度慢得可笑。在Shadermodel 3.0上没有bitwize操作,所以据我所知,我们不能将float
比特破解回int
我们正在考虑进入C++,但这让我们感到疑惑:XBOX360到底是如何与Kinect合作的?我们认为,它应该针对Xbox进行优化。有这么少可用的纹理格式似乎很愚蠢。
你到底想实现什么?Kinect返回的深度数据本身不是图像,而是一组距离。不管怎样,你都必须把它转换成一个图像,即使有一些基于短的纹理格式。在OpenGL中,我们可以选择不同的纹理格式。例子。GLTEXAGE2D(GL_纹理_2D,0,GL_R16,宽度,高度,0,GL_红色,GL_无符号_短,(GLvoid*)纹理_数据);因此,在C++和OpenGL中,我们可以选择使用UNSIGNEDY短作为输入数据,并且转换将为我们完成,快速和优化。在C#XNA中,Texture2D SurfaceFormat所有格式似乎都是浮点格式。。。而且没有像我看到的那样快的自动转换。我觉得这很奇怪,因为我认为它是优化游戏的。“所以在C++和OpenGL中,我们实际上可以选择使用unsiNeddStI短作为输入数据,并且转换将为我们完成,快速和优化。”但是如何?那些短裤不是颜色数据。OpenGL如何知道将这些值转换为什么颜色?因为GLTEXAGE2D函数非常棒,它允许您指定纹理的内部格式,还允许您指定输入数据的确切格式。当它出现在图形卡上之后,您只需要一个执行乘法的着色器