Three.js加载外部模型的教程详解


Posted in Javascript onNovember 10, 2017

1.  首先我们要在官网: https://threejs.org/ 下载我们three.js压缩包,并将其中的build文件夹下的three.js通过script标签对的src属性导入到我们的页面中

2.  创建three.js核心对象

Scene(场景)

Camera(相机)

Light(光源)

Mesh(模型)

Renderer(渲染器)

最后一步就是渲染显示在我们的页面上了renderer.render(scene,camera)

3.  OBJ模型的导入

<script type="text/javascript" src="js/OBJLoader.js"></script>
 <script type="text/javascript" src="js/MTLLoader.js"></script>

Three.js加载外部模型的教程详解

4.  .JS模型的导入

首先我们需要将.OBJ模型的文件转换成.JS文件的模型

.obj格式转.js格式使用的是threejs.org官方提供的一个convert_obj_three.py的工具,这个工具的使用需要安装python环境

转换过程:

    将convert_obj_three.py和要转换的.obj文件和.mtl文件放在同一个目录下

Three.js加载外部模型的教程详解

打开cmd,切换到对应的目录下

python convert_obj_three.py -i infile.obj -o outfile.js [-t ascii|binary]

    可以得到两种编码方式的.js文件(二进制binary和ascii)

出现的问题,转换格式的问题:

   打开.obj文件,

Three.js加载外部模型的教程详解

将mtllib关键字后面改成 .mtl文件相对于.obj文件的路径

Three.js加载外部模型的教程详解

将文件中的这些?改成字母,乱码

Three.js加载外部模型的教程详解

.mtl文件中的newmtl 关联到.obj文件中

Three.js加载外部模型的教程详解

这是.obj文件中的

5.  准备导入

Ascii

Three.js加载外部模型的教程详解

Binary

需要导入

<script src="js/BinaryLoader.js"></script>

Three.js加载外部模型的教程详解

PS:three.js 外部模型加载json

用blender做模型可以直接导出json文件(导出插件可以从three.js包里找到)。从网上下载模型,网上的模型很多事3ds max做的,我就用3ds max把模型格式转换成obj,再导入blender处理好模型后导出json文件。

导出json文件时选项勾选如果选择了SCENE可连灯光一同导出加载时需要用ObjectLoader

var loader = new THREE.ObjectLoader(); 
loader.load('youscene1.json',function(obj){ 
  obj.scale.x = obj.scale.y = obj.scale.z =100; 
  scene.add(obj); 
});

导出json文件时如果不勾选scene,需要页面中添加灯光否则模型全黑,加载时用JSONLoader

var loader = new THREE.JSONLoader(); 
      loader.load( "noscene.json",function( geometry, materials ) { 
        materials[ 0 ].shading = THREE.FlatShading; 
        mesh = new THREE.Mesh( geometry, new THREE.MultiMaterial( materials ) ); 
        mesh.position.x = 0; 
        mesh.position.y = 0; 
        mesh.position.z = 0; 
        mesh.scale.x = mesh.scale.y = mesh.scale.z =100; 
        scene.add( mesh ); 
      });

总结

以上所述是小编给大家介绍的Three.js加载外部模型的教程详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
document.all与WEB标准
May 13 Javascript
推荐dojo学习笔记
Mar 24 Javascript
js判断变量是否空值的代码
Oct 26 Javascript
javascript的offset、client、scroll使用方法详解
Dec 25 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
用jquery实现输入框获取焦点消失文字
Apr 27 Javascript
JavaScript实现拖拽网页内元素的方法
Apr 15 Javascript
canvas实现探照灯效果
Feb 07 Javascript
详解Angular-Cli中引用第三方库
May 21 Javascript
js自定义弹框插件的封装
Aug 24 Javascript
在weex中愉快的使用scss的方法步骤
Jan 02 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 #Javascript
three.js加载obj模型的实例代码
Nov 10 #Javascript
vue router-link传参以及参数的使用实例
Nov 10 #Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
Nov 10 #Javascript
js+html获取系统当前时间
Nov 10 #Javascript
vue2 router 动态传参,多个参数的实例
Nov 10 #Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
Nov 10 #Javascript
You might like
Oracle Faq(Oracle的版本)
2006/10/09 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
javascript下function声明一些小结
2007/12/28 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
JS前端笔试题分析
2016/12/19 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
JS实现带阴历的日历功能详解
2019/01/24 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
python的id()函数解密过程
2012/12/25 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
中英双版中文教师求职信
2013/10/27 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
Java中API的使用方法详情
2022/04/06 Java/Android