aframe - 在 a-frame / AR.JS 中为一系列 PNG 图像制作动画
问题描述
我目前正在为我正在进行的项目试验 A-Frame 和 AR.js。我想知道是否可以为一系列 PNG 文件制作动画,例如。img-1.png, img-2.png
,等等在没有单独为每一帧添加动画的情况下?
我知道一个A 帧 GIF 组件,但 GIF 更难维护,并且只能输出有限的颜色(并且还有不透明度的问题)。
任何见解/帮助将不胜感激。谢谢!
解决方案
一个组件怎么样,它将.png
s 作为纹理加载,并以固定的间隔交换它们:
AFRAME.registerComponent("slideshow", {
init: function() {
加载和存储图像
var loader = new THREE.TextureLoader()
this.array = []
this.array.push(loader.load("one.png"))
this.array.push(loader.load("two.png"))
您可以在循环中执行此操作(“img-”+ i +“.png”),而不是一个一个地执行此操作。您也可以使用架构提供列表。
等到实体加载完毕:
this.el.addEventListener('loaded', e => {
let mesh = this.getObject3D('mesh')
let material = mesh.material
在间隔内或内交换material.map
纹理:tick()
let i = 0
setInterval(e => {
// if we're at the last element - swap to the first one
if (i >= this.array.length) i = 0
this.material.map = this.array[i++]
this.material.needsUpdate = true
当附加到实体时,它应该像这个小提琴一样工作:
<a-box slideshow></a-box>
- 为什么
this.array
?例如,您可以在remove()
函数中轻松访问它并处理纹理以释放内存。 - 为什么不直接做
setAttribute('material', 'src', 'img-' + i + '.png')
?我相信使用更多图像可能会非常低效。
推荐阅读
- power-automate - Power Automate:从返回的表中获取值
- tree - 使用级别顺序遍历的二叉树顶视图
- performance - Azure AppInsights - 快照调试器 - 应用工作区数据存储解决方案
- json - 返回 json 对象时使用数据表
- git - 有什么方法可以让 git-lfs 不为不在 repo 中的文件下载对象?
- apache-camel - org.apache.camel.CamelExecutionException:在交易所执行期间发生异常:Exchange[ID-02777-NB-1619037740507-0-1]
- csv - 从具有单独表名的文件夹中导入 CSV 文件并从 CSV 文件头创建表头
- c# - 为什么抽象方法需要参数标识符?
- sql - POSTGRESQL 在触发器后插入导致插入记录的 id 不按顺序递增
- mysql - 修改查询以仅返回在特定年份加入的用户