我目前正在尝试将ThreeJS特定区域的截图保存到文件中。迄今为止,我只尝试将图像显示到新标签页中,并已通过以下方式使其正常工作。
window.open(renderer.domElement.toDataURL("image/png"));
renderer是一个带有preserveDrawingBuffer: true属性的THREE.WebGLRenderer对象。
但是它使用整个场景,所以我已经切换到:
var gl = renderer.getContext();
var pixels = new Uint8Array(width * height * 4);
gl.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
window.open("data:image/png;base64," + btoa(String.fromCharCode.apply(null, pixels)));
这样做的话,除了一个带灰色轮廓的方块,没有别的东西被渲染出来。
for (var i = 0; i < pixels.length; ++i) { imageData.data[i] = pixels[i]; }
就可以工作。 - gman