简介

最近突然想做基于H5的AR应用,记录下学习过程

开始AR项目之前,首先从选择3D框架开始,老牌引擎 Three.js 和微软的 Babylon.js 都不错,因为我们需要用到 AR.js,而AR.js的核心就包含Three.js。

AR.js的核心部分

  • artoolkit5 https://github.com/artoolkit/artoolkit5
  • three.js https://threejs.org

要学习AR.js,对于Three.js需要有一定的掌握,所以今天我们来了解一下Three.js

Three.js 基础概念

使用 Three.js 前,首先要理解以下几个核心概念:

Sence 场景

在 Three.js 中首先需要创建一个三维空间,我们称之为场景。场景可以想象成是一个容器,里面存放着所有渲染的物体和使用的光源。

Axes 坐标轴

Three.js 采用的是右手坐标系,拇指、食指、中指分别表示 X、Y、Z 轴的方向。

Camera 摄像机

摄像机就相当于我们的双眼,决定了能够在场景中的所见所得。
Three.js 中提供以下几种摄像机类型,最为常用的是透视摄像机,其他了解下即可。

ArrayCamera 阵列摄像机

一个 ArrayCamera 会包含多个子摄像机,通过这一组子摄像机渲染出实际效果,适用于 VR 场景。

CubeCamera 立方摄像机

创建六个 PerspectiveCamera(透视摄像机),适用于镜面场景。

StereoCamera 立体相机

双透视摄像机适用于 3D 影片、视差效果。

OrthographicCamera 正交摄像机

OrthographicCamera(正交摄像机)定义了一个矩形可视区域,物体只有在这个区域内才是可见的,另外物体无论距离摄像机是远或事近,物体都会被渲染成一个大小,所以这种摄像机类型适用于 2.5D 场景(例如斜 45 度游戏)

PerspectiveCamera 透视摄像机

最为常用的摄像机类型,模拟人眼的视觉,根据物体距离摄像机的距离,近大远小。默认情况下,摄像机的初始位置 X、Y、Z 都为 0,摄像机方向是从正 Z 轴向负 Z 轴看去。通过 Near和 Far 定义最近和最远的可视距离,Fov 定义可视的角度。

Mesh 网格

有了场景和摄像头就可以看到 3D 场景中的物体,场景中的我们最为常用的物体称为网格。

网格由两部分组成:几何体和材质

Geometry 几何体

记录了渲染一个 3D 物体所需要的基本数据:Face 面、Vertex 顶点等信息。

例如下面这个网格是由三角形组成,组成三角形的点称为顶点,组成的三角形称为面。

Material 材质

材质就像是物体的皮肤,决定了几何体的外表。
外表的定义可以让一个物体看起来是否有镜面金属感、暗淡、纯色、或是透明与否等效果。

Light 光源

光源相当于在密闭空间里的一盏灯,对于场景是必不可少的

在 Three.js 常用的有这几种光源:

AmbientLight 环境光源

属于基础光源,为场景中的所有物体提供一个基础亮度。

DirectionalLight 平行光源

效果类似太阳光,发出的光源都是平行的。

HemisphereLight 半球光

只有圆球的半边会发出光源。

PointLight 点光源

一个点向四周发出光源,一般用于灯泡。

SpotLight 聚光灯光源

一个圆锥体的灯光。

Shadow 阴影

另外要注意并不是每一种光源都能产生阴影,目前只有三种光源可以:

  • DirectionalLight 平行光源
  • PointLight 点光源
  • SpotLight 聚光灯光源

另外如果要开启模型的阴影的话,模型是由多个 Mesh 组成的,只开启父的 Mesh 的阴影是不行的,还需要遍历父 Mesh 下所有的子 Mesh 为其开启投射阴影 castShadow 和接收投射阴影 receiveShadow。

// 遍历子 Mesh 开启阴影
object.traverse(function(child) {if (child instanceof THREE.Mesh) {child.castShadow = truechild.receiveShadow = true}
})

欢迎来我的博客查看更多 https://blog.xollipop.top/

(一) 记录H5做AR的过程,Three.js 介绍相关推荐

  1. 记录一下StamPS+SBAS的过程

    本文主要记录一下做SBAS的过程,主要参考了B站up主刘博士的视频,其中也遇到了一些问题进行解决,在此记录一下整体过程. 安装双系统Ubuntu18.04.6 ①在镜像源中下载:http://mirr ...

  2. jenkins编译H5做的android端编译卫士app记录

    jenkins编译H5做的android端编译卫士app记录 编译android相关操作 先安装linux下的sdk tools,在官方地址上Download Android Studio and S ...

  3. Git学习记录 力做全网最强入门教程

    目录 Git学习记录 力做全网最强入门教程 什么是GitHub? 什么是Git? Git的配置 Git的安装(只介绍windos操作系统下) Git的配置 至此我们的入门教程到此结束,更新中级教程要等 ...

  4. 苹果又日常被曝做AR眼镜,可消费级市场真的准备好了吗?

    要说科技界有什么产品最吊人胃口,我一定会坚定的投AR眼镜一票.在科幻电影和小说的各种渲染下,这一产品还没问世就已经拥有了完善的原型图,甚至经常被看做会替代手机的头号选手.可惜这么多年以来,AR技术日益 ...

  5. 记录自己完美安装Archlinux过程

    记录自己完美安装Archlinux过程 前言 准备 安装介质 磁盘准备 进入U盘的Linux系统 正式开始 1.联网 2.更新系统时间 3.分区与格式化 3.1 查看分区 3.2 进入选择的硬盘 3. ...

  6. AR试妆究竟有多火?目前能做AR试妆的有哪几家技术公司?

    近期AR试妆突然变得火爆?是美妆产品巨头欧莱雅全资收购加拿大AR美容公司Modiface,还是一家又一家行业品牌试水AR美妆? 亦或是天猫.京东.唯品会等各大电商巨头纷纷入局美妆新零售?AR试妆在美妆 ...

  7. h5做的app和原生app的区别

    之所以说h5做的app和原生app的区别,是因为一位博友的问题: 随着 h5 的普及,是不是不再需要开发 app ? 我的回答是要分业务需求,分场合而定. 比如现在的微信小程序这么流行,甚至也取代了不 ...

  8. 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】...

    之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后 ...

  9. android 手动签名apk,记录手动签名APK的过程

    记录手动签名APK的过程 前两天更新了华为平台上的APK,被驳回,原因是新APK签名和老的APK不一致,老用户安装会失败,用命令行安装会报如下的错误: harlanc@harlancdeMacBook ...

最新文章

  1. MySQL:基础—数据分组
  2. switch case 中定义变量
  3. Tex2Word vs Word2Tex
  4. Gartner 最新预测:全球云收入将超非云收入,云原生、低代码、SASE 继续普及
  5. flux java_Java反应式框架Reactor中的Mono和Flux
  6. python基础语法类型_Python基础入门语法和变量类型(一)
  7. html兼容手机浏览器
  8. Educational Codeforces Round 67 E.Tree Painting (树形dp)
  9. python利用pyhive 连接hive
  10. 【金融市场基础知识】——金融市场体系
  11. 【方向盘】蚂蚁金服上市了,我不想努力了
  12. 为什么学计算机容易秃顶,为什么程序员更容易脱发?知道答案惊呆了!
  13. 让logo设计更有设计感的几个方法
  14. 你不得不学会的英文赞美句子
  15. 数学和算法之---排列组合
  16. 终端I/O termios属性设置 tcsetattr设置
  17. 如何pip更新所有包?
  18. Ubuntu下Redis设置密码时配置文件修改密码成功但仍CONFIG GET为空问题解决摸索小记
  19. 爱奇途——追求技术,提升自我
  20. 读书《Python数据挖掘课程》

热门文章

  1. 如何进入带有密码的QQ空间
  2. 汉字编码 (GB2312 GBK GB18030)
  3. 2020年6月21日总结
  4. 如果没有Java 人类就像不会说话的婴儿
  5. python有哪些用途-python的用途有哪些?
  6. 好文转载:90后妹纸学习CPA广告推广 创业就是这么简单
  7. Android 音视频深入 三 MP4解码播放视频 (附源码下载)
  8. Android端“被挤下线”功能的实现
  9. python-16-名片管理系统
  10. Python获取城市美食、地铁、中小学、商场及超市信息