threejs 中的 raycaster 一次只选择我的 gltf 模型的一个部分
raycaster in threejs only selects a single part of my gltf model at a time
您好,我是 three.js 的新手,非常感谢您的帮助。
我有一个 gltf 模型,其中许多部分组成一个模型。我想 select 整个模型,但是当我使用 raycaster select 模型时,我正在 select 处理那些单独的部分。
示例:假设我有一个立方体,当我将鼠标悬停在它上面时,一次只有一个面被 select编辑。
下面是我的代码...感谢任何帮助
var raycaster = new Raycaster();
loader.load("Purplelogo/Purplelogo.gltf", ( gltf ) => {
scene.add( gltf.scene );
gltf.scene.position.set(2,-0.9,1);
gltf.scene.scale.set(0.9,0.9,0.9);
gltf.scene.rotation.set(2,2,5);
});
raycaster.setFromCamera( mouse, camera );
var intersects2 = raycaster.intersectObjects( scene2.children, true );
for ( var i = 0; i < intersects2.length; i++ ) {
intersects2[ i ].object.rotateX(3)
}
您需要以某种方式找到文件的根目录。您可以通过 1000 种不同的方式做到这一点。
这是一个
let obj = intersects2[ i ].object;
// walk up until you get to the root of the gltf file
while (obj !== gltf.scene && obj.parent) {
obj = obj.parent;
}
if (obj === gltf.scene) {
// it's the root of the scene
这是另一个
// at load time
const allMeshesInGLTF = new Set();
gltf.scene.traverse(node => {
if (node.isMesh) {
allMeshesInGLTF.add(node);
}
});
// then at pick time
let obj = intersects2[ i ].object;
if (allMeshesInGLTF.has(obj)) {
// an object in the scene picked, use gltf.scene
这是另一个
// at load time
gltf.scene.traverse(node => {
if (node.isMesh) {
node.gltf = gltf;
}
});
// at pick time
let obj = intersects2[ i ].object;
if (obj.gltf) {
// use obj.gltf.scene
等...
您好,我是 three.js 的新手,非常感谢您的帮助。
我有一个 gltf 模型,其中许多部分组成一个模型。我想 select 整个模型,但是当我使用 raycaster select 模型时,我正在 select 处理那些单独的部分。
示例:假设我有一个立方体,当我将鼠标悬停在它上面时,一次只有一个面被 select编辑。
下面是我的代码...感谢任何帮助
var raycaster = new Raycaster();
loader.load("Purplelogo/Purplelogo.gltf", ( gltf ) => {
scene.add( gltf.scene );
gltf.scene.position.set(2,-0.9,1);
gltf.scene.scale.set(0.9,0.9,0.9);
gltf.scene.rotation.set(2,2,5);
});
raycaster.setFromCamera( mouse, camera );
var intersects2 = raycaster.intersectObjects( scene2.children, true );
for ( var i = 0; i < intersects2.length; i++ ) {
intersects2[ i ].object.rotateX(3)
}
您需要以某种方式找到文件的根目录。您可以通过 1000 种不同的方式做到这一点。
这是一个
let obj = intersects2[ i ].object;
// walk up until you get to the root of the gltf file
while (obj !== gltf.scene && obj.parent) {
obj = obj.parent;
}
if (obj === gltf.scene) {
// it's the root of the scene
这是另一个
// at load time
const allMeshesInGLTF = new Set();
gltf.scene.traverse(node => {
if (node.isMesh) {
allMeshesInGLTF.add(node);
}
});
// then at pick time
let obj = intersects2[ i ].object;
if (allMeshesInGLTF.has(obj)) {
// an object in the scene picked, use gltf.scene
这是另一个
// at load time
gltf.scene.traverse(node => {
if (node.isMesh) {
node.gltf = gltf;
}
});
// at pick time
let obj = intersects2[ i ].object;
if (obj.gltf) {
// use obj.gltf.scene
等...