TROIS.Object3D.ajouter: objet n'est pas une instance de TROIS.Object3D
donc, je reçois cette erreur et je ne peux pas trouver la source de celui-ci. Je crois qu'il a à voir avec moi, l'importation et la création de mes objets 3d dans ma scène, mais je ne suis pas sûr de ce que je fais mal.
voici le code:
J'ai appeler cette fonction avant que j'appelle init
function loadObjects()
{
loader = new THREE.JSONLoader();
var floorDiskmaterial = new THREE.MeshPhongMaterial({
map: THREE.ImageUtils.loadTexture('img/floor_test.jpg'),
transparent: true,
color: 0xeaeaea,
ambient: 0xeaeaea,
overdraw: 0.5,
//specular: 0x6a3e6d,
shading: THREE.FlatShading,
fog: false,
//shininess: 50,
});
loader.load( "models/floorScene.js", function( geometry ) {
FloorDiskFire = new THREE.Mesh( geometry, floorDiskmaterial);
FloorDiskFire.position.set(0,0.2,0);
FloorDiskFire.castShadow = true;
FloorDiskFire.receiveShadow = true;
FloorDiskFire.scale.set(1.5,1.5,1.5);
//FloorDiskFire.rotation.y = -0.78;
} );
//-----Pillar Loader------//
var pillarMaterial = new THREE.MeshPhongMaterial({
//map: THREE.ImageUtils.loadTexture('img/pillarMap.png'),
//transparent: true,
color: 0xeaeaea,
ambient: 0xeaeaea,
overdraw: 0.5,
//specular: 0x6a3e6d,
shading: THREE.FlatShading,
fog: false,
//shininess: 50,
});
loader.load( "models/pillar.js", function( pillar ) {
firePillar = new THREE.Mesh(pillar, pillarMaterial);
firePillar.position.set(135,0,135);
firePillar.castShadow = true;
firePillar.receiveShadow = true;
firePillar.scale.set(1.7,1.7,1.7);
} );
loader.load( "models/pillar.js", function( pillar ) {
earthPillar = new THREE.Mesh(pillar, pillarMaterial);
earthPillar.position.set(135,0,-135);
earthPillar.castShadow = true;
earthPillar.receiveShadow = true;
earthPillar.scale.set(1.7,1.7,1.7);
} );
loader.load( "models/pillar.js", function( pillar ) {
airPillar = new THREE.Mesh(pillar, pillarMaterial);
airPillar.position.set(-135,0,135);
airPillar.castShadow = true;
airPillar.receiveShadow = true;
airPillar.scale.set(1.7,1.7,1.7);
} );
loader.load( "models/pillar.js", function( pillar ) {
waterPillar = new THREE.Mesh(pillar, pillarMaterial);
waterPillar.position.set(-135,0,-135);
waterPillar.castShadow = true;
waterPillar.receiveShadow = true;
waterPillar.scale.set(1.7,1.7,1.7);
} );
}
Puis dans l'init je ajouter les objets de la scène
loader.onLoadComplete=function(){
scene.add(FloorDiskFire);
scene.add(firePillar);
scene.add(earthPillar);
scene.add(waterPillar);
scene.add(airPillar);
};
- est loader une variable globale ?
- Les Erreurs im obtenir: imgur.com/NWlmkcM
- vous avez encore de répondre à ma question si je peux aider.
- oui, il est
- cochez cette réponse s'il vous plaît : stackoverflow.com/questions/28262484/...
- hé, je suis probablement juste de ne pas voir la solution, mais Dans le lien ils disent d'utiliser la scène.ajouter() et je suis en utilisant cela. Ne dois-je pas être en ajoutant les éléments de la scène à l'extérieur de la fonction?
- non, c'est sur vous n'êtes pas le chargement d'un objet json , si vous générez le modèle de blender , essayez en utilisant les anciennes versions plutôt que r71
- Je suis l'aide de Maya, mais je vais essayer une version plus ancienne de toute façon
- essayez r69 il suffit de copier le three.js fichier et remplacer votre actuel.
- Je viens de passé à r69 et j'ai toujours l'erreur. Je peux héberger mon code pour le rendre plus facile?
- avez-vous l'esprit de l'envoi de l'ensemble des fichiers de projet afin que je puisse vous aider ? si vous êtes d'accord, je vais vous donner mon adresse e-mail , et de travailler sur la résolution de votre problème.
- vous pouvez le vérifier ici: github.com/mat148/shoeVR. Merci beaucoup
Vous devez vous connecter pour publier un commentaire.
Ok voilà le problème , le complément appel est appelé au mauvais moment , parce que je n'ai pas écrit ce code à partir de zéro et n'avez pas le temps pour de très profond de débogage , mais je vais vous donner un indice de ce qui est mal , et je suis sûr que vous le trouverez facile de trouver le bug plus tard , parce que je pense que certains de vos objets sont toujours en cours de chargement pendant que vous essayez de les ajouter à la scène.
Procédure :
j'ai changé
groupé à l'action dans une nouvelle fonction appelée
addObjects();
:puis dans votre
init()
fonction que j'ai invoqué leaddObjects();
, mais il donne toujours la même erreur !! j'ai donc essayé en invoquant après quelque temps, dans la lignée de 309 > index.html :veuillez noter que j'ai essayé de 100ms , et ça n'a pas fonctionné , puis 1 seconde fonctionne bien , ce n'est pas une solution , il est juste et indication que si vous tardez à l'appel de la fonction, tout fonctionne correctement , c'est votre travail maintenant, pour déterminer le moment de l'appeler (j'.e trouver le bon événement pour invoquer la fonction ), car il apparaît que
loader.onLoadComplete
n'est pas faire le travail.vous pouvez trouver le fichier modifié ici.
Pour ceux qui arrivent ici et que vous cherchez une autre raison pour obtenir cette erreur, je l'ai eu parce que j'ai chargé un GLTF objet, mais n'a pas l'ajouter à la scène en tant que TROIS.Object3D objet.
Un épurée exemple de ce que j'ai fait de mal:
J'étais perplexe pendant un moment, comme je l'ai fait différents de débogage de voir que, en effet, il était en train de charger, et d'attente de 5 secondes n'est pas le problème.
La touche a pour ajouter ".la scène", comme on le voit ci-dessous.