gltfLoader.load('./models/saidao3/saidao.gltf',(trackObj) => {
var track = trackObj.scene;
scene.add(track);
var trackMat = new CANNON.Material('track');
track.traverse(item => {
if (item.isMesh) {
item.material.wireframe = true;
let wTrack = new CANNON.Body({
mass: 0,
material: trackMat
});
const position = item.geometry.attributes.position;
const vertices = new Float32Array(position.count * 3);
for (let i = 0; i < position.count; i++) {
vertices[i * 3] = position.getX(i);
vertices[i * 3 + 1] = position.getY(i);
vertices[i * 3 + 2] = position.getZ(i);
}
let indices = item.geometry.index.array;
let wShape = new Trimesh(vertices,indices);
wTrack.addShape(wShape);
wTrack.position.copy(item.position);
wTrack.quaternion.copy(item.quaternion);
wWorld.addBody(wTrack);
}
})
});
cannon.js根据gltf的Mesh生成碰撞体
于 2022-11-16 09:51:30 首次发布