(一) 记录H5做AR的过程,Three.js 介绍
简介
最近突然想做基于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 介绍相关推荐
- 记录一下StamPS+SBAS的过程
本文主要记录一下做SBAS的过程,主要参考了B站up主刘博士的视频,其中也遇到了一些问题进行解决,在此记录一下整体过程. 安装双系统Ubuntu18.04.6 ①在镜像源中下载:http://mirr ...
- jenkins编译H5做的android端编译卫士app记录
jenkins编译H5做的android端编译卫士app记录 编译android相关操作 先安装linux下的sdk tools,在官方地址上Download Android Studio and S ...
- Git学习记录 力做全网最强入门教程
目录 Git学习记录 力做全网最强入门教程 什么是GitHub? 什么是Git? Git的配置 Git的安装(只介绍windos操作系统下) Git的配置 至此我们的入门教程到此结束,更新中级教程要等 ...
- 苹果又日常被曝做AR眼镜,可消费级市场真的准备好了吗?
要说科技界有什么产品最吊人胃口,我一定会坚定的投AR眼镜一票.在科幻电影和小说的各种渲染下,这一产品还没问世就已经拥有了完善的原型图,甚至经常被看做会替代手机的头号选手.可惜这么多年以来,AR技术日益 ...
- 记录自己完美安装Archlinux过程
记录自己完美安装Archlinux过程 前言 准备 安装介质 磁盘准备 进入U盘的Linux系统 正式开始 1.联网 2.更新系统时间 3.分区与格式化 3.1 查看分区 3.2 进入选择的硬盘 3. ...
- AR试妆究竟有多火?目前能做AR试妆的有哪几家技术公司?
近期AR试妆突然变得火爆?是美妆产品巨头欧莱雅全资收购加拿大AR美容公司Modiface,还是一家又一家行业品牌试水AR美妆? 亦或是天猫.京东.唯品会等各大电商巨头纷纷入局美妆新零售?AR试妆在美妆 ...
- h5做的app和原生app的区别
之所以说h5做的app和原生app的区别,是因为一位博友的问题: 随着 h5 的普及,是不是不再需要开发 app ? 我的回答是要分业务需求,分场合而定. 比如现在的微信小程序这么流行,甚至也取代了不 ...
- 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】...
之前写了一篇博客.<[Android实战]记录自学自己定义GifView过程,具体解释属性那些事! [学习篇]> 关于自己定义GifView的,具体解说了学习过程及遇到的一些类的解释,然后 ...
- android 手动签名apk,记录手动签名APK的过程
记录手动签名APK的过程 前两天更新了华为平台上的APK,被驳回,原因是新APK签名和老的APK不一致,老用户安装会失败,用命令行安装会报如下的错误: harlanc@harlancdeMacBook ...
最新文章
- MySQL:基础—数据分组
- switch case 中定义变量
- Tex2Word vs Word2Tex
- Gartner 最新预测:全球云收入将超非云收入,云原生、低代码、SASE 继续普及
- flux java_Java反应式框架Reactor中的Mono和Flux
- python基础语法类型_Python基础入门语法和变量类型(一)
- html兼容手机浏览器
- Educational Codeforces Round 67 E.Tree Painting (树形dp)
- python利用pyhive 连接hive
- 【金融市场基础知识】——金融市场体系
- 【方向盘】蚂蚁金服上市了,我不想努力了
- 为什么学计算机容易秃顶,为什么程序员更容易脱发?知道答案惊呆了!
- 让logo设计更有设计感的几个方法
- 你不得不学会的英文赞美句子
- 数学和算法之---排列组合
- 终端I/O termios属性设置 tcsetattr设置
- 如何pip更新所有包?
- Ubuntu下Redis设置密码时配置文件修改密码成功但仍CONFIG GET为空问题解决摸索小记
- 爱奇途——追求技术,提升自我
- 读书《Python数据挖掘课程》