我在浏览器上下文中工作,摄像头图像通过二进制SocketIO通道进行流式传输。将数据流式传输到WebGL着色器
我处理在bayer格式仅支持输出其数据(作为一个非常大的字节数组),如下图所示的摄像机:
我希望显示在真实摄像机图像流时间在浏览器的画布上。
到目前为止,我的想法是使用WebGL作为渲染器(用于速度),并在片段着色器内执行从bayer到RGBA的conversion。
我对WebGL相当陌生,所以我不确定将未转换的摄像头图像发送到GPU并访问它的约定和最佳做法,以便我可以执行转换和遮挡片段。
它似乎是一种常见的技术将它作为纹理发送并通过纹理采样器(如texture2d)访问它?但是这似乎假定为RGBA格式,其中拜耳格式是完全不同的结构,只能访问原始字节数组会更有用。
指向正确的方向就足够了。我想真正的问题是'如何发送任意数据到GPU并在WebGL上下文中访问它?'
编辑:我宁愿知道原始的WebGL技术,而不是使用像ThreeJS这样的库的东西,尽管如果它特别容易,我可能会在ThreeJS中实现它。
嗨,我已经完成了这些教程,对他们很满意。我相信你误解了我的问题。加载纹理不是一个问题,它加载的是任意性质的数据,这是问题。在这种情况下,我的'纹理'不是rgba,所以它不符合标准的texture2D()采样器方法(返回一个vec4)。我是WebGL的新手,所以我不知道这些约定,但我没有在寻找教程。 – 2014-10-12 16:46:42
@BrendanAnnable你必须在着色器中进行转换。选择一种您认为最适合的格式作为转换的基础。也从像素的中心采样,并且不存在动态数组索引访问。 https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml – Winchestro 2014-10-12 17:34:37
@Winchestro到目前为止,我读过的论文和例子使用GL_LUMINANCE,因为它'有点'像一个简单的数组if你使用texture2D()。r - 这看起来像一个黑客,但如果没有其他方式,它将不得不做。 – 2014-10-12 17:59:02