three.js从gltf创建网格
我在three.js中渲染了一个gltf对象,但问题是我认为它不包含网格。我想使用光线投射器通过点击事件处理程序移动对象。我已经准备好了执行此操作的所有代码,但是当我单击时它没有注册 加载对象的代码:three.js从gltf创建网格,three.js,augmented-reality,Three.js,Augmented Reality,我在three.js中渲染了一个gltf对象,但问题是我认为它不包含网格。我想使用光线投射器通过点击事件处理程序移动对象。我已经准备好了执行此操作的所有代码,但是当我单击时它没有注册 加载对象的代码: var loader = new THREE.GLTFLoader(); loader.load( // resource URL './vitra_eames_plastic_chair/scene.gltf', // called when the resou
var loader = new THREE.GLTFLoader();
loader.load(
// resource URL
'./vitra_eames_plastic_chair/scene.gltf',
// called when the resource is loaded
function ( object ) {
object.animations; // Array<THREE.AnimationClip>
object.scene; // THREE.Scene
object.scenes; // Array<THREE.Scene>
object.cameras; // Array<THREE.Camera>
object.asset; // Object
var object = new THREE.Mesh(gltf.asset, new THREE.MeshLambertMaterial({ color: Math.random() * 0xffffff }));
object.scene.position.x = -75;
object.scene.position.y = -75;
object.scene.position.z = -75;
object.scene.rotation.x = 50;
object.scene.rotation.y = 50;
object.scene.rotation.z = 50;
object.scene.scale.x = .5;
object.scene.scale.y = .5;
object.scene.scale.z = .5;
object.scene.castShadow = true;
object.scene.receiveShadow = true;
boxScene.add(object.scene);
objects.push(object.scene);
},
// called while loading is progressing
function ( xhr ) {
console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
},
// called when loading has errors
function ( error ) {
console.log( 'An error happened' );
}
);
var loader=new THREE.GLTFLoader();
装载机(
//资源URL
“./vitra_eames_塑料椅子/scene.gltf”,
//在加载资源时调用
功能(对象){
object.animations;//数组
object.scene;//3.scene
object.scenes;//数组
object.cameras;//数组
object.asset;//对象
var object=new THREE.Mesh(gltf.asset,new THREE.MeshLambertMaterial({color:Math.random()*0xffffff}));
object.scene.position.x=-75;
object.scene.position.y=-75;
object.scene.position.z=-75;
object.scene.rotation.x=50;
object.scene.rotation.y=50;
object.scene.rotation.z=50;
object.scene.scale.x=.5;
object.scene.scale.y=.5;
object.scene.scale.z=.5;
object.scene.castShadow=true;
object.scene.receiveShadow=true;
添加(object.scene);
objects.push(object.scene);
},
//加载正在进行时调用
函数(xhr){
log((xhr.loaded/xhr.total*100)+'%loaded');
},
//加载有错误时调用
函数(错误){
log('发生错误');
}
);
我也有这个代码,它生成框。在这里,事件处理程序可以工作,但显然对象的加载方式不同。如有任何建议,将不胜感激
var geometry = new THREE.BoxGeometry(1, 1, 1);
for (var i = 0; i < 50; i++) {
var object = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({ color: Math.random() * 0xffffff }));
object.position.x = Math.random() * 50 - 25;
object.position.y = Math.random() * 10 + 1;
object.position.z = Math.random() * 50 - 25;
object.rotation.x = Math.random() * 2 * Math.PI;
object.rotation.y = Math.random() * 2 * Math.PI;
object.rotation.z = Math.random() * 2 * Math.PI;
object.scale.x = Math.random() * 3 + 1;
object.scale.y = Math.random() * 3 + 1;
object.scale.z = Math.random() * 3 + 1;
object.castShadow = true;
object.receiveShadow = true;
boxScene.add(object);
objects.push(object);
}
var-geometry=new-THREE.BoxGeometry(1,1,1);
对于(变量i=0;i<50;i++){
var object=new THREE.Mesh(几何体,new THREE.MeshLambertMaterial({color:Math.random()*0xffffff}));
object.position.x=Math.random()*50-25;
object.position.y=Math.random()*10+1;
object.position.z=Math.random()*50-25;
object.rotation.x=Math.random()*2*Math.PI;
object.rotation.y=Math.random()*2*Math.PI;
object.rotation.z=Math.random()*2*Math.PI;
object.scale.x=Math.random()*3+1;
object.scale.y=Math.random()*3+1;
object.scale.z=Math.random()*3+1;
object.castShadow=true;
object.receiveShadow=true;
添加(对象);
对象。推(对象);
}
我认为您必须更改onLoad()
调用GLTFLoader.load()
来解决这个问题。您正在使用不正确的object.asset
创建网格。相反,您可以将object.scene
直接添加到场景图中。因此,在大多数情况下,回调可以简单地如下所示:
var loader = new THREE.GLTFLoader();
loader.load( function( gltf ) {
scene.add( gltf.scene );
) };
请查看以下示例的源代码,以了解此方法的实际应用
“我认为它不包含网格”它包含一个网格。能否提供光线投射器的代码以及如何获取交点?如果它渲染包含网格。@prisoner849
var raycaster=new THREE.raycaster()代码>