【问题标题】:Why can't I seem to import the OBJLoader module for Three.js?为什么我似乎无法为 Three.js 导入 OBJLoader 模块?
【发布时间】:2022-01-09 01:31:15
【问题描述】:

我在这个问题上被难住了好几天。我似乎无法为 Three.js 导入 OBJLoader。这显然很重要,因为我想要在我的游戏中自定义 3D 模型。


我有两条错误消息:

未捕获的类型错误:无法解析模块说明符“three-obj-loader”。相对引用必须以“/”、“./”或“../”开头。

加载资源失败:服务器响应状态为 404(未找到)


import {OBJLoader} from 'three-obj-loader'

// load a resource
loader.load(

    // resource URL
    '/Users/dmitri/Desktop/flame/models/fresh_fire_01 (1).obj',
    // called when resource is loaded
    function ( object ) {

        scene.add( object );
    },

    // called when loading is in progresses
    function ( xhr ) {

        console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
    },

    // called when loading has errors
    function ( error ) {

        console.log( 'An error happened' );
    }
);

// const loader = new OBJLoader()
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000)
const renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0xffffff)

renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// loader.load("/Users/dmitri/Desktop/flame/models/fresh_fire_01
(1).obj",
function(object){
    //     scene.add(object)
    // })

    var run = function() {
    requestAnimationFrame(run);
    renderer.render(scene, camera)
}
run()

这是我的 HTML 代码:

<html>
<head>
    <style>
        body{
            margin: 0;
            padding: 0;
        }
    </style>
</head>

<body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/87/three.min.js">.
    </script>

    <script src="/script.js" type="module"></script>
</body>

</html>

这是我的 app.js 源代码:

const express = require("express");
var app = express();

app.set("port", process.env.PORT || 8080)

app.use(express.static("public"))

app.listen(app.get("port"), function() {
    return
})

这是我的文件结构:


型号

--fresh-fire-01 (1).obj

公开

--index.html

--script.js

app.py


我已经尝试了所有我能想到的解决方案。我将 OBJLoader 的源代码放在我的目录中。我要求它。我什至将 OBJLoader 源代码放在我的 script.js 源代码中。似乎没有任何效果。

【问题讨论】:

  • 关注this 并将其他回调添加到load() 方法中。错误回调可能会为您提供更多关于它为什么不起作用的线索
  • 它仍然返回两个错误 ------------------------- ------------------------------------------------------- 未捕获的类型错误:无法解析模块说明符“三个 obj-loader”。相对引用必须以“/”、“./”或“../”开头。 -------------------------------------------------- ------------------ 加载资源失败:服务器响应状态为 404(未找到)
  • 那里,我刚刚更新了帖子,以便您可以看到我的问题。您提到的问题实际上并不是我正在处理的问题,只需查看文档就可以轻松避免。但我真的不知道我做了什么,我在任何地方的任何文件上都找不到它
  • 你在使用 webpack 吗?
  • 文档是here。您正在通过 CDN/static 运行 three.js,但如果您使用的是 npm 构建工具,则尝试加载 OBJLoader。

标签: javascript three.js


【解决方案1】:

Three.js 有自己的 OBJLoader。最好使用本机加载程序而不是第三方。 如果您查看“three-obj-loader”,您会发现它已经过时了。 4年前最后一次更新。 所以,尝试从three.js库中导入OBJLoader

变化:

import {OBJLoader} from 'three-obj-loader'

到:

import {OBJLoader} from 'three/examples/jsm/loaders/OBJLoader.js'

【讨论】:

  • 欢迎来到 Stack Overflow _ 一个“好的答案”还包括一两句话以纯文本形式解释您认为您的解决方案可行的原因。您应该编辑您的答案以涵盖这一点。请访问 SO 帮助中心,特别是本指南以获取更多详细信息 >>> stackoverflow.com/help/how-to-answer
  • @inputforcolor,现在可以了吗?
  • 我已经对你的回答投了赞成票 Valerian _ Welcome again ; )
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2021-12-21
  • 2016-05-21
  • 1970-01-01
相关资源
最近更新 更多