1
我有一個three.js場景,其中有一個大網格作爲我的地圖(從blender導出)。如何讓玩家控制與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
。現在我可以穿過地圖的牆壁,因爲沒有碰撞檢測。
我該如何執行此操作?我沒有在例子和文檔中找到解決方案。
這聽起來像一個困難的部分。我真的需要包含一個完整的物理引擎嗎? 我想知道是否有可能用「Ray」來檢測世界碰撞。 – appsthatmatter
這確實是一種選擇,儘管我會將其歸類爲「自己滾動」。有很多事情需要考慮,比如射擊和玩家角色尺寸,所以你很可能不會得到完美的結果,只需投射一縷光芒即可。 [這個例子](http://mrdoob.github.com/three.js/examples/misc_controls_pointerlock.html)使用'Ray',但不幸的是僅用於地面碰撞。 – Tapio
以下是關於如何使用光線投射進行碰撞檢測的教程。 http://webmaestro.fr/collisions-detection-three-js-raycasting/ – arpo