gpt4 book ai didi

javascript - Raycast 未检测到 GlTF 文件/Three.js

转载 作者:行者123 更新时间:2023-12-04 07:40:43 32 4
gpt4 key购买 nike

我的二进制 gltf 文件(在 Blender 中建模并使用 mixamo 动画)在 raycast 上没有检测到。
我阅读了大量教程和有关它的问题以尝试修复它,但它不起作用:(

const loader = new GLTFLoader();
let modelLoader = "/models/c2.glb";
let model, mixer, neck, waist;

loader.load(modelLoader, (gltf) => {
model = gltf.scene;
let fileAnimations = gltf.animations;
model.traverse((o) => {
// console.log(o);
if (o.isBone && o.name === "mixamorigNeck") {
neck = o;
}
if (o.isBone && o.name === "mixamorigSpine") {
waist = o;
}
if (o.isMesh) {
o.material.reflectivity = 1;
}
});

document.addEventListener("click", (e) => raycast(e));
document.addEventListener("touchend", (e) => raycast(e, true));

function raycast(e, touch = false) {
const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2();
e.preventDefault();

if (touch) {
mouse.x = 2 * (e.changedTouches[0].clientX / window.innerWidth) - 1;
mouse.y = 1 - 2 * (e.changedTouches[0].clientY / window.innerHeight);
} else {
mouse.x = (e.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(e.clientY / window.innerHeight) * 2 + 1;
}

raycaster.setFromCamera(mouse, camera);

const intersects = raycaster.intersectObjects(scene.children, true);
console.log(scene.children);
if (intersects.length > 0) {
console.log("hi");}}
它没有错误,如果我在 'if (intersects){}' 之外 console.log scene.children 并点击窗口,它可以工作并包含它应该的一切,但是如果我把它放在 'if' 和单击 3d 对象,它是空数组。
我也尝试将网格插入新阵列并检测但没有工作。
请帮忙!

最佳答案

问题是您正在对蒙皮网格执行光线转换。和 three.js当前 ( r128 ) 无法为此类 3D 对象计算适当的边界体积。然而,边界体积对于光线转换很重要,因为它们用于检测早期输出。
此问题的解决方法是手动定义边界体积,以便它们正确地包围蒙皮网格。建议你穿越gltf.scene并设置 boundingSphereboundingBox蒙皮网格几何体的属性。
GitHub 上的更多信息:https://github.com/mrdoob/three.js/pull/19178

关于javascript - Raycast 未检测到 GlTF 文件/Three.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67481120/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com