21. WebAR那些事: ARDemo之《天马行空》

紧接上文

使用WebAR技术,开发者只需40行代码,即可搭建一个ARDemo。同时我们也抛出了一个问题,如果把地球模型,换成一个可以动的小猫小狗,是不是就更加接近虚拟现实了?

本次Demo所需二维码

本次demo已经集成到APK中,用户可以点击《天马星空》来体验。

天马星空

环境准备

  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模型

之前我们总是使用地球的3D模型,估计各位看官也看腻了,这次终于更新了!

  1. 支持动画的3D模型
    通过阅读THREE.JS的示例,找到了喜欢的模型,一批奔跑的马儿。
    在webgl分类下的shadowmap入口,可以看到官方的demo。
  2. 3D模型的格式
    本次演示的3D模型,是JSON格式,可以有多种工具生成,比如3DMax、玛雅等。
    这种格式虽然方便阅读,缺点也比较明显,将整个文件解析成json后,再转换成内存数据,最后上传到GPU,由于JS语言在运算处理方面的不足,加载过程会稍慢一些。
  3. WebVRSDK支持的3D格式
    打开THREE.JS的官方example,可以看到loder分类的3D模型格式,初步可以理解为,只要three.js支持的格式,WebVRSDK也是可以支持的。如果有不支持,请反馈给我,我会及时更新WebVRSDK

兼容性准备

获取摄像头API,目前只支持Navigator.getUserMedia

index.js核心代码

核心代码量约50行,核心代码和《上一篇》基本一致,只是将3D地球的模型,替换成了一批马。

代码参考Three.js,如下

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

var horse, delta;
var clock   = new THREE.Clock();                // 创建时钟
var scene   = new THREE.Scene();                // 创建场景
var mixer   = new THREE.AnimationMixer(scene);  // 创建混合器
var camera  = new THREE.PerspectiveCamera(45, w / h, 100, 3000);

var control = new THREE.VRControls(camera);     // 控制器,用来控制摄像机
var effect  = new THREE.VREffect(renderer);     // 控制器,用来控制VR渲染
var loader  = new THREE.JSONLoader();           // 加载器,用于加载3D模型
loader.load("horse.json", function(geometry) {
    var material = new THREE.MeshLambertMaterial({ color: 0xFFAA55, morphTargets: true, vertexColors: THREE.FaceColors });
    horse = new THREE.Mesh(geometry, material);
    horse.speed      = 200;
    horse.position.x = -500;

    scene.add(horse);
    scene.add(new THREE.AmbientLight(0x444444));// 创建环境光
    scene.add(new THREE.DirectionalLight(0xFFFFFF, 1, 0));
    mixer.clipAction(geometry.animations[0], horse).setDuration(1).startAt(-Math.random()).play();
});
window.navigator.getUserMedia({ audio : true, video: { width: w, height: h }}, function(stream) {
    var video = document.createElement('video');
    video.src = stream;
    video.play();

    var image = new THREE.VideoTexture(video);
    image.generateMipmaps = false;
    image.format     = THREE.RGBAFormat;
    image.maxFilter  = THREE.NearestFilter;
    image.minFilter  = THREE.NearestFilter;
    scene.background = image;                   // 背景视频纹理
}, null);

animate();
function animate() {
    effect.requestAnimationFrame(animate);
    if (horse) {
        delta = clock.getDelta();
        mixer.update(delta);
        horse.position.z += horse.speed * delta;
        if (horse.position.z > 1000) {
            horse.position.z = -1000 - Math.random() * 500;
        }
    }
    control.update();
    effect.render(scene, camera);
}

效果展示

很想把屏幕录制下来,再制成GIF格式的图片,方便演示,大家有没有推荐的工具软件,最好能直接截屏的那种。
演示的效果,大概是这样子的,一匹马从远处跑来,然后再跑到远处,直至消失。用两张图片大概来演示吧。。

畅想

WebAR入门简单

写这篇文章的时候,我也想不到,只需要50行代码,就可以做一个带有动画的ARDemo,不得不说Three.js太强大了。
那问题来了,既然代码都是用标准的JS写的,而且框架用的是开源的Three.js,那WebVRSDK做了什么?
WebVRSDK是使用C/C++编写的<跨平台><极简><高性能>的<浏览器>内核,大小在400K以下,以WebGL为核心,支持WebGL、Canvas、Video、Audio、XMLHttpRequest、VRDisplay、Camera、ImageDecode等等,但不支持Dom,并且为Three.js/Pixi.js/Tiny.js等做了深度兼容。
所以,前端开发者,只需要在PC浏览器开发、调试通过,就可以快速的移植到WebVRSDK平台。

千锤百炼才是精品

我对JS的理解还属于入门级别,目前写的Demo,基本都是临时学的,不要太当真。
想做好WebAR/VR,还需要前端大牛的支持。
如果有好的产品,欢迎移植&对接WebVRSDK。

下一回

添加个按钮,让AR可以和用户交互,但
加个什么按钮呢?
点击按钮之后,显示什么效果呢?
敬请期待

时间: 2024-10-20 17:23:41

21. WebAR那些事: ARDemo之《天马行空》的相关文章

20. WebAR那些事: 一个40行的ARDemo

紧接上文 WebVR+Three.js可以快速高效的搭建VR场景,降低了初学者的准入门槛,节省多平台重复开发,开始了H5在VR的新时代. 本次Demo所需二维码 用户可以本地启动HTTP服务,将URL填写到播放路径 本次demo已经集成到APK中,用户可以点击<AR地球>来体验 AR地球 环境准备 Demo使用r82版本,向下兼容 Three.js 到http://www.threejs.org下载最新源码,这里使用three.min.js作为渲染引擎. WebVR.js WebVR的工具库,

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

紧接上文 AR技术,全称增强现实技术,对已有的现实世界,增加一些虚拟元素,提升用户体验.传统的内容展示无非于:图片.文字.视频等组合,随着经济.技术的发展,越来越多的用户已经不满足于现状,目前需要的是消费升级.体验升级,那么AR.VR技术运用而生. 本次Demo所需二维码 本次demo已经集成到APK中,用户可以点击<全景>来体验. AR全景 环境准备 Demo使用r82版本,向下兼容 Three.js 到http://www.threejs.org下载最新源码,这里使用three.min.j

云栖Android精华文章合集

云栖Android精彩文章整理自各位技术大咖们关于Android的精彩分享,本文将云栖Android精彩文章整理成为一个合集,以便于大家学习参考.Weex.apk瘦身.开发资源.应用维护.内存管理,一切尽在云栖Android精华文章合集. 云课堂: Android平台页面路由框架ARouter最佳实践 聚能聊: Android_Studio_那些年你常用的神奇快捷键及遇到的糗事儿 文章干货: 安全: APP漏洞扫描器之未使用地址空间随机化 [安全攻防挑战]Androidapp远程控制实战 你必须

24. WebVR播放器: 在豪宅里看电影

紧接上文 消费升级的必然是体验升级,AR/VR技术是提升用户体验的方式之一.智能手机让用户可以AnyTime.AnyWhere的体验移动生活服务,再结合扁平化UI设计,在小小的手机屏幕上,实现了可以媲美PC的体验,用户已经从开始的惊艳,慢慢变成了适应,认为智能手机就应该是这样子,即我们所说的<审美疲劳>.为了提升用户体验,硬件厂商也是操碎了心,不断提升手机屏幕尺寸.清晰度.分辨率.曲面屏等等.其背后的推力,就是消费升级的表现. 虽然我们不是硬件厂商,但在这场变革中,我们可以通过软件来实现自我价

年关电信诈骗变花样 谨防攻心计

南都插图:陈婷"我昨天接到个手机号码打来的电话,说是要向我推销联通资费优惠套餐,会不会是诈骗?"近日,市民雷先生向南都记者反映,最近有关电信诈骗案的信息满天飞,所以接到这种电话时特别小心.后经记者向本地联通公司核实,这确实是推销业务的电话而非诈骗.但由此可见,如今电信诈骗对人们的影响已到了"草木皆兵"的地步.这并非坏事,至少意味着人们的警惕性变得更高,也更关注电信诈骗问题,使不法分子"得手"的几率大大降低.特别是明星汤唯遭遇电信诈骗被骗21万元的

营销,就是营销人性的弱点

营销,就是营销人性的弱点 时间:2014-10-21 21:54 来源:互联网的一些事 作者:TR 10月21日 一些事 晚报 | 汇总今日最热资讯 1.[泛互联网IT类在线教育产业解析]在线教育是一个炙手可热的领域,几乎每隔几周就会有一个提供在线课程的创业公司宣布获得百万美元级投资.2014年,互联网教育行业更是风起云涌,发展速度势如破竹,已从元年阶段走入潜力无限的蓝海态势. 2.[如何为你的公司设计一个吸引人的故事情节?]如今,内容在市场营销中扮演的角色越来越重要, 但是对于你的公司来说,如

制作信息图的“核心信条”

偏好柱状图和饼状图的陈腐的企业审美已经不复存在了.如今,"数据可视化"(包括为信息图)被大量使用,可谓是无处不在.数据可视化是一个极好的方式,用来传递出与公司行为相关的信息,或者以一种视觉上引人入胜的方式,简单解释一个社会现象. 但是,确切地说,是什么成就了一个好的信息图呢?在网上搜索一下,你会找到非常多的观点,其数量如同信息图设计者一样.尽管如此,对于信息图这一"艺术品",还是有一些核心信条,得到了几乎每个人的认同.这里,我们对其做一个总结,同时配上一些例子作为演

《抓住听众心理——演讲者要知道的100件事》一21.人们有不同的学习类型

21.人们有不同的学习类型 抓住听众心理--演讲者要知道的100件事本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接.

21岁的Twitter的用户介面设计师专访

年轻且能够改变世界或许是一个人最大的幸运了.21 岁的 Vitor-Lourenco就是如此,拥有7年设计经验的负责了一个改变数以千万计用户沟通方式的产品,Twitter的用户介面设计.以下则是对这个年轻人的一段访谈,--编者   Q:是什么让你投身于设计业的?估计你在很早的时候就对设计感兴趣了? A:大约从12岁起,我就对网页设计感兴趣了,但从没想过以此为业.起初只是因为好玩,但突然间它不仅带给我很多很多快乐,还有丰厚的报酬.我做的第一个网站是关于游戏及动漫的--我当初热衷于此. Q:在你的网