为什么做这个组件

我经常听到前端朋友们抱怨,在网页上展示三维模型太麻烦了。但是这方面的需求又有很多,例如做房地产的需要展示户型、卖汽车的需要展示汽车模型等。

在网页上展示三维模型就只能用WebGL技术了(别跟我说Flash和其他非标准插件啦),但是WebGL编程和JS区别太大,最好的方式大概是使用在WebGL基础上封装的库,例如three.js,但是three.js的学习成本也非常高,并且坑非常多。

所以我就开始做这个组件,目的只有一个:用最简单的方式来解决三维模型展示的需求

解决了哪些问题

当一个新手试图用three.js来展示一个模型(这一般是经过了数天的学习以后),他通常不会一开始就得到自己想要的结果。要么模型是一片黑色,或者模型根本就看不到。这里实际上有三个问题:

  1. 建模软件或软件配置的区别,导致模型尺寸的单位不统一,需要手动调节参数放大或者缩小
  2. 模型可能偏移了中心点,导致可视范围内看不到模型
  3. 没有给模型合适的光照

这些看似简单的问题实际上并不容易解决。即使解决了这些问题,还有更大的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:用简单的方式来展示三维模型的更多相关文章

  1. vue组件通信的几种方式

    最近用vue开发项目,记录一下vue组件间通信几种方式 第一种,父子组件通信 一.父组件向子组件传值 1.创建子组件,在src/components/文件夹下新建一个Child.vue 2.Child ...

  2. vue.js最最最最简单实例

    vue.js最最最最简单实例 一.总结 一句话总结: 1.vue.js实现实现数据的双向绑定用的是什么标记? 双大括号:比如{{message}} 2.vue数据循环输出的标记是什么? 用的是标签的v ...

  3. WPF 3D model - Sphere, Cone, and Cylinder

    原文:WPF 3D model - Sphere, Cone, and Cylinder   Extending Visual3D - Sphere, Cone, and Cylinder http: ...

  4. Vue中组件间通信的方式

    Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...

  5. 总结Vue第一天:简单介绍、基本常用知识、辅助函数

    总结Vue第一天:简单介绍.基本常用知识.辅助函数 中文官网:https://cn.vuejs.org/v2/guide/syntax.html 遇到不熟悉的可以先看一下官网,然后再看一下一些别人写的 ...

  6. ShapeNet: An Information-Rich 3D Model Repository 阅读笔记

    ShapeNet: An Information-Rich 3D Model Repository 注:本论文只是讲述数据库建立方法 摘要 ShapeNet是一个有丰富注释的大型形状存储库,由对象的3 ...

  7. java最简单的方式实现httpget和httppost请求

    java实现httpget和httppost请求的方式多种多样,个人总结了一种最简单的方式,仅仅需几行代码,就能够完美的实现. 此处须要用到两个jar包,httpclient-4.3.1.jar.ht ...

  8. Make3D Convert your image into 3d model

    Compiling and Running Make3D on your own computer source: http://make3d.cs.cornell.edu/code_linux.ht ...

  9. 以最简单的方式讲HashMap

      以最简单的方式讲HashMap HashMap可以说是面试中最常出现的名词,这次头条的一面,第一个问的问题就是HashMap.所以就让我们来探讨下HashMap吧. 实验环境:JDK1.8 首先先 ...

随机推荐

  1. Elasticsearch:hanlp 中文分词器

    HanLP 中文分词器是一个开源的分词器,是专为Elasticsearch而设计的.它是基于HanLP,并提供了HanLP中大部分的分词方式.它的源码位于: https://github.com/Ke ...

  2. gd_t结构 bd_t结构

    gd_t在u-boot-2018.07-fmxx/include/asm-generic/global_data.h中定义 typedef struct global_data {    bd_t * ...

  3. python中字符串格式化的两种方法

    知识点汇总;1-字符串格式化输出方法一: % 1-print('名字是 %s,年龄是%s' % (name ,age)) 2- %s ---字符串-----相当于执行了str() 3- (name , ...

  4. 上传图片,正在加载,loading

    https://blog.csdn.net/yansong_8686/article/details/50361573

  5. WPF选项卡页面分离之Page调用Window类

    此项目源码下载地址:https://github.com/lizhiqiang0204/WPF_PageCallWindow 如果Page与Window直接没有任何调用就用这种方法https://ww ...

  6. Python 3标准库课件第一章(第二版)

    第一章文本1.1 string:文本常量和模板1.2 textwrap:格式化文本段落1.3 re:正则表达式1.4  difflib:比较序列str类,string.Templatetextwrap ...

  7. Python 3标准库第一天讲解总结

    一.很多知识自己没有理解透: 二.课件准备不足: 三.第一次讲解有点紧张: 四.口才也不是很好,很多有断片的情况: 五.SB式的坚持:

  8. 【转】Linux逻辑卷管理

    一. 前言 LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性.L ...

  9. 【NOIP2016提高A组模拟8.15】Password

    题目 分析 首先我们知道,原A序列其实表示一个矩阵,而这个矩阵的对角线上的数字就是答案B序列. 接着\(a.b>=gcd(a,b)\),所以序列A中的最大的数就是ans[1],第二大的数就是an ...

  10. WIN 7 的vs2008 试用版评估期结束的解决方法

    1. 在VS2008安装目录下把Setup/setup.sdb文件中的 [Product Key] T2CRQGDKBVW7KJR8C6CKXMW3D 改成 [Product Key] PYHYPWX ...