通过step1,可以计算出方片的位置position(position是个三维向量:xyz),因为位置是相对球体的,所以从球体看来方片的位置永远是xyz,而在全局看来,方片的位置是永远在变化的,而这个位置坐标怎么获取是一个问题。 [转载出处:www.11jj.com]
[转载出处:www.11jj.com]
当时,小伙伴们想到了两种方案:
第一种:让照片相对球体运动,这样就不用去考虑方片位置了,因为这个位置是不变的。但这样的弊端是,因为球体在运动,照片也需要一直运动。如果要达到视觉上看“照片不动”的效果,就需要照片永远对着摄像头。
第二种:让照片相对全局运动,在每一帧的时候去获取方片相对于全局的坐标。然后在这一帧内慢慢趋近于这个坐标,最后实现位置的重叠。
经过讨论,决定采用第二种方案。因为核心是要解决坐标系相对转换的问题,但第一种方案并没有解决,只是把问题方式转移了。还好,Three.js提供了现成的方法:getWorldPosition用于返回表示对象在世界空间中的位置向量。
这样,就可以得到方片的全局坐标。
现在知道了照片的位置和最后需要到达的位置。但如果直接从初始位置向最后位置运动,还会有个问题:照片可能直接穿过球体而达到最后的位置(不符合运动规律),所以这里需要尽可能做曲线运动,而不是让照片穿过球体。
我们还是用到了上面的坐标系转极坐标系的公式,通过初始的极坐标位置(sourceR,sourcePhi,sourceTheta)和目标位置的(targetR,targetPhi,targetTheta)。根据线性差值公式计算出在每一帧中的中间位置(currentR,currentPhi,currentTheta),再转换成点坐标系下的位置,即为每一帧时照片的位置,从轨迹上来看是一个曲线运动,且不会穿过球体。
step4:粒子动画开场
终于进入最后的环节了。在活动正式开场前,“笑脸星球“会散开成粒子状态,通过粒子运动拼成本场活动的主题文案。这里运用到粒子动画效果,需要事先知道每个粒子最后运动的位置。我们参考了canvas粒子动画的效果(具体可以自行查一下),简化如下:
newImage加载图片
用context.drawImage把图片画到一张canvas画布上
通过context.getImageData就可以获取画布上指定区域的像素数据
比较每个点的像素值就可以记录下需要像素点的位置信息,转换成3D的坐标
(这边会涉及坐标系的转换,需要特别注意一下,平面canvas的坐标系和THREE.js的坐标系是不一样的)。
创造粒子,让粒子做飞散状运动起来,最后到达指定位置即可
事先准备两张图片,一张白底透明,一张彩色透明,粒子运动完成之后白底渐渐显示
大家好,小美今天来为大家解答双色球中奖结果以下问题,双色球中奖结果图表查询很多人还不知道,现在让我们一起来看看吧!1、双色球开奖规则
大家好,小豪今天来为大家解答我的世界流体管道怎么做以下问题,我的世界流体储罐怎么做很多人还不知道,现在让我们一起来看看吧!1、流体管
大家好,小乐今天来为大家解答最富有深意的字以下问题,富有深意的汉子很多人还不知道,现在让我们一起来看看吧!1、蕴含深意的单字:渠 、轩
大家好,小娟今天来为大家解答房屋建筑工程包括哪些项目以下问题,房屋建筑类工程很多人还不知道,现在让我们一起来看看吧!1、房屋建筑工程
大家好,小乐今天来为大家解答汉译英翻译器以下问题,汉译英翻译器高级很多人还不知道,现在让我们一起来看看吧!1、网络翻译:网络翻译app是
大家好,小娟今天来为大家解答槐树图片以下问题,洋槐树图片很多人还不知道,现在让我们一起来看看吧!1、用于绿化苗木,一般3~4年才能出圃,
大家好,小乐今天来为大家解答爱奇艺会员怎么取消自动续费以下问题,腾讯会员怎么取消自动续费很多人还不知道,现在让我们一起来看看吧!1、
大家好,小豪今天来为大家解答psd文件以下问题,psd文件用什么编辑很多人还不知道,现在让我们一起来看看吧!1、Psd文件是Photoshop自身的图像格式
Copyright 2024.依依自媒体,让大家了解更多图文资讯!