我想在WebGL纹理中存储顶点数组,但无法真正弄清楚如何正确地执行它。 这样做的目的是将顶点传递给我的片段着色器并处理它们以进行光线跟踪。目前将顶点数据打包到WebGL纹理中
我的JavaScript代码如下所示:
var a = new ArrayBuffer();
// Model.VerticeMap is an array holding all vertices [x1, y1, z1, x2, y2, z2, ...]
a = Model.VerticeMap; // array length: 36864
var dataArray = new Float32Array(a);
var vMapTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, vMapTexture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 2, 2, 0, gl.RGB, gl.FLOAT, dataArray);
我与纹理的宽度和高度2.以较高的值会导致错误ArrayBufferView not big enough for request
没有错误。
我也使用扩展OES_texture_float
作为纹理中的浮点值。
我必须承认,我不是100%确定我在那里做什么。这是更多的来回,我很高兴,当我的代码没有得到任何错误的时候。我的主要想法是将每个顶点的x,y,z值存储为纹理中每个像素的r,g,b值。因此,纹理尺寸必须与我的3D模型的三角形数量相等或更高。不幸的是,WebGL中的纹理大小限于两个数字的幂。顶点的数量也应该是可变的,因为我打算在场景中渲染多个模型。
对于正确使用ArrayBuffer
,Float32Array
和texImage2D()
命令来解决我在WebGL中发送顶点到片段着色器的问题,我将不胜感激。