Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字节数组设置为unity texture2d的快速方法_C#_Unity3d_Shader - Fatal编程技术网

C# 将字节数组设置为unity texture2d的快速方法

C# 将字节数组设置为unity texture2d的快速方法,c#,unity3d,shader,C#,Unity3d,Shader,在unity3d中,我从摄像头(彩色摄像头设备)中获取图像,作为插件中的字节数组,我希望在屏幕上实时显示图像 如果我使用Texture2D.SetPixels32制作纹理,它会显著降低fps(从80降低到10) 我想我需要用GPU上的着色器来实现这一点 那么,什么样的解决方案可以更快地做到这一点呢? 如果答案是使用着色器,可以给出一个示例 Thx.这听起来似乎对你来说非常合适 我已经用openGL完成了。 只需为unity编写一个插件,并从unity获取Texture2D NativeID并将其

在unity3d中,我从摄像头(彩色摄像头设备)中获取图像,作为插件中的字节数组,我希望在屏幕上实时显示图像

如果我使用
Texture2D.SetPixels32
制作纹理,它会显著降低fps(从80降低到10)

我想我需要用GPU上的着色器来实现这一点

那么,什么样的解决方案可以更快地做到这一点呢? 如果答案是使用着色器,可以给出一个示例


Thx.

这听起来似乎对你来说非常合适

我已经用openGL完成了。 只需为unity编写一个插件,并从unity获取Texture2D NativeID并将其发送到插件 然后使用openGL为纹理设置字节! 太棒了!FPS从10增加到50!!!
您还需要知道,您必须在OpenGL模式下运行游戏,并使用“-force OpenGL”来使用OpenGL函数

但是WebCamTexture需要Unity识别摄像头设备,但我使用的是Unity找不到的特殊摄像头。正如我所说的,我从C++包装器(插件)中获得字节数组的图像。我可以在这种情况下使用这个类吗?相机有什么特别之处?是自定义硬件,还是虚拟网络摄像头,或者其他什么?如果您安装了驱动程序,它不会显示在WebCamTexture.devices列表中吗?(没有kinect可供测试,但它似乎像这样或这样可以工作)在这种情况下,如何访问纹理图像像素?我知道这是死的,但我想我会加上2美分。也可以不强制OpenGL,而是根据使用的内容编写允许OpenGL或DirectX的插件。那就不用强迫了!
//First convert byte[] to color[]
  colorr = GetColor(imageBuffer);

  imageColor.SetPixels32(colorr);
  imageColor.Apply();   // fps reduced here