我有一个带有大网格物体的three.js场景作为我的地图(从混合器中导出)。
我加载它:
// map
var loader = new THREE.JSONLoader(true);
var thiz = this;
loader.load(
"iceworld.js"
, function(geometry, materials) {
materials[0].side = THREE.DoubleSide;
var faceMaterial = new THREE.MeshLambertMaterial( materials[0] );
//var faceMaterial = new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'ice.jpg' ), side: THREE.DoubleSide } );
mesh = new THREE.Mesh( geometry, faceMaterial );
thiz.scene.add( mesh );
}
);
我使用PointerLockControls
。现在我可以穿过地图的墙壁,因为没有碰撞检测。
我该如何实现?我没有在示例和文档中找到解决方案。
答案 0 :(得分:2)
Three.js是一个图形渲染库,不涉及碰撞检测。你需要不同的东西。这里有几个选项:
Physijs.ConcaveMesh
内,为相机添加碰撞形状并进行即时,准确的碰撞检测 - 但如果您有一个相当复杂的场景,那将会很慢。就个人而言,我已经用Three.js创建了一个FPS游戏。我的关卡设计是非常规则的,所以我可以使用网格方法进行玩家碰撞,但我也想要动态对象(例如桶,盒子等),并且使用Physijs让我几乎可以轻松地集成它们。因此,通过将Physijs立方体创建到墙壁部分来处理墙壁碰撞。