WebGl内存不足

时间:2014-03-13 20:31:14

标签: memory numbers webgl

我试图在 webgl 中渲染一些3D模型,我有52个片段的某些size 750x750对象,所以它是非常大量的数据。

我试图将所有顶点(750 x 750 x 52 = 29250000 x 3, for x, y, z coordinates for all of them)放在数组中,并且有关其他数组(750 x 750 x 52 = 29250000)中顶点强度的信息,我得到一些奇怪的错误{ {1}},

我在没有任何库的情况下使用平面WEBGL。 任何人都知道如何渲染如此大量的数据,WEBGL中的顶点数量是否存在一些限制?

1 个答案:

答案 0 :(得分:1)

这是你想要在那里推入图形存储器的大约1.7GB数据,你的显卡甚至有那么多内存吗?

您在谈论切片,因此您可能想要显示一些体积数据?

如果是这样,你可以生成一个750x750的顶点网格,然后使用rgba纹理来偏移顶点着色器内的各个顶点,其中rgb表示从顶点中心偏移的xyz和'a'你想要存储的强度,这将实际上,您可以将内存占用大约19.3 MB的顶点数据+ 111 MB的纹理数据。

然后,您将使用相同的顶点缓冲区和相应的纹理边界渲染每个切片。

缺点是您的偏移和强度的精度为8位,因此如果可行则取决于您的使用情况,并不精确。

如果它不是你并且你代表2D数据切片,你甚至可以使用RGB纹理,其中RG是xy偏移,B是你的强度。如果您需要额外的精度,您可以使用RGBA纹理,通过着色器内的乘法进行位移,通过将数据打包到三个RGB通道并让alpha通道存储强度,使用12位x和12位y。 p>

编辑: 要实现上述内存占用,您需要通过将xy除以750来从顶点位置派生纹理坐标

vec2 texcoord = pos.xy / 750.0;

或使用

创建“居中”网格时
vec2 texcoord = (pos.xy + vec2(375.0)) / 750.0;