Vue-3D-Model:用简单的方式来展示三维模型
为什么做这个组件
我经常听到前端朋友们抱怨,在网页上展示三维模型太麻烦了。但是这方面的需求又有很多,例如做房地产的需要展示户型、卖汽车的需要展示汽车模型等。
在网页上展示三维模型就只能用WebGL技术了(别跟我说Flash和其他非标准插件啦),但是WebGL编程和JS区别太大,最好的方式大概是使用在WebGL基础上封装的库,例如three.js,但是three.js的学习成本也非常高,并且坑非常多。
所以我就开始做这个组件,目的只有一个:用最简单的方式来解决三维模型展示的需求
解决了哪些问题
当一个新手试图用three.js来展示一个模型(这一般是经过了数天的学习以后),他通常不会一开始就得到自己想要的结果。要么模型是一片黑色,或者模型根本就看不到。这里实际上有三个问题:
- 建模软件或软件配置的区别,导致模型尺寸的单位不统一,需要手动调节参数放大或者缩小
- 模型可能偏移了中心点,导致可视范围内看不到模型
- 没有给模型合适的光照
这些看似简单的问题实际上并不容易解决。即使解决了这些问题,还有更大的BOSS等着你:
你可能需要通过鼠标来旋转模型,或者通过滚轮来放大缩小。或者更进一步,你需要知道鼠标点击时,是否点中了模型,点中的是哪个部分。
这些都是听起来就很头疼的问题,要解决他们你至少需要有一定的图形学知识,或者对three.js的各种类了如指掌。
现在这些问题都被Vue-3D-Model解决了,如果你已经会使用vue(不会的话可以花几个小时学习一下),那么只需要短短几行代码就可以解决这些问题了:
<body>
<div id="app">
<model-obj src="static/model.obj"></model-obj>
</div>
<script src="vue.js"></script>
<script src="vue-3d-model.min.js"></script>
<script>
new Vue({
el: '#app'
})
</script>
</body>

它会自动将模型以合适的大小显示出来,如果模型偏离了中心点也会自动校正。并且直接就可以通过鼠标来旋转和缩放了。这是一个在线的例子(墙内可能加载比较慢):DEMO
当然,你也可以通过给组件传入参数来手动调节。更详细的使用方式可以在github上看到。
接下来要做的事
目前组件只支持OBJ格式以及three.js的JSON格式,后面马上就会支持dae、stl、fbx等格式的模型了。
文档和示例我也会找时间继续补充的,如果有问题或者其他需求,也可以来提issue。
作者:hujiulong
链接:https://www.jianshu.com/p/c093ff00ea1b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Vue-3D-Model:用简单的方式来展示三维模型的更多相关文章
- vue组件通信的几种方式
最近用vue开发项目,记录一下vue组件间通信几种方式 第一种,父子组件通信 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue 2.Child ...
- vue.js最最最最简单实例
vue.js最最最最简单实例 一.总结 一句话总结: 1.vue.js实现实现数据的双向绑定用的是什么标记? 双大括号:比如{{message}} 2.vue数据循环输出的标记是什么? 用的是标签的v ...
- WPF 3D model - Sphere, Cone, and Cylinder
原文:WPF 3D model - Sphere, Cone, and Cylinder Extending Visual3D - Sphere, Cone, and Cylinder http: ...
- Vue中组件间通信的方式
Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...
- 总结Vue第一天:简单介绍、基本常用知识、辅助函数
总结Vue第一天:简单介绍.基本常用知识.辅助函数 中文官网:https://cn.vuejs.org/v2/guide/syntax.html 遇到不熟悉的可以先看一下官网,然后再看一下一些别人写的 ...
- ShapeNet: An Information-Rich 3D Model Repository 阅读笔记
ShapeNet: An Information-Rich 3D Model Repository 注:本论文只是讲述数据库建立方法 摘要 ShapeNet是一个有丰富注释的大型形状存储库,由对象的3 ...
- java最简单的方式实现httpget和httppost请求
java实现httpget和httppost请求的方式多种多样,个人总结了一种最简单的方式,仅仅需几行代码,就能够完美的实现. 此处须要用到两个jar包,httpclient-4.3.1.jar.ht ...
- Make3D Convert your image into 3d model
Compiling and Running Make3D on your own computer source: http://make3d.cs.cornell.edu/code_linux.ht ...
- 以最简单的方式讲HashMap
以最简单的方式讲HashMap HashMap可以说是面试中最常出现的名词,这次头条的一面,第一个问的问题就是HashMap.所以就让我们来探讨下HashMap吧. 实验环境:JDK1.8 首先先 ...
随机推荐
- CPU、CPU核与线程的关系
CPU相关概念: CPU:独立的中央处理单元,体现在主板上是有多个CPU的插槽. CPU cores:在每一个CPU上,都可能有多个核(core),每一个核中都有独立的一套ALU.FPU.Cache等 ...
- 操作系统——HugePage
TLB:页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令.数据需要访问两次内存:首先通过查询页表得到物理地址,然后访问该物理地址读取指令.数据.为了减少因为MMU导致的处理器性能下降 ...
- tensorflow 中 name_scope和variable_scope
import tensorflow as tf with tf.name_scope("hello") as name_scope: arr1 = tf.get_variable( ...
- 树莓派开机自动启动Chomium浏览器并打开指定网页
树莓派开机自动启动Chomium浏览器并打开指定网页 cd /home/pi/.config mkdir autostart cd autostart vi my.desktop [Desktop E ...
- layui table 改
F.prototype.pullData = function(e) { success: function (t) { var da001 = i; window.getdata1234567(da ...
- 把数据存储到 XML 文件
通常,我们在数据库中存储数据.不过,如果希望数据的可移植性更强,我们可以把数据存储 XML 文件中. 创建并保存 XML 文件 如果数据要被传送到非 Windows 平台上的应用程序,那么把数据保存在 ...
- 【BZOJ4565】 [Haoi2016]字符合并
Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字 符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. I ...
- ubuntu 安装 tar.gz 文件
ubuntu 安装 tar.gz 文件 本文链接:https://blog.csdn.net/caloriesung/article/details/81536144 tar zxvf FileNam ...
- matlab中句柄@的用法
@是Matlab中的句柄函数的标志符,即间接的函数调用方法. 1 句柄函数 主要有两种语法: handle = @functionname handle = @(arglist)anonymous_f ...
- 序列式容器————dequeue
#include <deque> 双端队列,可以在队头队尾进行入队出队操作 deque<int> q; q.empty(); q.push_front(s);//将s插入到队头 ...