22. WebAR那些事: 20行代码做全景

紧接上文

AR技术,全称增强现实技术,对已有的现实世界,增加一些虚拟元素,提升用户体验。传统的内容展示无非于:图片、文字、视频等组合,随着经济、技术的发展,越来越多的用户已经不满足于现状,目前需要的是消费升级、体验升级,那么AR、VR技术运用而生。

本次Demo所需二维码

本次demo已经集成到APK中,用户可以点击《全景》来体验。

AR全景

环境准备

  1. Demo使用r82版本,向下兼容
  2. Three.js 到http://www.threejs.org下载最新源码,这里使用three.min.js作为渲染引擎。
  3. WebVR.js WebVR的工具库,用于切换VR状态(three.js的源码包中,自己拷贝)
  4. VREffect.js WebVR的展示库,用于分屏展示(three.js的源码包中,自己拷贝)
  5. VRControls.js WebVR的控制库,用于监控陀螺仪、Camera、重力等(three.js的源码包中,自己拷贝)

3D模型

这次增加了一张本地4k图片,所以包变大了。

核心代码

代码参考Three.js,代码只需20行

var w = window.innerWidth;
var h = window.innerHeight;
var renderer = new THREE.WebGLRenderer();       // 创建渲染器
renderer.setSize(w, h);                         // 设置渲染器为全屏
document.body.appendChild(renderer.domElement); // 将渲染器添加到body上

var camera  = new THREE.PerspectiveCamera(75, w / h, 0.01, 100);
var effect  = new THREE.VREffect(renderer);     // 控制器,用来控制VR渲染
var loader  = new THREE.TextureLoader();        // 加载器,用于异步加载图片
var control = new THREE.VRControls(camera);     // 控制器,用来控制摄像机

var mater = { map : new THREE.TextureLoader().load('map.jpg'), side : THREE.BackSide };
var earth = new THREE.Mesh(new THREE.SphereGeometry(20, 32, 32), new THREE.MeshBasicMaterial(mater));

var scene  = new THREE.Scene();                 // 创建场景
scene.add(earth);                               // 添加全景球形纹理

animate();
function animate() {
    effect.requestAnimationFrame(animate);
    control.update();
    effect.render(scene, camera);
}

效果展示

我有一间小木屋,面朝大海,春暖花开

畅想

体验升级

沉浸式体验,可以让用户更加方便的感受照片。相比传统的照片浏览方式,左右滑动、上下滑动,每张照片展示的只是一个角度。对于用户来说,展示的思路并不连贯,需要用户在脑海中二次加工,才能生成完整的场景。

消费升级

相机与照片,交卷与相片,相辅相成。以前拥有一台柯达傻瓜相机,是一件非常幸福的事情。后来是单反,拍出更加清晰的电子照片。再后来是全景相机,360°球形照片。
随着人们的消费升级,不禁的会问:花了这么多钱,你就给我看这个?
这种问题,在每个时代的末期,都会有人提出。我们现在就处于传统2D电子照片的末期,新的时代马上就会来临。

下一回

手把手做一个VR视频播放器,要支持在线URL输入播放的那种。
敬请期待

时间: 2024-12-22 10:15:55

22. WebAR那些事: 20行代码做全景的相关文章

drawpath-只有20行代码!请大神帮忙看看,为什么drawPath( )会失效,但drawCircle( )却管用

问题描述 只有20行代码!请大神帮忙看看,为什么drawPath( )会失效,但drawCircle( )却管用 public class Hehe extends View { Path p; Paint p1; public Hehe(Context context AttributeSet attrs) { super(context attrs); // TODO Auto-generated constructor stub p=new Path();//定义一个路径 p.moveTo

20行代码实现的一个CSS覆盖率测试脚本

document.styleSheets里保存了当前页面上所有CSS规则的集合.通过它可以遍历出页面<style>里定义的所有 selector,访问selectorText属性可得选择器的匹配规则.然后将规则规则传递给 document.querySelectorAll 即可获取页面内匹配此规则的元素列表. 这里我们只求CSS规则的覆盖率,所以访问 querySelectorAll().length 即可.通过排序就可看出各个CSS使用情况. 代码很简单. 复制代码 代码如下: var us

20行代码实现的一个CSS覆盖率测试脚本_javascript技巧

document.styleSheets里保存了当前页面上所有CSS规则的集合.通过它可以遍历出页面<style>里定义的所有selector,访问selectorText属性可得选择器的匹配规则.然后将规则规则传递给 document.querySelectorAll 即可获取页面内匹配此规则的元素列表.这里我们只求CSS规则的覆盖率,所以访问 querySelectorAll().length 即可.通过排序就可看出各个CSS使用情况.代码很简单. 复制代码 代码如下: var usage

只需20行代码就可以写出CSS覆盖率测试脚本_基础知识

document.styleSheets里保存了当前页面上所有CSS规则的集合.通过它可以遍历出页面<style>里定义的所有selector,访问selectorText属性可得选择器的匹配规则.然后将规则规则传递给 document.querySelectorAll 即可获取页面内匹配此规则的元素列表. 这里我们只求CSS规则的覆盖率,所以访问 querySelectorAll().length 即可.通过排序就可看出各个CSS使用情况. 代码很简单. 复制代码 代码如下: var usa

只有20行Javascript代码!手把手教你写一个页面模板引擎

AbsurdJS 作者写的一篇教程,一步步教你怎样用 Javascript 实现一个纯客户端的模板引擎.整个引擎实现只有不到 20 行代码.如果你能从头看到尾的话,还能有不少收获的.你甚至可以跟随大牛的脚步也自己动手写一个引擎.以下是全文. 不知道你有木有听说过一个基于Javascript的Web页面预处理器,叫做AbsurdJS.我是它的作者,目前我还在不断地完善它.最初我只是打算写一个CSS的预处理器,不过后来扩展到了CSS和HTML,可以用来把Javascript代码转成CSS和HTML代

20行Android代码写一个CircleImageView_Android

一提到弄一个圆形的头像,很多人马上会想到用CircleIamgeView,但其实自己写一个也并不难自己写的部分也就20行代码,主要是用到PoterDuffXfermode来设置两个图层交集区域的显示方式 首先写一个继承自ImageView的控件 public class CircleImageView extends ImageView  然后创建构造方法 public CircleImageView(Context context, AttributeSet attrs) { super(co

面对 20 亿行代码,Google 如何管理?

面对"Google 这家公司有多大?"这种问题,你可能会用收入.股票价格.客户数量或者是形而上学的影响力来回答这个问题.但是,这还不是全部.Google 作为全球最大的互联网公司,我们当然可以用"互联网思维"来思考这个问题,比如用代码数量来衡量它.来自于 Google 的 Rachel Potvin,在周一举办的硅谷工程会议上给了我们一个可以参考的答案. 她表示,运行所有 Google 互联网服务的软件,包括了 Google 搜索.Gmail.Google 地图等,

面对20亿行代码,Google如何管理?

面对"Google 这家公司有多大?"这种问题,你可能会用收入.股票价格.客户数量或者是形而上学的影响力来回答这个问题.但是,这还不是全部.Google 作为全球最大的互联网公司,我们当然可以用"互联网思维"来思考这个问题,比如用代码数量来衡量它. 来自于 Google 的 Rachel Potvin,在周一举办的硅谷工程会议上给了我们一个可以参考的答案.她表示,运行所有 Google 互联网服务的软件,包括了 Google 搜索.Gmail.Google地图等,大

字符串-java问题 17~20行的代码不能运行,也就是不能进行a==Mon[i]这个语句,求问是什么原因

问题描述 java问题 17~20行的代码不能运行,也就是不能进行a==Mon[i]这个语句,求问是什么原因 import java.util.Calendar; import java.util.Date; public class Date { public static void main(String[] args) { //以下代码是用来显示系统当前月份的第一天是星期几的 Calendar currentCal = Calendar.getInstance(); currentCal.