Android三种姿势带你玩转360度全景图功能

大家好我是张鹏辉(道长)人如其名,我是天桥上算命的,转发这条博文,接下来一个月会有意想不到的惊喜发生。最近微博上的全景图火了,所以决定实现一下。工程里面图片资源来自网络,如有侵权请联系我,马上删除当然实现的方式很多比如OpenCV、u3d等。这里提供三种方式实现:

先看下三种实现的效果:

1.OpenGLES

第一种方式使用OpenGL来实现(上面gif图截取因为博客限制上传图片的大小,我压缩了,看起来有些卡其实很流畅的)可以看到支持旋转手机查看、或者拖动图片查看、可以看到右边中心部分有个指示器会随着角度变化而变化并且点击可以还原起始位置。

有些小伙伴懒得看原理,直接就想拿来用所以我先说集成方式吧!

在build.gradle文件中添加库依赖:

dependencies{compile'com.github.CN-ZPH:weibo360panorama:v1.0.1'}build.gradle完整代码:

publicclassMainActivityextendsAppCompatActivity{privateGLPanoramamGLPanorama;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化全景控件mGLPanorama=(GLPanorama)findViewById(R.id.mGLPanorama);//传入你的全景图mGLPanorama.setGLPanorama(R.drawable.imggugong);}}OK现在你可以测试玩玩了(别用模拟器玩咔咔报错就来找我)。二.分析首先我们需要了解全景图是什么东西,全景图是一种广角图。通过全景播放器可以让观看者身临其境地进入到全景图所记录的场景中去,通常标准的全景图是一张2:1的图像,其背后的实质就是等距圆柱投影。等距圆柱投影是一种将球体上的各个点投影到圆柱体的侧面上的一种投影方式,投影完之后再将它展开就是一张2:1的长方形的图像。比较常见的就是应用在地图上的投影。

得到全景图后那我们就需要展示了,看到旁边地球了吗?

怎么展示呢简单来说就是把全景图片整个贴到一个球体上。好了知道原理那我们就该考虑在android上怎么实现了,在android中绘制3d图形可以使用OpenGL(就不说OpenGL基础了想看的自己百度一大堆资料)。

纹理和图片绑定绘制到屏幕上

int[]textures=newint[1];glGenTextures(1,textures,0);inttextureId=textures[0];glBindTexture(GL_TEXTURE_2D,textureId);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);InputStreamis=context.getResources().openRawResource(drawableId);BitmapbitmapTmp;try{bitmapTmp=BitmapFactory.decodeStream(is);}finally{try{is.close();}catch(IOExceptione){e.printStackTrace();}}GLUtils.texImage2D(GL_TEXTURE_2D,0,bitmapTmp,0);bitmapTmp.recycle();2.利用传感器让球随着手机转动而转动第一想到的就是重力感应传感器,可是只能获得我们向那个位置偏移的方向,显然不可能满足我们旋转的需求,使用陀螺仪传感器。陀螺仪就是内部有一个陀螺,它的轴由于陀螺效应始终与初始方向平行,这样就可以通过与初始方向的偏差计算出实际方向。陀螺仪对设备旋转角度的检测是瞬时的而且是非常精确的。

首先注册陀螺仪传感器根据具体需要自己设置灵敏度,当然越灵敏,越耗电。

我这里为了测试设置了SENSOR_DELAY_FASTEST,实际使用建议用SENSOR_DELAY_GAME

privatevoidinitSensor(){sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);gyroscopeSensor=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);sensorManager.registerListener(this,gyroscopeSensor,SensorManager.SENSOR_DELAY_FASTEST);}2.获得传感器数据当传感器的值发生变化时,例如磁阻传感器方向改变时会调用OnSensorChanged().当传感器的精度发生变化时会调用OnAccuracyChanged()方法。

@OverridepublicvoidonSensorChanged(SensorEventsensorEvent){if(sensorEvent.sensor.getType()==Sensor.TYPE_GYROSCOPE){if(timestamp!=0){finalfloatdT=(sensorEvent.timestamp-timestamp)*NS2S;angle[0]+=sensorEvent.values[0]*dT;angle[1]+=sensorEvent.values[1]*dT;angle[2]+=sensorEvent.values[2]*dT;floatanglex=(float)Math.toDegrees(angle[0]);floatangley=(float)Math.toDegrees(angle[1]);floatanglez=(float)Math.toDegrees(angle[2]);Sensordtinfo=newSensordt();info.setSensorX(angley);info.setSensorY(anglex);info.setSensorZ(anglez);Messagemsg=newMessage();msg.what=101;msg.obj=info;mHandler.sendMessage(msg);}timestamp=sensorEvent.timestamp;}}3.设置填充球的Y,X的角度每次获得角度数据后只需要y,x的值计算位移的值

因为全景图上下旋转会翻转整个图所以我这里设置了上下只能偏移50f,如果不限制你可以去掉

mBall.yAngle+=dx*2.0f;这里*2.0也就是陀螺仪传过来的值乘以得出偏移的角度,数值越大,每次偏移更快!

Sensordtinfo=(Sensordt)msg.obj;floaty=info.getSensorY();floatx=info.getSensorX();floatdy=y-mPreviousY;//计算触控笔Y位移floatdx=x-mPreviousX;//计算触控笔X位移mBall.yAngle+=dx*2.0f;//设置填充椭圆绕y轴旋转的角度mBall.xAngle+=dy*0.5f;//设置填充椭圆绕x轴旋转的角度if(mBall.xAngle<-50f){mBall.xAngle=-50f;}elseif(mBall.xAngle>50f){mBall.xAngle=50f;}mPreviousY=y;mPreviousX=x;3.加入手势操控,拖动图片转动加入手势这里没什么好说的了,就是重写onTouchEvent()方法。这里唯一要注意的就是,当手指点击屏幕的时候要关闭陀螺仪传感器的监听不然会引起冲突。当手指离开屏幕,重新监听陀螺仪传感器。和上面也一样只是这里换成获取手指偏移角度,而不是传感器的数值,直接看代码。

publicbooleanonTouchEvent(MotionEvente){sensorManager.unregisterListener(this);floaty=e.getY();floatx=e.getX();switch(e.getAction()){caseMotionEvent.ACTION_MOVE:floatdy=y-mPreviousYs;//计算触控笔Y位移floatdx=x-mPreviousXs;//计算触控笔X位移mBall.yAngle+=dx*0.3f;//设置填充椭圆绕y轴旋转的角度mBall.xAngle+=dy*0.3f;//设置填充椭圆绕x轴旋转的角度if(mBall.xAngle<-50f){mBall.xAngle=-50f;}elseif(mBall.xAngle>50f){mBall.xAngle=50f;}Log.i("zphsas","mHandler***mPreviousY"+mBall.yAngle);Log.i("zphsas","mHandler***mPreviousx"+mBall.xAngle);rotate();break;caseMotionEvent.ACTION_UP:sensorManager.registerListener(this,gyroscopeSensor,SensorManager.SENSOR_DELAY_FASTEST);break;}mPreviousYs=y;//记录触控笔位置mPreviousXs=x;//记录触控笔位置returntrue;}4.加入指示器指示器这里弄了一个角标指示当前在全景图的角度,并且点击还原起始角度。可以想象同样是获取角度,我们直接放在全景图改变的地方,让指示器一起改变,而我们改变的地方只有2个陀螺仪和拖动屏幕。我这里指示器放了一张图也就是一个ImageView控件

1.为指示器加入动画跟随全景图一起转

privatevoidrotate(){RotateAnimationanim=newRotateAnimation(predegrees,-mBall.yAngle,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);anim.setDuration(200);img.startAnimation(anim);predegrees=-mBall.yAngle;//记录这一次的起始角度作为下次旋转的初始角度}2.点击指示器还原起始位置

当点击还原的时候,我一开始是直接恢复起始位置可是太生硬了,通过获取当前旋转的角度,逆向旋转,慢慢还原,让其有个过渡的效果。Y轴=旋转的角度-90f(起始角度)/10f(每次偏移多少,经过我多次尝试10f在我的手机上刚刚好);得到我们总共偏移几次可以复位;X轴同理,因为我上面限制了X轴的最大偏移,这里就不就算X轴了,不过在完成的同时直接复位X轴。(只是没有过渡的效果),你可以加上。我设置的起始角度是90f和0f,也就是X,Y轴的起始点mHandlers.postDelayed(this,16);这行代码就是多少毫秒复位一次。

看代码:

privatevoidzero(){yy=(int)((mBall.yAngle-90f)/10f);mHandlers.post(newRunnable(){@Overridepublicvoidrun(){if(yy!=0){if(yy>0){mBall.yAngle=mBall.yAngle-10f;mHandlers.postDelayed(this,16);yy--;}if(yy<0){mBall.yAngle=mBall.yAngle+10f;mHandlers.postDelayed(this,16);yy++;}}else{mBall.yAngle=90f;}mBall.xAngle=0f;}});}至此第一种OpenGLES方式核心代码分析完毕,有不明白的地方可以找我第二种GoogleVR第二种也就是谷歌官方为移动平台下VR解决方案,有兴趣的可以点开下面链接玩玩,我们只使用其中全景图模块。

目前GitHub上最新版本号为1.8.0,我这里也用最新的了。最低支持到minSdkVersion19也就是Android4.4.0在build.gradle文件中添加库依赖:

考虑到在多种机型兼容性,还有原生WebView的一些坑,我这里使用腾讯的X5内核的WebView。

到x5官网下载最新的sdk得到一个jar包我在这的是3.3.0版本的。将下载好的jar包放到你的工程libs目录下在build.gradle文件中添加库依赖:

你可以使用js交互将你的地址传到HTML上

直接上代码了:

publicclassWebViewActivityextendsAppCompatActivity{privatecom.tencent.smtt.sdk.WebViewtencent_webview;privateStringurl="file:///android_asset/admin.html";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_web_view);initView();}@SuppressLint("SetJavaScriptEnabled")privatevoidinitView(){tencent_webview=(WebView)findViewById(R.id.web);tencent_webview.loadUrl(url);WebSettingswebSettings=tencent_webview.getSettings();webSettings.setJavaScriptEnabled(true);tencent_webview.setWebViewClient(newWebViewClient(){@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){returntrue;}});}}

THE END
1.三维地图看故宫的格局和功能介绍《一》,历史,历史综合,好看视频三维地图看故宫的格局和功能介绍《一》 奇趣地理 966粉丝 · 108个视频 关注 接下来播放自动播放 11:00 杀狼花:汉奸收贿向鬼子投降,不料立马被盯上,随后就被团灭 可乐剧工坊 13万次播放 · 1834次点赞 01:01 58岁巩俐上海深夜打羽毛球,身材婀娜露大长腿,国际影后秒变运动女神 星娱STAR干饭版 2.1万次播放 https://haokan.baidu.com/v?pd=wisenatural&vid=10869911012200887339
2.卫星航拍北京故宫,全景视角太震撼了北京城市建设博物馆有北京立体图。 13天前 回复 霜冷长河 无与伦比!世界上没有可比性。是独一无二! 17天前 回复 端庄优雅奶茶dY 说实话,故宫没有布达拉宫震撼! 14天前 回复 智慧晚风GH 转发了 18天前 回复 大约在秋季 转发了 9天前 回复 AB11 转发了 13天前 回复 卧云听清泉 转发了 17天http://dn.mlwch.com/166a679e71a2de.html
3.北京故宫,俯瞰9000多间房子,感叹古人的大智慧假的 叙首都大马士革命悬一线 俄罗斯表态 知名大厂宣布春节可返乡办公两个月 伊朗女子没戴头巾遭鞭刑 加沙死亡人数已超过七国人口 女子为让男子离婚给原配转账120万 中方就美对台军售制裁13家美企 102岁老太嫁给100岁老头 创世界纪录 “坚定不移推进高质量共建‘一带一路’” https://m.163.com/v/video/VOHPLAVEB.html
4.#杭州德寿宫红墙灯光秀又出圈了#裸眼3D效果震撼免费观看#在【#杭州德寿宫红墙灯光秀又出圈了#裸眼3D 效果震撼 免费观看】#在这里爱上一座城#你去杭州德寿宫看灯光秀了吗?近日,2024年“让文物活起来”暨第二届“我和博物馆的故事”成果展在杭州南宋德寿宫遗址博物馆举行。“让文物活起来”德寿红墙灯光秀成功再次“出圈”,数字光影灯光秀带来裸眼3D的视觉震撼。截至12https://weibo.com/2097194084/P3t7CaVgd
5.故宫虚拟游故宫3D实景故宫720度,三维全景故宫举世闻名的紫禁城,浓缩了源远流长的中华文化,成为中国乃至世界文化历史上永恒的经典。从您看到的这张神奇的图片开始,全景客将带您踏进这座“殿宇之海”,开始一次前所未有的时空之旅!请把鼠标放到图上,向各个方向拽动,您就仿佛身临其境,自由自在地欣赏美景了。这时候,您可以点击图片上方的“到此一游”(抢位http://www.quanjingke.com/dest/ramble_gugong
6.1945年,航拍北京故宫和中轴线视频加载失败,可以 刷新 试试 00:00/00:00 评论 还没有人评论过,快来抢首评 发布1945年,航拍北京故宫和中轴线北京四九城 发布于:北京市 2024.12.09 19:42 分享到 1945年,航拍北京故宫和中轴线,天安门、午门、太和殿、乾清宫尽收眼底。 推荐视频 已经到底了 热门视频 已经到底了 https://www.sohu.com/a/834671445_330268
7.www.gmjk.net/xxxr58291001.shtml3d胆码天中图库 内射XXXX毛片国产ⅩX 女人臀交到舒服吗 中国成人一级片 高清绝色尤物的美屄 性老大屁股农贸市场女厕全景偷拍系列 亚洲黄色录像网站 黄色无码免费电影 日本盗撮 看H免费不要钱 樱花动漫久久久久久久AV 27XXOO动态图100期试看 好好日天天干 www.xxxxx 五月天播播成人电影 惩罚游戏JAVhttp://www.gmjk.net/xxxr58291001.shtml
8.故宫三维全景环视立体照片,主要应用的技术是()?#include #define N 4 void fun(int a[][N], int b[]) { int i; for(i=0;i b[i] = a[i][i]; } main() { int x[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i; fun(x,y); for(i=0;i printf("%d,",y[i]); printf("");https://www.shuashuati.com/ti/36f5e418024b42a8b3fa078183692852.html?fm=bd3cfb4b4a581350642379a33dcc957409
9.故宫全景3d模型故宫全景模型图片素材免费下载3D溜溜网3d模型库,汇集多类型故宫全景模型图片素材,帮设计师根据不同场景,寻找免费下载的三维立体,3dmax和C4D模型素材,找故宫全景3d模型图片素材就来3D溜溜网。https://3d.3d66.com/relation/relation_2022106.html
10.小黑盒18.全景故宫 中文 线上体验游览故宫,360° 查看各个宫殿,支持搜索,有文字介绍 https://pano.dpm.org.cn/ 19.地球模型 中文 网站模拟了地球自转运动,同时提供了大量的模拟操作,如查看太阳光照、昼夜平分面黄道面赤道面与内部结构等 https://3d-app.yunser.com/earth 20.蚂蚁网(怕的慎入啊) 中文 全球最大的https://www.xiaoheihe.cn/community/1/list/114940977
11.卫星地图提示:请点击左边省市地名,鼠标拖动平移、滚轮放缩地图。 北京故宫旅游攻略北京故宫,世界上现存规模最大、保存最为完整的木质结构的古建筑 故宫 四川九寨沟旅游攻略九寨沟以翠海、叠瀑、彩林、雪峰、蓝冰、藏情合为九寨沟“六绝” 九寨沟 丽江古城旅游攻略丽江古城地处我国西南边陲的云南省西北部,是我国保存https://www.meet99.com/map
12.现实故宫全景模型3D嘲模型.zip故宫模型资源【3Dmax与故宫全景模型】 3Dmax是一款由Autodesk公司开发的三维建模、动画和渲染软件,广泛应用于建筑可视化、电影特效、游戏设计等领域。本资源为"现实故宫全景模型3D场景模型.zip",其中包含了使用3Dmax创建的故宫全景3D模型,特别指出该模型是针对3Dmax 2016版本优化的,意味着它可能利用了该版本的特定功能或特性。 在https://download.csdn.net/download/qq_40999248/33357653
13.www.jxmzxx.com{$woaini}>www.jxmzxx.com{$woaini}{“每天走街串巷送外卖,在大运会筹备过程中,看到这座城市在一点点改变。无论是城市环境、生活质量还是公共交通,都能感受到大运会带给我们的美好改变,大家脸上的笑容更多了。”1992年出生的王柯皓是一名外卖小哥,前不久成为了成都大运会火炬手。||。 何以中国|“国宝推荐人”习近平 http://www.jxmzxx.com/appnews8255426
14.3D全景故宫网页版pano.dpm.org.cn在网上你就能参观故宫你敢信?而且还无需门票。 这个网站采用了360度全景高清图,全方位展示了故宫的美丽壮观。不仅有详细的地图和讲解,而且还配有悠扬动听的音乐,沉浸式参观,无需费劲徒步,动动手指就能去往任何你想欣赏的景点。 在线网址:https://pano.dpm.org.cn/#/https://www.xarjtc.com/11341.html
15.www.quinovare.com/xxxr62104528/411821.htm肏逼免费动态图 浪漫樱花高清在线观看 69sexvideos 649.63MB 348好评 纯肉本子无码 亚洲拳交网大屁股景区女厕偷拍全景 52.70MB 07%好评651人) 梁静的黄色毛片电影 女教师~婬辱の教室动漫3D 啊?啊?啊?快?高潮了蘑菇视频 故宫大班美术教案 国产一级黄色性爱视频网站 需要爸爸播种h小说http://www.quinovare.com/xxxr62104528/411821.htm
16.全景故宫3d虚拟地图全景故宫3d虚拟地图官网网址入口:https://pano.dpm.org.cn/ 全景故宫这项服务不仅让故宫的历史文化得以传承,也使得无法亲临现场的人们能够通过科技手段欣赏到故宫的美景。全景故宫的推出,无疑是现代科技与传统文化结合的典范,它让故宫的参观不再局限于时间和空间,拓宽了人们了解和体验故宫的途径。通过全景故宫,用户可以https://www.bgrdh.com/sites/7103.html
17.紫禁城如何“择中立宫”?2分钟3D全景沉浸式“转动”故宫这里是北京中轴线的中心——故宫,历时14年修建,迎来送往24位皇帝,历经600余年风雨沧桑。它“择中立宫”,展现了以中为尊、左右对称的原则。 “特别声明:以上作品内容(包括在内的视频、图片或音频)为凤凰网旗下自媒体平台“大风号”用户上传并发布,本平台仅提供信息存储空间服务。 Notice: The content above (includihttps://tech.ifeng.com/c/8L10hq9ZEAT
18.故宫3d全景浏览app下载故宫3d全景浏览app官方版故宫3d全景浏览app原名就叫做故宫展览是一款在手机上就能看遍故宫美景的手机软件哟,这两天北京不是下雪了吗相信许多网友们都想去看看故宫的雪景,但是有些朋友们不能去,那么下载使用这款app就能看到故宫春夏秋冬的美景了哟,喜欢的朋友们就赶紧来下载吧。 http://www.ishaohuang.com/soft/50686.html
19.[故宫建筑背景图]图片免费下载故宫建筑背景图素材千图网为您找到950张故宫建筑背景图相关素材,千图网还提供故宫建筑背景图图片,故宫建筑背景图素材, 故宫建筑背景图模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://m.58pic.com/tupian/gugongjianzhubeijingtu.html
20.现实故宫全景模型3D嘲模型.zip游戏开发现实故宫全景模型3D场景模型.zip 游戏开发 - Unity3DBa**nt 上传21.11 MB 文件格式 zip 3dmax 3dmax版本的故宫模型,亲测3dmax2016可打开。点赞(0) 踩踩(0) 反馈 所需:7 积分 电信网络下载 技术资料分享技术资料分享proe使用技巧文件打开试除及删除旧版本资料分享.zip https://www.coder100.com/index/index/content/id/1715547
21.故宫太和殿全景类图片素材60张我图找相似功能已为您找到60张与故宫太和殿全景类似的图片,包含各种高清原创故宫太和殿全景素材图片,找故宫太和殿全景相似图片就上我图网.https://so.ooopic.com/findsimilarity-27179011.html
22.全景故宫3d虚拟旅游下载全景故宫3d虚拟地图官网版下全景故宫是一款由故宫博物院与专业地图团队共同打造的安卓应用软件,旨在通过全景摄影技术将紫禁城的古建筑外景与原状陈列内景制作成720度4k高清全景照片,为用户提供沉浸式的虚拟旅游体验。用户可以在手机上随时随地游览故宫,感受其宏伟的建筑和深厚的文化底蕴。软件内包含了丰富的故宫文化知识,通过图文音视频等多种方式,让https://www.crsky.com/soft/739664.html
23.三维虚拟仿真技术11篇(全文)全景也称为全景摄影或虚拟实景,是基于静态图像的虚拟现实技术。是把相机环360°拍摄的一组照片拼接成一个全景图像,用一个专用的播放软件在互联网上显示,让使用者能用鼠标控制环视的方向,可左可右、可近可远观看物体或场景。 三维全景技术是一种桌面虚拟现实技术,并不是真正意义上的3D图形技术。三维全景技术具有以下https://www.99xueshu.com/w/ikey0kaqoms7.html
24.“参加”古田会议畅游数字故宫图片新闻“来故宫博物院展位,看数字技术如何帮文物从历史中‘醒来’。”故宫博物院副院长朱鸿文说,数字故宫体验专区占地234平方米,是此次展会面积最大的博物馆展位,展示了数字文物库、数字多宝阁、故宫名画记、全景故宫、虚拟现实剧场、文物对比鉴赏、鉴藏珍玩、御花园VR体验等8个数字展项。其中,故宫名画记已发布1152件珍贵院藏https://www.fuzhou.gov.cn/zwgk/gzdt/tpxw/202405/t20240528_4831310.htm
25.全景故宫app预约下载(暂未上线)全景故宫app,专属故宫的手机导航地图软件,不少用户对故宫到底有多大以及样子充满了好奇,这款全景故宫app将以3d图的形式为用户呈现故宫的全貌,可以从多个视角进行查看故宫的每一个角落,给你带来不一样的观景体验。信息量超大,故宫的各个区域都有覆盖,还有数万款文物提供,供你随时欣赏,而且均是高清大图。 软件背景 https://shouyou.3dmgame.com/android/119792.html
26.全景网站关键字全景视频播放器(UtoVR)软件介绍:这是一款 [ 查看详细 ] 分类: 视频影音| 语言: 中文| 大小: 27.79M| 评分: 4.0| 时间: 2022-11-28 转转鸟(得图全景相机) 转转鸟(得图全景相机)是一款全景相机应用app。 手机下载转转鸟app,就能进行360度全景拍摄,转转鸟app特有的引导式拍摄方法,让用户拍出完美的全景照片。http://www.downcc.com/tags_%C8%AB%BE%B0.html
27.北京故宫三维漫游360全景(小二设计出品)北京故宫三维漫游360全景(小二设计出品 ) - 720云VR全景制作网https://www.720yun.com/t/d91j57kvew8