【问题标题】:Cannot display Object in ThreeJS. Getting error: THREE.OBJLoader: Unexpected line: "usemap glass"无法在 ThreeJS 中显示对象。出现错误:THREE.OBJLoader:意外行:“usemap glass”
【发布时间】:2019-11-26 03:30:27
【问题描述】:

在 Angular 8 应用程序中运行 threejs 时出现此错误。我只是想加载一个对象。对象和材料文件是从Kenney assets 下载的。我查看了官方的threejs 站点示例,就像this example,以及其他一些在线示例。代码是:

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。

与此问题相关的唯一问题是this堆栈溢出问题中的问题。

javascript 渲染良好,除此之外,所有其他网格(简单的,CubeGeometry p.e.)都出现在正确的位置,除了这个。

任何帮助,将不胜感激:)

【问题讨论】:

  • 我正在尝试修补 OBJLoader 以使其更加健壮。我会及时通知你;)

标签: javascript angular three.js


【解决方案1】:

R111 开始,THREE.OBJLoader 现在能够解析包含usemap 渲染标识符的OBJ 文件。但是,标识符将被忽略,因为纹理通常在 MTL 文件中定义。请注意,usemap 是旧式 Wavefront 纹理参考方法。

您提到的资产现在应该可以正确加载了。

相关公关:https://github.com/mrdoob/three.js/pull/18000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2016-03-11
    • 2017-03-16
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多