【问题标题】:drawElements with webGL使用 webGL 绘制元素
【发布时间】:2014-12-06 14:48:11
【问题描述】:

我有面部索引(指向点)和点,并想在循环中绘制三角形。 Web 控制台给了我这个错误:

WebGL: drawElements: bound element array buffer is too small for given count and offset

这是我的代码:

for(var i=1;i<38000;i++){
 var vtx = new Float32Array(
 [points[faces[i][1]][1],points[faces[i][1]][2],points[faces[i][1]][3],
  points[faces[i][2]][1],points[faces[i][2]][2],points[faces[i][2]][3],
  points[faces[i][3]][1],points[faces[i][3]][2],points[faces[i][3]][3]
]
);
var idx = new Uint16Array([0, 1]);
initBuffers(vtx, idx);
gl.lineWidth(1.0);
gl.uniform4f(shaderProgram.colorUniform, 0, 0, 0, 1);
gl.drawElements(gl.LINES, 3, gl.UNSIGNED_SHORT, 0);
unbindBuffers();
}
}

例程不绘制任何东西。我该如何解决?

【问题讨论】:

    标签: javascript webgl


    【解决方案1】:

    您的drawElements 调用需要为第二个参数(计数)设置一个不同的值。

    首先:它表示您正在绘制的顶点(不是图元!)的数量。所以(gl.TRIANGLES, 3...) 会画一个三角形。 (gl.LINES, 2...) 会画一条线,(gl.LINES, 4...) 会画 2 条线,但 (gl.LINES, 3...) 会画一条线半?确保您的计数与原始类型匹配。

    其次,假设您正确地将idx 上传到缓冲区并绑定它,您只提供了两个索引,而您的绘图调用表明您正在绘制三个。这可能是您的错误的原因。将计数更改为2,您的代码应该可以工作(假设您已正确设置其他所有内容)。至少你会避免你得到的错误信息。

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多