当相机移动时,Three.js r73合并的球体几何消失

时间:2015-12-10 22:38:53

标签: three.js

我正在尝试合并一些几何体,并且看到某些类型的几何体有些奇怪的东西。我尝试了盒子,圆柱体,球体和四面体。盒子和圆筒似乎很好。当摄像机视野目标远离世界中心(0,0,0)时,球体和四面体消失。

我在这里创造了一个小提琴:http://jsfiddle.net/rdhntLns/

在小提琴中使用WASD旋转相机。

这是我的合并代码。我很可能错过了一步。

// Merged Trees
var trees = new THREE.Object3D();
var treeTrunkGeom = new THREE.BoxGeometry(1, 20, 1);
if (sphereTops) {
    var treeTopGeom = new THREE.SphereGeometry(10, 5, 5);
} else {
    var treeTopGeom = new THREE.CylinderGeometry(.1, 30, 16, 16, 4);
}
treeTopGeom.translate(0, 16, 0);
for (var i = 0; i < 500; i++) {
    var treePos = [getRandomInt(-512, 512), getRandomInt(-512, 512)];
    var trunkSize = Math.random() * 3 + 1;
    var treeTrunkGeom2 = new THREE.BoxGeometry(trunkSize, 20, trunkSize);
    var topWidth = getRandomInt(10, 18);
    var topHeight = getRandomInt(17, 32);
    if (sphereTops) {
        var treeTopGeom2 = new THREE.SphereGeometry(getRandomInt(10, 20), 5, 5);
    } else {
        var treeTopGeom2 = new THREE.CylinderGeometry(.1, topWidth, topHeight, 16, 4);
    }
    treeTrunkGeom2.translate(treePos[0], 0, treePos[1]);
    treeTopGeom2.translate(treePos[0], 16, treePos[1]);
    treeTrunkGeom.merge(treeTrunkGeom2);
    treeTopGeom.merge(treeTopGeom2);
}

var treeTrunks = new THREE.Mesh(treeTrunkGeom, new THREE.MeshLambertMaterial({color: 0xA6895A}));
treeTrunks.castShadow = true;
treeTrunks.receiveShadow = true;
var treeTops = new THREE.Mesh(treeTopGeom, new THREE.MeshLambertMaterial({color: 0xC1E825}));
treeTops.castShadow = true;
treeTops.receiveShadow = true;
treeTrunks.add(treeTops);
trees.add(treeTrunks);
trees.position.y += 8;
scene.add(trees);

我的问题:

当相机距离世界中心太远时,为什么合并后的球体几何形状会消失?

为什么圆柱几何不会发生同样的情况?

我在合并过程中错过了一步(或步骤)吗?

提前感谢您的时间。

1 个答案:

答案 0 :(得分:1)

一旦模型的边界框落在视锥体之外,它就会被剔除。所以你需要仔细合并。因为你有树合并那些靠近的。