javascript - 如何在 Three.js 中不在 Canvas 上实际渲染场景的情况下获取场景的像素数据?

标签 javascript three.js

我想知道如果我要正常渲染一个场景,我是否基本上可以得到在 Canvas 上渲染的像素(作为数组缓冲区),但实际上没有做尚未在 Canvas 上渲染它们。如果是,怎么办?

我真的没有任何代码可以做这样的事情,因为我不知道它是否可能。 (另外,我对 Three.js 还很陌生)

最佳答案

几乎是:您可以将场景渲染成 THREE.WebGLRenderTarget并使用 renderer.readRenderTargetPixels()访问呈现的数据。我知道的唯一区别是它将没有抗锯齿。

所以像这样:

const rt = new THREE.WebGLRenderTarget(rendererWidth, rendererHeight);
renderer.render(scene, camera, rt);

// w/h: width/height of the region to read
// x/y: bottom-left corner of that region
const buffer = new Uint8Array(w * h * 4);
renderer.readRenderTargetPixels(rt, x, y, w, h, buffer);

现在,如果您只想渲染您感兴趣的一小部分屏幕,您可以使用 scissor-testing :

renderer.setScissor(x, y, w, h);
renderer.setScissorTest(true);

renderer.render(scene, camera, rt);

renderer.setScissor(0, 0, rendererWidth, rendererHeight);
renderer.setScissorTest(false);

关于javascript - 如何在 Three.js 中不在 Canvas 上实际渲染场景的情况下获取场景的像素数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50344992/

相关文章:

javascript - 如何检查 Three.js 中的项目是否已加载到场景中?

json - 如何在使用three.js和jsonLoader时制作加载屏幕?

three.js - 如何在 Blender 中将 IK 中的骨骼烘焙(转换)为 FK

javascript - 动态几何体上的面法线

three.js - 单孔形状 : "Probably Hole outside Shape!"

javascript - 如何在包含数组的数组上使用 Math.max.apply

javascript - 我无法在 Mac 上打开 Cypress : Cypress not found

javascript - 如何显示 Rails AJAX JSON 响应中的文本 - Javascript 正在返回 [object HTMLDocument]

javascript - 适用于 iPhone 的极简主义可缓存 jQuery/javascript 库?

javascript - 加载页面后无法提交 html 表单