【问题标题】:Canvas ScreenShot not working画布屏幕截图不起作用
【发布时间】:2014-07-14 11:44:43
【问题描述】:

前段时间,我可以使用toDataURL 函数从我的 webGL 3D 模型中截取屏幕截图,但突然停止工作,现在我不行了能够从任何 3D 模型获取图像。

有关更多见解,请参阅下文:

三个JS示例:

WebGL 示例:

基本示例:

在之前的所有示例中,我都没有得到图像,我得到的是黑色或透明图像

二维:

只有 2D 示例返回正确的图像

在之前的所有示例中,我都使用这种简单的方法来获取图像。

document.getElementsByTagName('canvas')[0].toDataURL();

知道我做错了什么吗?


我在 MacBook Pro 上尝试过:Chrome 和 FireFox,以及在 Windows 8.1 上的 FireFox,我得到了相同的结果

以下是我如何在 Chrome 上进行测试的动画

【问题讨论】:

  • 你能发布相关的html + js吗?控制台document.getElementsByTagName('canvas')[0] 得到什么
  • 其实这里更像是一个全局问题,我所做的只是访问打开控制台的 url,输入那个 js 行,然后我得到一个 base64 图像链接以在浏览器中打开
  • 看整个东西是base64还是前面是否追加了图片类型。进一步尝试将整个内容粘贴到askapache.com/online-tools/base64-image-converter 之类的东西上,看看你是否得到了图像。
  • 我添加了一个关于我如何在 chrome 上测试的小屏幕截图动画,请查看
  • @RoyMJ,感谢您的评论,但我认为问题不在于 base64 图像代码,因为 2D 绘图工作正常,还是我弄错了什么?

标签: javascript canvas webgl screenshot


【解决方案1】:

我在我的 Threejs 应用程序中找到了解决这个问题的方法,解决方案就像将标志设置为 true 一样简单,所以在我的 Threejs 实例中我添加了preserveDrawingBuffer

var renderer   = new THREE.WebGLRenderer({
  preserveDrawingBuffer   : true   // required to support .toDataURL()
});

这就是使用 ThreeJs 的模型,所以我认为问题与配置设置有关,并且必须有一些使用普通 WebGl 或其他库的选项。

感谢您的阅读,我希望这对以后的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多