在 angular 8 应用程序中运行 threejs 时出现此错误。我只是想加载一个对象。对象和材质文件是从肯尼资产下载的。我已经查看了官方的 threejs 网站示例,就像这个示例一样,以及在线的其他一些示例。代码为:
import * as THREE from "three";
import {MTLLoader} from "three/examples/jsm/loaders/MTLLoader";
import {OBJLoader} from "three/examples/jsm/loaders/OBJLoader";
new MTLLoader()
.load('./../../../../../assets/Models/buildingCorridorOpen.mtl', function (materials) {
materials.preload();
new OBJLoader()
.load('./../../../../../assets/Models/buildingCorridorOpen.obj', function (mesh) {
mesh.position.set(0, 0.5, 0);
scene.add(mesh);
});
});
完整的错误如下:
core.js:6014 ERROR Error: THREE.OBJLoader: Unexpected line: "usemap _defaultMat"
at OBJLoader.parse (OBJLoader.js:633)
at Object.onLoad (OBJLoader.js:402)
at XMLHttpRequest.<anonymous> (three.module.js:35663)
at ZoneDelegate.invokeTask (zone-evergreen.js:391)
at Object.onInvokeTask (core.js:39680)
at ZoneDelegate.invokeTask (zone-evergreen.js:390)
at Zone.runTask (zone-evergreen.js:168)
at ZoneTask.invokeTask [as invoke] (zone-evergreen.js:465)
at invokeTask (zone-evergreen.js:1603)
at XMLHttpRequest.globalZoneAwareCallback (zone-evergreen.js:1640)
项目结构如下:
ClientApp
|_____src
| |____component
| |______ev
| |___factory
| |____js
| |__application.js
|____assets
| |___Models
| |____buildingCorridorOpen.mtl
| |____buildingCorridorOpen.obj
我尝试按如下方式导入加载器,但结果相同:
import {MTLLoader} from "three-obj-mtl-loader";
import {OBJLoader} from "three-obj-mtl-loader";
我也尝试了 .setpath(( 和 load((,但结果是一样的,同样的错误,我使用的是 npm 版本:6.12.1,节点版本:12.13.1。
与此问题相关的唯一问题是此堆栈溢出问题中的问题。
javascript渲染得很好,除此之外,所有其他网格(简单的网格,CubeGeometry p.e.(都出现在正确的位置,除了这个。
任何帮助,将不胜感激:)
从R111
开始,THREE.OBJLoader
现在可以解析包含usemap
渲染标识符的OBJ
文件。但是,标识符将被忽略,因为纹理通常在 MTL 文件中定义。请注意,usemap
是旧式波前纹理参考方法。
您提到的资产现在应该正确加载。
相关公关: https://github.com/mrdoob/three.js/pull/18000