我处于A帧场景中,使用其底层的three.js创建如下对象:
var boxMaterial = new THREE.MeshPhongMaterial( { map: boxTexture, side: THREE.BackSide, bumpMap: boxBumpMap } ); var boxGeometry = new THREE.BoxBufferGeometry( 20, 20, 20 ); var box01 = new THREE.Mesh(boxGeometry, boxMaterial); scene.add(box01);
我如何使用javascript处理Aframe-physics-system的基础Cannon.js以添加StaticBody属性?
答案 0 :(得分:2)
我非常确定您不能将DOM属性添加到js非DOM对象(例如THREE
对象)中。
static body属性实际上是在创建一个新对象(CANNON.Body
的{{1}}设置为type
)。 Cannon.Body.STATIC
所做的是同步-与 Cannon.Body 的 THREE.js网格。
您可以创建一个 CANNON.Body 并将其位置与您的盒子同步,但是我会采取不同的方法:
您可以使用具有Physical属性的空aframe-physics
实体:
a-frame
但在<a-entity position="0 2 -3" three-setup dynamic-body></a-entity>
组件中设置了材料和几何形状:
a-frame
在我的fiddle
中查看正如Don McCurdy所指出的那样,拥有自定义AFRAME.registerComponent("three-setup", {
init: function() {
var boxMaterial = new THREE.MeshPhongMaterial({
side: THREE.FrontSide,
});
var boxGeometry = new THREE.BoxBufferGeometry(1, 1, 1);
var box01 = new THREE.Mesh(boxGeometry, boxMaterial);
this.el.setObject3D('mesh', box01)
}
})
组件具有更多优势:
-您可以收听a-frame
事件,该事件会在body-loaded
初始化时通知您
-通过简单的参考即可访问它:CANNON.Body
否则,您将需要创建一个this.el.body
,然后在每个渲染循环上将其位置和旋转应用于框。