0

我使用 Three.js 来查看和挑选对象,但我遇到了可见性问题

我在three.js 中加载了一个collada 对象 我的collada 加载器与repo 的加载器略有不同。我添加了

function copyMaterial (_material) {
    var newMaterial = new THREE.MeshLambertMaterial();
    for (var p in _material) {
        if (_material.hasOwnProperty(p) && p !== "id") {
            var obj = _material[p];
            newMaterial[p] = obj;
        }
    }
    return newMaterial;
}

并且在加载材料时,我只是在分配之前复制它

这允许我单独更改每个对象的不透明度,即使它们使用相同的 collada 材质。

这很好用。现在通过这样做,我现在看到了一些奇怪的行为。根据我的对象的方向,某些部分是否通过透明度出现。截图会更好地解释,

我们看不到内部零件

我们看到内部零件

关于发生了什么以及如何解决它的任何想法?

谢谢

4

1 回答 1

3

据我所知,这发生在 2 次:

1)当您在同一位置设置了多个刻面并且一个可见而另一个不可见时。所以在渲染时,它取决于首先渲染的相机角度。

2)当您通常尝试将对象的所有部分设置为透明时,但仍希望能够通过其他部分看到某些面孔。同样,这就是渲染器的工作方式。

现在,我发现的唯一解决方案是将 FrondSide 和 BackSide 分配给单独的材料并将它们都设置为同一个对象(我猜是你的对象的一部分):

texture = new THREE.Texture(textureImage);
texture.needsUpdate = true;
material = new THREE.MeshBasicMaterial({
    map: texture,
    transparent: true,
    side: THREE.BackSide
 }); 
material2 = new THREE.MeshBasicMaterial({
    map: texture,
    transparent: true
});
geometry = new THREE.SphereGeometry(RADIUS, 40, 20);
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
mesh = new THREE.Mesh(geometry, material2);
scene.add(mesh);

https://github.com/mrdoob/three.js/issues/2476了解有关该问题的更多信息

于 2012-12-05T04:27:13.130 回答