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