首先,让我谈谈我的目标。我正在创建另一个像素艺术在线编辑器,并决定仅使用WebGL(完全不使用Canvas2D)。这很蠢因为我对这项技术一无所知,但我正在努力!那么问题来了:如何更改唯一像素的颜色?我曾经因为另一个"误解"而苦苦挣扎,后来发现了这个带有粒子系统的答案:
https://dev59.com/-mQn5IYBdhLWcg3w7KvS#16465343
我对它进行了改写,使其与我的情况更接近:
https://jsfiddle.net/kurz/rt2n7hmb/1/
正如您所看到的,当您在画布上绘制时,有10个像素具有相同的颜色。
下面是主要的绘图方法:
function mouseMoveEvent(e) {
/*... detect x and y...*/
gl.bindBuffer(gl.ARRAY_BUFFER, particleBuffer);
var data = new Float32Array(2);
data[0] = x;
data[1] = y;
gl.uniform4f(
gl.getUniformLocation(shaderProgram, "color"),
Math.random(),
Math.random(),
Math.random(),
1.0
);
gl.bufferSubData(gl.ARRAY_BUFFER, particleId * particleSize * sizeOfFloat, data);
particleId = (particleId + 1) % vertexBufferSize;
gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawArrays(gl.POINTS, 0, vertexBufferSize);
}
那么如何将此示例更改为每个像素都具有唯一颜色的绘制方式?
你们中的一些人可能会说:“使用canvas2d!”-不!我认为未来不是canvas2d。 “那就用库!”-不,再次否定!对于像绘制正方形这样“简单”的事情,我不想包含大型库。
谢谢!