我正在寻找一种在THREE.js中使用GIF动画作为纹理的方法。目前我能够加载纹理(即使是GIF格式),但它不能播放其动画。
有没有什么方法可以做到这一点?我发现了一些类似于以下链接:
https://github.com/JordiRos/GLGif
http://stemkoski.github.io/Three.js/Texture-Animation.html
但我需要将GIF动画作为一种纹理来播放,而不是在Canvas中播放。
我正在寻找一种在THREE.js中使用GIF动画作为纹理的方法。目前我能够加载纹理(即使是GIF格式),但它不能播放其动画。
有没有什么方法可以做到这一点?我发现了一些类似于以下链接:
https://github.com/JordiRos/GLGif
http://stemkoski.github.io/Three.js/Texture-Animation.html
但我需要将GIF动画作为一种纹理来播放,而不是在Canvas中播放。
TextureAnimation
链接的源代码,看看第157行。那就是执行此操作的对象。你可以看到运行的动画根本不是GIF:
http://stemkoski.github.io/Three.js/images/run.png
我曾经在使用threejs时遇到过类似的动画问题。因此,我创建了一个简单的包来解决这个问题: https://github.com/MaciejWWojcik/three-plain-animator
我希望这能帮助到寻找有关threejs动画答案的人。
// Create video and play
let textureVid = document.createElement("video")
textureVid.src = `texture.mp4`; // transform gif to mp4
textureVid.loop = true;
textureVid.play();
// Load video texture
let videoTexture = new THREE.VideoTexture(textureVid);
videoTexture.format = THREE.RGBFormat;
videoTexture.minFilter = THREE.NearestFilter;
videoTexture.maxFilter = THREE.NearestFilter;
videoTexture.generateMipmaps = false;
// Create mesh
var geometry = new THREE.SphereGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { map: videoTexture } );
mesh = new THREE.Mesh( geometry, material );
scene.add(mesh);
textureVid.crossOrigin = 'anonymous';
并使用 textureVid.src = 'http://localhost:8080/texture.mp4';
来在元素中使用本地服务的文件,textureVid.muted = true;
使元素首先能够工作,并且 videoTexture.format = THREE.RGBAFormat;
因为最近 Three.js 中似乎已经删除了 RGBFormat。 - Yin Cognyto使用ffmpeg等工具将动画GIF转换为视频文件,并将该视频作为纹理来使用,这是WebGL支持的一种替代方法。