Aframe 有没有一种方法可以将多个材质组件添加到a形框架中的实体中?
我正在尝试为a-frame编写一个组件,将不同的材质添加到模型的“侧面”。所以,一个几何体,其组的设置方式允许不同侧面具有不同特性的不同材质 我希望组件的用户能够操纵每种材料的所有属性,使其能够成为单个材料,即所有默认属性都可以声明更改,可以在inspector中进行调整等 考虑到我希望所有材质都像默认材质一样工作,与其通过重写材质组件的所有逻辑来重新发明轮子,例如,确定“src”是否是纹理的图像或视频,并相应地进行操作等。我想知道是否可以将默认材质组件的多个实例添加为组件的一部分 可以理解,这似乎是不可能的,因为我希望能够通过在组件名称后面附加一个带双下划线的ID在a-frame中添加多个组件 例如,如果我将其作为init函数的一部分编写Aframe 有没有一种方法可以将多个材质组件添加到a形框架中的实体中?,aframe,Aframe,我正在尝试为a-frame编写一个组件,将不同的材质添加到模型的“侧面”。所以,一个几何体,其组的设置方式允许不同侧面具有不同特性的不同材质 我希望组件的用户能够操纵每种材料的所有属性,使其能够成为单个材料,即所有默认属性都可以声明更改,可以在inspector中进行调整等 考虑到我希望所有材质都像默认材质一样工作,与其通过重写材质组件的所有逻辑来重新发明轮子,例如,确定“src”是否是纹理的图像或视频,并相应地进行操作等。我想知道是否可以将默认材质组件的多个实例添加为组件的一部分 可以理解,这
AFRAME.registerComponent('multimaterial', {
init: function(){
this.el.setAttribute('material__one', '')
this.el.setAttribute('material__two', '')
},
})
我得到以下错误
Uncaught (in promise) Error: Trying to initialize multiple components of type `material`. There can only be one component of this type per entity.
我想我能理解为什么这会被定义为开箱即用的几何体/材质组合,但有没有一种方法可以将材质组件设置为“multiple:true”,然后在我的组件中使用它
或者我需要对代码进行分支吗?如果是这样的话,有谁能向我解释一下最简单的方法吗?鉴于上面描述的用例,似乎材质组件在代码的不同部分都有定义,我的意思是有一个核心组件材质,它会引入一个单独的着色器等
非常感谢您的建议。材质组件只是在给定几何体上设置了一个3.MeshBasicMaterial
如果您想要更多,您需要深入研究THREE.js-您可以制作一个材质数组,并将其应用于自定义组件中的几何体:
var materials = [new THREE.MeshBasicMaterial({
color: 0xFF0000
}), new THREE.MeshBasicMaterial({
color: 0x00FF00
})]
this.el.getObject3D('mesh').material = materials;
在行动中检查它
如果您想检查所处理的源类型,src/utils/src-loader.js有一个简洁的函数,可以帮助您检查源是视频还是图像:
validateSrc(src, loadImageCallback, loadVideoCallback)
谢谢Piotr,这很有帮助。我知道如何在three.js级别添加多个材质,如果我只希望每个材质都有几个简单的属性,那就好了。如果我希望能够定义越来越复杂的内容,比如带有图像和视频等的src属性,那么很快就会有很多重复的逻辑/代码,我想既然已经完成了,并且可以在aframe核心代码中使用,我就可以利用它。但是如果不可能的话,我想我可以把相关的部分复制到我的组件中。恐怕你必须重复使用上面提到的检查-src/utils/src-loader.js,loadImageCallback,loadVideoCallback似乎可以检查你是在处理视频还是图像源。是的,我想这就是我必须做的-谢谢Piotr。