如何从 cdn THREE.js 加载 GLTFLoader
How do I load GLTFLoader from a cdn THREE.js
我在弄清楚如何让 GLTFLoader 在 THREE.js 中工作时遇到了一些问题。我不明白如何使用 cdn 站点来托管文件。我曾尝试使用网络示例中的 links,但这并没有为我完成工作。我在另一个 post 上读到,GLTFLoader 文件必须与我正在使用的核心三个文件 (r121) 的版本相同。
我想我可以去 mrdoob github(不熟悉如何使用 github)并单击原始文件然后在像 githack 这样的网站上使用那个 link 生成一个cdn link 并将其作为脚本添加到我的 html 中,或者将其导入到我的 js 文件中,但这没有用。
如果这是这样做的方法,那么它就不起作用了。在我输入时的代码中:
let loader = new GLTFLoader(); //from the docs
//or
let loader = new THREE.GLTFLoader(); //not from the docs
我遇到以下两个错误之一:
未捕获的 ReferenceError:未定义 GLTFLoader
要么
未捕获的类型错误:THREE.GLTFLoader 不是构造函数
我已经在这里待了几个小时了,不知道该怎么做。
CodePenhttps://codepen.io/jfirestorm44/pen/RwRPJda?editors=0010
我正在关注的教程(如果重要的话):
https://tympanus.net/codrops/2019/10/14/how-to-create-an-interactive-3d-character-with-three-js/
确保 three.js 和 GLTFLoader 在 html 文件中的导入放置在您自己的脚本之前。我喜欢将自己的脚本放在 html 文件的最底部。
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r121/three.min.js" integrity="sha512-yNJzAsg5JyP91u+sLHlUDULMBd3hmEiVkYeeN1cQBKaLZ7EyT6oH2u5THNIRM2Fu6VKcZJv+F/QAp1h/qzy9Ow==" crossorigin="anonymous"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/GLTFLoader.js"></script>
更新:上面的cdnlink会一直指向最新的GLTFLoader,可能不向后兼容。请改用特定标签:
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r126/three.min.js" integrity="sha512-n8IpKWzDnBOcBhRlHirMZOUvEq2bLRMuJGjuVqbzUJwtTsgwOgK5aS0c1JA647XWYfqvXve8k3PtZdzpipFjgg==" crossorigin="anonymous"></script>
<script src="https://unpkg.com/three@0.126.0/examples/js/loaders/GLTFLoader.js"></script>
在您的脚本中您不需要额外的导入,只需调用加载程序
const gltfLoader = new THREE.GLTFLoader();
换句话说,如果您使用上面提供的 html 导入,则以下代码是多余的。
import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.121.1/build/three.module.js";
import { GLTFLoader } from "https://cdn.jsdelivr.net/npm/three@0.121.1/examples/jsm/loaders/GLTFLoader.js";
工作示例:
index.html
<!DOCTYPE html>
<html>
<head>
<!-- CSS imports-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r126/three.min.js" integrity="sha512-n8IpKWzDnBOcBhRlHirMZOUvEq2bLRMuJGjuVqbzUJwtTsgwOgK5aS0c1JA647XWYfqvXve8k3PtZdzpipFjgg==" crossorigin="anonymous"></script>
<script src="https://unpkg.com/three@0.126.0/examples/js/loaders/GLTFLoader.js">
</head>
<body>
<!-- body -->
</body>
<script type="text/javascript" src="/static/myscript.js"></script>
</html>
myscript.js
const gltfLoader = new THREE.GLTFLoader();
cdnjs.com 和 skypack.dev 网址已过时。如果您没有使用 ES6 模块或任何构建工具,如 webpack,请参考此答案 。
我在弄清楚如何让 GLTFLoader 在 THREE.js 中工作时遇到了一些问题。我不明白如何使用 cdn 站点来托管文件。我曾尝试使用网络示例中的 links,但这并没有为我完成工作。我在另一个 post 上读到,GLTFLoader 文件必须与我正在使用的核心三个文件 (r121) 的版本相同。
我想我可以去 mrdoob github(不熟悉如何使用 github)并单击原始文件然后在像 githack 这样的网站上使用那个 link 生成一个cdn link 并将其作为脚本添加到我的 html 中,或者将其导入到我的 js 文件中,但这没有用。
如果这是这样做的方法,那么它就不起作用了。在我输入时的代码中:
let loader = new GLTFLoader(); //from the docs
//or
let loader = new THREE.GLTFLoader(); //not from the docs
我遇到以下两个错误之一: 未捕获的 ReferenceError:未定义 GLTFLoader 要么 未捕获的类型错误:THREE.GLTFLoader 不是构造函数
我已经在这里待了几个小时了,不知道该怎么做。
CodePenhttps://codepen.io/jfirestorm44/pen/RwRPJda?editors=0010
我正在关注的教程(如果重要的话): https://tympanus.net/codrops/2019/10/14/how-to-create-an-interactive-3d-character-with-three-js/
确保 three.js 和 GLTFLoader 在 html 文件中的导入放置在您自己的脚本之前。我喜欢将自己的脚本放在 html 文件的最底部。
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r121/three.min.js" integrity="sha512-yNJzAsg5JyP91u+sLHlUDULMBd3hmEiVkYeeN1cQBKaLZ7EyT6oH2u5THNIRM2Fu6VKcZJv+F/QAp1h/qzy9Ow==" crossorigin="anonymous"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/GLTFLoader.js"></script>
更新:上面的cdnlink会一直指向最新的GLTFLoader,可能不向后兼容。请改用特定标签:
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r126/three.min.js" integrity="sha512-n8IpKWzDnBOcBhRlHirMZOUvEq2bLRMuJGjuVqbzUJwtTsgwOgK5aS0c1JA647XWYfqvXve8k3PtZdzpipFjgg==" crossorigin="anonymous"></script>
<script src="https://unpkg.com/three@0.126.0/examples/js/loaders/GLTFLoader.js"></script>
在您的脚本中您不需要额外的导入,只需调用加载程序
const gltfLoader = new THREE.GLTFLoader();
换句话说,如果您使用上面提供的 html 导入,则以下代码是多余的。
import * as THREE from "https://cdn.jsdelivr.net/npm/three@0.121.1/build/three.module.js";
import { GLTFLoader } from "https://cdn.jsdelivr.net/npm/three@0.121.1/examples/jsm/loaders/GLTFLoader.js";
工作示例:
index.html
<!DOCTYPE html>
<html>
<head>
<!-- CSS imports-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r126/three.min.js" integrity="sha512-n8IpKWzDnBOcBhRlHirMZOUvEq2bLRMuJGjuVqbzUJwtTsgwOgK5aS0c1JA647XWYfqvXve8k3PtZdzpipFjgg==" crossorigin="anonymous"></script>
<script src="https://unpkg.com/three@0.126.0/examples/js/loaders/GLTFLoader.js">
</head>
<body>
<!-- body -->
</body>
<script type="text/javascript" src="/static/myscript.js"></script>
</html>
myscript.js
const gltfLoader = new THREE.GLTFLoader();
cdnjs.com 和 skypack.dev 网址已过时。如果您没有使用 ES6 模块或任何构建工具,如 webpack,请参考此答案 。