产品经理:你能不能在网页里实现裸眼3D

简介: 最近产品经理在掘金社区的出镜率很高,看来大家都很喜闻乐见工程师与产品经理的相爱相杀。这次他让我调研一下在网页里实现裸眼3D这是故意为难我把?搞什么调研影响我摸鱼现在的我想拿枪打他拿弓箭射他点火烧他诶,如果我在3D场景中刻意加上一些框框,会不会看上去更立体呢?

方案一:造个框框,再打破它


现在我们用一个非常简单的立方体来试试看


image.png


image.png


立体感是稍微提升一点,但就这?那怕是交不了差的...


不过,大家发挥一下想象力,框框可以不全是直的,这个B站防遮挡弹幕是不是也让你产生了些裸眼3D的效果呢?


方案二:人脸识别


不行,谁都不能耽误我摸鱼。


此时我又想起另一个方案,是不是可以通过摄像头实时检测人脸在摄像头画面中的位置来模拟裸眼3D呢。我找到了tracking.js,这是一款在浏览器中可以实时进行人脸检测的库。


github.com/eduardolund…


var tracker = new tracking.ObjectTracker('face');
  tracker.setInitialScale(4);
  tracker.setStepSize(2);
  tracker.setEdgesDensity(0.1);
  tracking.track('#video', tracker, { camera: true });
  tracker.on('track', function(event) {
    context.clearRect(0, 0, canvas.width, canvas.height);
    event.data.forEach(function(rect) {
      context.strokeStyle = '#a64ceb';
      context.strokeRect(rect.x, rect.y, rect.width, rect.height);
      context.font = '11px Helvetica';
      context.fillStyle = "#fff";
      context.fillText('x: ' + rect.x + 'px', rect.x + rect.width + 5, rect.y + 11);
      context.fillText('y: ' + rect.y + 'px', rect.x + rect.width + 5, rect.y + 22);
    });
  });


image.png


我们可以看到,画面中呈现了人脸在摄像头视角画布中的坐标,有了这个坐标数据,我们就可以做很多事情了。


接着把它接到threejs中,我们仍然拿这个立方体来试试看


image.png


实际体验还有点意思,但录屏的感受不太明显,请自行下载demo源码试试看吧


方案三:陀螺仪


W3C标准APIDeviceOrientation,用于检测移动设备的旋转方向和加速度。通过这个API,我们可以获取到三个基础属性:


  • alpha(设备平放时,水平旋转的角度)


image.png


  • beta(设备平放时,绕横向X轴旋转的角度)


image.png


  • gamma(设备平放时,绕纵向Y轴旋转的角度)


image.png


这个API的使用非常简单,通过给window添加一个监听


function capture_orientation (event) { 
    var alpha = event.alpha; 
    var beta = event.beta; 
    var gamma = event.gamma; 
    console.log('Orientation - Alpha: '+alpha+', Beta: '+beta+', Gamma: '+gamma); 
}
window.addEventListener('deviceorientation', capture_orientation, false);


现在我们把这个加入到咱们的立方体演示中,在加入的过程中,这里需要注意的是,在IOS设备上,这个API需要主动申请用户权限。


window.DeviceOrientationEvent.requestPermission()
    .then(state => {
        switch (state) {
            case "granted":
                //在这里建立监听
                window.addEventListener('deviceorientation', capture_orientation, false);
                break;
            case "denied":
                alert("你拒绝了使用陀螺仪");
                break;
            case "prompt":
                alert("其他行为");
                break;
        }
});


返回的是一个promise,所以你也可以这么写


var permissionState = await window.DeviceOrientationEvent.requestPermission();
if(permissionState=="granted")window.addEventListener('deviceorientation', capture_orientation, false);


还有几点需要注意的事,requestPermission必须由用户主动发起,也就是必须在用户的行为事件里触发,比如“click”,还有就是这个API的调用,必须在HTTPS协议访问的网页里使用。


结语


至此,我能想到在网页里实现裸眼3D的几种方法都在此文中,你还能想到别的方法吗?请在评论区一起讨论吧。


相关文章
|
前端开发 JavaScript 小程序
Taro框架使用canvas生成图片-附带源码和效果
Taro框架使用canvas生成图片-附带源码和效果
1171 0
Taro框架使用canvas生成图片-附带源码和效果
|
8月前
|
测试技术 持续交付
软件测试中的自动化工具及其应用
本文将探讨软件测试中自动化工具的特点、优势以及常见应用场景,重点介绍了自动化测试工具在提高测试效率、减少人力成本以及保证软件质量方面的重要作用。通过深入分析自动化测试工具的应用实例,帮助读者更好地理解和运用现代软件测试工具。
146 1
|
9月前
|
网络安全 开发者 iOS开发
iOS技术博客:App备案指南
本文介绍了移动应用程序(App)备案的重要性和流程。备案是规范App开发和运营的必要手段,有助于保护用户权益、维护网络安全和社会秩序。为了帮助开发者更好地了解备案流程,本文提供了一份最新、最全、最详的备案指南,包括备案目的、好处、对象、时间、流程、条件和注意事项等内容。
iOS技术博客:App备案指南
|
3月前
|
前端开发 C# Android开发
2024年全面的多端统一开发解决方案推荐!
2024年全面的多端统一开发解决方案推荐!
301 0
2024年全面的多端统一开发解决方案推荐!
|
Java 程序员 Android开发
IDEA/eclipse集成阿里巴巴Java开发规约插件
IDEA/eclipse集成阿里巴巴Java开发规约插件
338 0
IDEA/eclipse集成阿里巴巴Java开发规约插件
|
项目管理 计算机视觉
系统集成项目管理工程师考试必过攻略(转载)
一、关于教材 1、书一定要仔细地看,认真复习,书上图一定要好好看,每次必考试题,图上的标注,尤其是数字等,上午选择题很容易涉及到。
1310 1
|
存储 机器学习/深度学习 人工智能
大模型时代的存储趋势
从2022年下半年,大模型和AIGC这两个词变得极其火热,而GPU的市场也是一卡难求。对于这种迷乱和火热,让我想起了当年的比特币挖矿和IPFS。似乎世界一年一个新风口,比特币、元宇宙、NFT、AIGC,金钱永不眠,IT炒作永不停歇。 每一个新的风口出现,总有两拨势力在冲突,保守派不断探索业务的真实价值,通过价值投资试图证明这又是一个新的庞氏骗局;另一波则是来势汹汹,集结一切可团结的力量,证明新时代已经来临。对于这一个个的风口,AIGC和大模型似乎与前几年的风口不一样,让我们看到了一丝真正的未来科技,在这篇文章,我会分享我对大模型&AIGC的看法,以及从存储的视角思索,在大模型时代存储的趋势。
|
前端开发 小程序 JavaScript
|
存储 边缘计算 Cloud Native
Cloud Computing:云网端融合的简介、层次、典型代表、未来趋势之详细攻略
Cloud Computing:云网端融合的简介、层次、典型代表、未来趋势之详细攻略

热门文章

最新文章