我正在尝试合并一些几何体,并且看到某些类型的几何体有些奇怪的东西。我尝试了盒子,圆柱体,球体和四面体。盒子和圆筒似乎很好。当摄像机视野目标远离世界中心(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);
我的问题:
当相机距离世界中心太远时,为什么合并后的球体几何形状会消失?
为什么圆柱几何不会发生同样的情况?
我在合并过程中错过了一步(或步骤)吗?
提前感谢您的时间。
答案 0 :(得分:1)
一旦模型的边界框落在视锥体之外,它就会被剔除。所以你需要仔细合并。因为你有树合并那些靠近的。