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 相关文章推荐
js 页面输出值
Nov 30 Javascript
JavaScript DOM学习第八章 表单错误提示
Feb 19 Javascript
关于Javascript 对象(object)的prototype
May 09 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
Mar 27 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
ES6中新增的Object.assign()方法详解
Sep 22 Javascript
Vue项目移动端滚动穿透问题的实现
May 19 Javascript
js删除指定位置超链接中含有百度与360的标题
Jan 06 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
js charAt的使用示例
2014/02/18 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
pymongo中group by的操作方法教程
2019/03/22 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
幼儿教师年度个人总结
2015/02/05 职场文书
数学复习课教学反思
2016/02/18 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书