如何用three.js加载VRML(.wrl)模型?代码加载失败求助
首先看你遇到的报错信息:
Failed to load file:///C:/Users/ninom/Desktop/takahiro_note/3DJS/Bluegg/Bluegg/Bluegg.wrl: Cross origin requests are only supported for protocol schemes: http,...
这个问题的核心原因很明确——你直接用浏览器打开本地HTML文件(也就是file://协议),浏览器的安全策略会阻止这种本地文件的加载请求,因为file://不在浏览器允许跨域请求的协议列表里(只有http/https/ftp这类协议才被支持)。
接下来给你几个解决步骤和需要检查的点:
启动本地HTTP服务器
这是解决这类本地文件跨域问题最常用的方法。你可以用以下几种简单的方式:- 如果装了Python 3,在你的项目根目录(也就是包含HTML文件的那个文件夹)打开命令行,运行:
python -m http.server 8000,然后在浏览器里访问http://localhost:8000来打开你的页面。 - 如果用Node.js,先全局安装
http-server工具:npm install -g http-server,然后在项目根目录运行http-server,按照命令行提示的地址(比如http://localhost:8080)访问页面。
- 如果装了Python 3,在你的项目根目录(也就是包含HTML文件的那个文件夹)打开命令行,运行:
检查VRMLLoader的引入是否正确
Three.js的核心库并没有包含VRMLLoader,它属于扩展加载器,需要你单独引入对应的文件。比如你如果用的是ES6模块,要引入examples/jsm/loaders/VRMLLoader.js;如果是传统的脚本引入,要确保在Three.js核心脚本之后加载VRMLLoader的脚本文件。这一步如果没做好,也可能导致加载器无法正常工作(不过你的当前报错是跨域,先解决这个,之后如果还有问题再排查这个)。核对文件路径
确认./Bluegg/Bluegg/Bluegg.wrl这个路径相对于你的HTML文件的位置是正确的。启动HTTP服务器后,路径是相对于服务器根目录的,所以要保证模型文件的层级和你写的路径匹配。
另外,你的代码里alert(object)其实只会弹出[object Object],没什么实际调试价值,建议换成console.log(object),这样可以在浏览器控制台里查看加载后的模型对象详情,方便后续调试。
内容的提问来源于stack exchange,提问作者Tak

