javascript - 如何从 Canvas 合成渲染大比例图像

标签 javascript three.js webgl

我正在考虑在我的艺术项目中使用 Three.js。我想做的是编写一些代码来生成一些图形,然后以高分辨率保存。当我说高分辨率时,我指的是 7000 x 7000 像素或更高,因为我想打印它。

到目前为止,我一直在使用 Flash 和 vvvv 做类似的事情,但我想知道这是否可行,以及 Three.js 中是否有一些示例。

你可以在这里看到我的一些东西:https://www.behance.net/onoxo

最佳答案

WebGL 通常有大小限制。现代 GPU 的大小限制可能是 8192x8192 (256meg) 甚至 16384x16384(1 gig),但在浏览器的其他区域(例如屏幕截图所需的空间),您可能会耗尽内存。

您可以通过将较大图像的各个部分渲染为单独的部分,然后在 Photoshop 或 gIMP 等其他程序中将它们拼接在一起来解决此问题。

在 Three.js 中你可以这样做。假设您取其中一个样本

function makeScreenshots() {
  var desiredWidth = 7000;
  var desiredHeight = 7000;
  var stepX = 1000;
  var stepY = 1000;
  for (var y = 0; y < desiredHeight; y += stepY) {
    for (var x = 0; x < desiredWidth; x += stepX) {
      camera.setViewOffset( desiredWidth, desiredHeight, x, y, stepX, stepY );
      renderer.render( scene, camera );
      var screenshotDataURL = renderer.domElement.toDataURL();
      saveScreenshot( "screenshot" + x + "-" + y + ".png", screenshotDataURL );
    }
  }
}

注意:您必须提供函数 saveScreenshot 并且很可能运行一个小型的 Node.js 或 Python 服务器来保存屏幕截图,但使用这种技术您通常可以生成几乎任何屏幕截图您想要的分辨率图像。

参见:https://greggman.github.io/dekapng/

关于javascript - 如何从 Canvas 合成渲染大比例图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27579484/

相关文章:

GLSL 定义计算还是替换文本?

javascript - 如何在 jQuery 3 中编写 $.fn.functionName = (function() {

Three.js 高效地将 Uvs 映射到平面

javascript - Three.js MeshPhong Material 纹理

javascript - 在标记检测 A 帧 AR.JS 上播放音频

javascript - three.js:无法使用 THREE.OBJLoader 显示 obj 文件

Javascript:从 var 打印(到打印机...)?

javascript - Nodejs 在使用循环下载许多文件时丢失数据

javascript - Mongoose find() 回调问题

GLSL:找不到我的自定义函数