碰撞檢測

three提供兩種碰撞檢測
1.【射線檢測【相機(jī)視線內(nèi)是一條直線,這條線觸碰到的物體會(huì)被檢測到】】
========一般可以設(shè)置一下射線發(fā)射的位置 實(shí)時(shí)更新位置會(huì)比較準(zhǔn)=====
let dir = new Vector3(0, 1, 0);
doc.raycaster.set(pos, dir);
//pos是發(fā)射起點(diǎn) dir是另一個(gè)點(diǎn)

========一般可以設(shè)置一下射線發(fā)射的位置 實(shí)時(shí)更新位置會(huì)比較準(zhǔn)=====
let worldScene = new THREE.Scene()
let cameraPos = new THREE.Camera.position();
var raycaster = new THREE.Raycaster();//射線檢測
var mouse = new THREE.Vector2()
raycaster.setFromCamera( mouse, camera );//設(shè)置射線
function onMouseClick(event){
//將鼠標(biāo)點(diǎn)擊位置的屏幕坐標(biāo)轉(zhuǎn)換成threejs中的標(biāo)準(zhǔn)坐標(biāo)
mouse.x = (event.clientX/window.innerWidth)2-1
mouse.y = -((event.clientY/window.innerHeight)
2-1)
//console.log("mouse:"+mouse.x+","+mouse.y)
// 通過鼠標(biāo)點(diǎn)的位置和當(dāng)前相機(jī)的矩陣計(jì)算出raycaster
raycaster.setFromCamera( mouse, camera );

            // 獲取raycaster直線和所有模型相交的數(shù)組集合
            var intersects = raycaster.intersectObjects( worldScene.children,true);
            console.log(intersects,"模型集合");
            //將所有的相交的模型的顏色設(shè)置為紅色
            for ( var i = 0; i < intersects.length; i++ ) {
                intersects[ i ].object.material.color.set( 0xff0000 );
            }
        }

===========================================================================
2.八叉樹檢測
首先要引入
import {Octree} from './jsm/math/Octree.js'
import {Capsule} from './jsm/math/Capsule.js'
可以在https://threejs.org/examples/games_fps.html 這個(gè)地址看例子
let worldOctree = new Octree({
undeferred: true,
depthMax: Infinity,
objectsThreshold: 8,
overlapPct: 0.15
});
let a1 = window.ThreeObj.doc.scene.children[3].position;//一個(gè)元素的Vector3坐標(biāo) (3維坐標(biāo) position)
let a2 = window.ThreeObj.doc.scene.children[4].position;//一個(gè)元素的Vector3坐標(biāo) (3維坐標(biāo) position)
window.ThreeObj.doc.scene.children[4].position.y-=0.02;
const playerCollider2 = new Capsule( a1, a2, 0.0000035 );
console.log("檢測對(duì)象==",playerCollider2)
const result2 = worldOctree.capsuleIntersect( playerCollider2 );
console.log("當(dāng)前場景",result2.depth)
當(dāng)獲取不到result2.depth的值時(shí)候說明碰撞了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容