动画 GIF 作为 THREE.js 中的纹理

Posted

技术标签:

【中文标题】动画 GIF 作为 THREE.js 中的纹理【英文标题】:Animated GIF as texture in THREE.js 【发布时间】:2014-03-09 17:20:58 【问题描述】:

我正在寻找一种在 THREE.js 中使用 GIF 动画作为纹理的方法。我目前能够加载纹理(甚至是 GIF 格式),但它不播放动画。

有什么办法吗?我找到了一些这样的链接:

https://github.com/JordiRos/GLGif

http://stemkoski.github.io/Three.js/Texture-Animation.html

但我需要将 GIF 动画作为纹理播放,而不是在画布中播放。

【问题讨论】:

您说“我需要将 GIF 动画作为纹理播放,而不是在 Canvas 中”但是 Three.js 纹理被渲染到画布上。 “不在画布中”是什么意思? 【参考方案1】:

您看到的不是作为纹理的动画 GIF。您链接的网站使用库将 GIF 的每个单独帧渲染为纹理,然后通过更改纹理图像的偏移量来循环浏览它们。

查看TextureAnimation 链接的源代码并查看第157 行。这是执行此操作的对象。你可以看到跑步动画根本不是GIF:

http://stemkoski.github.io/Three.js/images/run.png

【讨论】:

【参考方案2】:

我在使用threejs 制作动画时遇到了类似的问题。 所以我创建了一个简单的包来解决这个问题: https://github.com/MaciejWWojcik/three-plain-animator

我希望这能帮助到这里获得有关threejs 动画的答案的人。

【讨论】:

stemkoski 的例子对创建这个很有帮助 不支持 Gif 文件。【参考方案3】:

使用 gifuct-js 将 gif 渲染到画布中,然后使用 CanvasTexture 将该画布作为源。

这是我的 POC 似乎可以正常工作(加载后可能需要刷新预览) https://codesandbox.io/s/giftexture-51rmw

【讨论】:

【参考方案4】:

将动画 GIF 用作纹理的替代方法是使用 ffmpeg 等工具将动画 gif 转换为视频文件,然后将该视频用作纹理,这是 WebGL 支持的。

【讨论】:

以上是关于动画 GIF 作为 THREE.js 中的纹理的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Three.js获取纹理尺寸

如何对从搅拌机导出的动画 js 模型进行纹理处理? [三.js]

THREE.JS网页中的炫酷3D

使用vue学习three.js之加载和使用纹理-用视频输出作为纹理,使用VideoTexture视频纹理实现物体表面播放视频

修复了 Three.js 中的纹理大小

three.js 中的分层纹理