Events 在mousemove事件期间尝试设置点大小时,WebGL bufferSubData不起作用

Events 在mousemove事件期间尝试设置点大小时,WebGL bufferSubData不起作用,events,webgl,mousemove,Events,Webgl,Mousemove,我想使用webGL在mousemove事件期间绘制不同的点大小。例如,我按下鼠标并绘制大小为1像素的点。然后选择一个不同的大小,当我按下鼠标并移动时,我可以用新的大小绘制点 我发现了一些奇怪的事情,非常感谢您的反馈 我创建了一个点大小数组: var pointSizes = new Uint8Array(2000); attribute float pointSize; 我向着色器添加了一个属性以获取点大小: var pointSizes = new Uint8Array(2000);

我想使用webGL在mousemove事件期间绘制不同的点大小。例如,我按下鼠标并绘制大小为1像素的点。然后选择一个不同的大小,当我按下鼠标并移动时,我可以用新的大小绘制点

我发现了一些奇怪的事情,非常感谢您的反馈

  • 我创建了一个点大小数组:

    var pointSizes = new Uint8Array(2000);
    
    attribute float pointSize;
    
  • 我向着色器添加了一个属性以获取点大小:

    var pointSizes = new Uint8Array(2000);
    
    attribute float pointSize;
    
    主要功能有: gl_PointSize=PointSize

  • 如果我用大小填充数组,只要我没有绑定到mousemove事件中,一切正常:

    for(var i = 0; i<=1999; i++)
        {pointSizes[i] = 5.0;}  //draw points of size 5
    
    
    aPointSizeBuffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, aPointSizeBuffer);
    gl.bufferData(gl.ARRAY_BUFFER, pointSizes, gl.STATIC_DRAW);
    aPointSize = gl.getAttribLocation(program, "pointSize");
    gl.vertexAttribPointer(aPointSize, 1, gl.UNSIGNED_BYTE, false, 0, 0);
    gl.enableVertexAttribArray(aPointSize);
    
    gl.bindBuffer(gl.ARRAY_BUFFER, aPointSizeBuffer);
    pointSizes[index] = fpointSize;  //this is the selected size
    gl.bufferSubData(gl.ARRAY_BUFFER, index, pointSizes[index]);
    
    我是否做了以下任何一件事都无关紧要:

          gl.bufferSubData(gl.ARRAY_BUFFER, index, fpointSize);
    
    甚至:

          gl.bufferSubData(gl.ARRAY_BUFFER, index,1);
    

  • 再次感谢您的帮助。bufferSubData要求第三个参数为TypeArray。您的
    点大小[索引]
    似乎是uint8。尝试使用
    pointSizes.subarray(索引,索引+1)
    并查看是否可以修复它