Cela peut sembler être une question dupliquée, car il est très similaire à this one ou beaucoup d'autres, mais aucun des articles que j'ai vus ne m'a vraiment aidé à comprendre où le problème est (bien sûr, c'est moi;) ...), donc j'ose le poster ici, car ça me rend vraiment fou. Eh bien, je travaille sur un projet en Angular2 généré avec Angular CLI (pas de tâche backend ou de trafic, juste des fichiers HTML + CSS + JS pour le moment ... tous à jour et plus récents). J'ai importé Three.js et trois obj chargeur par NPM et déclaré dans mon élément comme celui-ci:Three.js -> FileLoader (scope.manager) pas constructeur
import * as THREE from 'three';
declare var require: any;
const OBJLoader = require('three-obj-loader')(THREE);
Je peux dessiner toutes les formes, l'utilisation des lumières et des ombres, mais ne peut pas charger maille à partir du fichier obj externe . J'ai essayé beaucoup de variations qui ressemble à ceci:
const manager = new THREE.LoadingManager();
const loader = new THREE.OBJLoader(manager);
loader.load('./working/path/to/file.obj', function (object) {
object.position.x = 0;
object.position.y = 0;
object.scale.x = 10;
object.scale.y = 10;
object.scale.z = 10;
const texture = THREE.TextureLoader('./working/path/to/file.jpg');
const material = new THREE.MeshLambertMaterial({ map: texture });
const mesh = new THREE.Mesh(object, material);
scene.add(mesh);
});
Je ne sais pas pourquoi, mais lorsque je tente de obj charger à partir du fichier, je reçois une erreur de la console:
TypeError: undefined is not a constructor (evaluating 'new THREE.FileLoader(scope.manager)')
et la toile est erronée.Le erreur se réfère à la ligne 49 du module "three-obj-loader" que j'ai installé from here. La partie de ce code tiers mentionné est:
THREE.OBJLoader.prototype = {
constructor: THREE.OBJLoader,
load: function load(url, onLoad, onProgress, onError) {
var scope = this;
var loader = new THREE.FileLoader(scope.manager);
loader.setPath(this.path);
loader.load(url, function (text) {
onLoad(scope.parse(text));
}, onProgress, onError);
},
Je ne sais pas si elle pourrait être liée, mais je ne pas installé ou déclaré des types spéciaux pour ces modules, en utilisant uniquement les fichiers source JS plaine. De plus, je n'ai installé aucun chargeur de fichiers.
REMARQUE: J'ai essayé d'implémenter OBJLoader2 à partir de here mais j'ai obtenu le même résultat.
Nous vous remercions de vos conseils.
Meilleur k
OK, donc je comparais les fichiers source Three.js que vous pouvez obtenir via NPM avec le paquet zip actuel (dev) sur Github. Il me semble que NPM sert r77, mais le dev est r85. Il y a des différences significatives.Pour nommer un frappant est que le paquet de NPM manque de référence à FileLoader et il n'y a aucun fichier source pour FileLoader ... cela semble raisonnable, étant donné l'erreur que je reçois ... eh bien, je ne vois pas profondément dans le tissu de Three.js , donc c'est un peu difficile pour moi de réécrire cette source dans le module que j'utilise ou de faire du paquet dev travaillant avec mon projet (mon mauvais, je devrais apprendre ça ...). – Kristievnee
Juste une note, je viens de tirer 'three-js' de' npm' et j'ai obtenu r79. Il ne contenait pas 'THREE.FileLoader', donc il doit y avoir une correspondance entre la version de' three-js' et la version de 'three-obj-loader' hébergée dans' npm'. – TheJim01
Merci pour la note. C'est intéressant. Quelle commande avez-vous utilisé? Quand je fais une installation simple sans drapeau, je reçois r77 (v0.77.1) et quand je l'essaye avec @latest ou @^0.79.0 je reçois: "npm ERR! Notarget Cibles d'installation valides: npm ERR! Notarget 0.0. 1, 0.0.2, 0.1.0, 0.72.0, 0.73.0, 0.73.2, 0.77.0, 0.77.1 "... – Kristievnee