You probably have to set the type of side of the material to THREE.DoubleSide
. With A-Frame you should be able to change the type using the following DOM attribute on an AEntity: material="side: double"
.
如果情况并非如此,您应该使用场景元素的片段来更新您的帖子。
EDIT:
如图所示,我的模型的部分内容渲染不正确。 THREEjs 中的模型加载器读取模型中的所有网格并将它们绑定到分组对象。要解决此问题,您必须将网格体材质的侧面设置为 DoubleSided。幸运的是,在 A 型框架中,obj-model
当模型加载成功时,组件会发出一个事件,我们为发出的事件添加一个监听器model-loaded
在 DOM 元素上并附加一个返回自定义事件的回调。自定义事件发送对模型组的引用。查询 AEntity,我附加了一个 idmodelEl
到我的。
<script>
(function(modelEl) {
if (!window['AFRAME'] && !modelEl) {
return;
}
modelEl.addEventListener('model-loaded', function(evt) {
var model = evt.detail.model;
traverse(model);
});
})(document.getElementById('stadium'));
function traverse(node) {
node.children.forEach(function(child) {
if (child.children) {
traverse(child);
}
updateMaterial(child['material'], THREE.DoubleSide);
});
}
function updateMaterialSide(material, side) {
if (!material) {
return;
}
if (material instanceof THREE.Material) {
material.side = side;
material.needsUpdate = true
} else if (material instanceof THREE.MultiMaterial) {
material.materials.forEach(function(childMaterial) {
updateMaterial(childMaterial, side);
});
}
}
</script>
After running the above script, my model, and some of the texture loading, has been fixed.
需要考虑的事情是深入创建自定义组件并修改或扩展 obj-model 组件,以避免必须查询可能存在相同问题的每个模型。
如果这些都不起作用,我相信您的波前对象导出设置可能有问题。
EDIT2:
Regarding my comment, here is a result of the fixed obj file in A-Frame:
为了方便起见,您可以在这里找到 MTL 和 OBJ 文件:
obj file
mtl file