我有一个三.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
。现在我可以穿过地图的墙壁,因为没有碰撞检测。
我该如何实施?我在示例和文档中没有找到解决方案。
Three.js 是一个图形渲染库,不关心碰撞检测。为此你需要一些不同的东西。这里有几个选项:
Physijs.ConcaveMesh
中,向相机添加碰撞形状并进行即时、准确的碰撞检测 - 但如果您有一个相当复杂的场景,那么速度会很慢。就我个人而言,我使用 Three.js 创建了一款 FPS 游戏。我的关卡设计非常规则,所以我可以使用网格方法来处理玩家碰撞,但我也想要动态对象(例如桶、盒子等),并且使用 Physijs 让我几乎可以轻松地集成它们。因此,通过为墙壁部分创建 Physijs 立方体来处理墙壁碰撞。