日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

让一个图片填满一个控件_如何在Android中实现一个全景图控件(二)

發布時間:2023/12/19 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让一个图片填满一个控件_如何在Android中实现一个全景图控件(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、背景

在 如何在Android中實現一個全景圖控件(一)中,介紹了項目的一些基本情況(有 demo 演示),如果項目對你有幫助,希望文章賞個贊,項目 star 一下。
項目地址:https://github.com/androidZzT/VRPanoramaView
這篇中,我打算完整的介紹一下項目中用到的技術棧,以及一個全景圖繪制到 Android 屏幕上的大致流程是什么。廢話不多說,我們開始

二、全景圖控件要用哪些技術?

我們先說一說全景圖控件的實現思路是什么?

1. 全景圖控件要做什么?

平時用手機相機的全景模式,可以記錄前后左右 180° 的場景,由于鏡頭限制,可能上下方向的記錄不到,所以這種照片其實是缺失某個方向的信息的,全景圖控件不是用于顯示這種“全景圖”的。

專業全景相機是可以記錄上下左右 360° 的場景,可以把三維場景記錄成一張二維的圖片,所以全景圖控件要做的是把二維的圖像還原成為拍攝現場的三維場景。

2. 怎樣在二維屏幕上還原一個三維場景?

圖1-全景圖控件實現思路

如圖所示:

  • 將全景圖的每一個像素點平鋪到一個球的表面上
  • 想象我們的眼睛在球心位置
  • 我們所能看到球體內表面的區域,就是屏幕要展示的內容
  • 旋轉眼睛的方向,就能看到不同方位的場景,就好像我們站在了真實的場景中
  • 3. 如何在屏幕中畫一個球?

    圖2-3D渲染的大致過程

    平時 Android 開發中使用的 View 大多都是 2D 的,現在我們需要繪制出一個 3D 的 View,要用到哪些技術呢?

    如圖,由左向右是渲染全景圖的一個大致流程: 1. Bitmap 輸入到虛線框里的 TextureView(其中虛線框的內容完全可以用 GLSurfaceView 代替,后續解釋細節的時候會說明)。 2. TextureView 生成了 SurfaceTexture 3. SurfaceTexture 和 EGL 共同生成了 GLContext 4. GLThread 綁定 GLContext 5. 通過 GLThread 調用 OpenGL api,以及 EGL api 6. 全景圖輸出到屏幕

    不清楚流程中這些概念的同學可能一臉懵逼,這都是啥???下面,我來一一簡單解釋一下

    3.1 EGL 是什么?

    EGL 是 OpenGL ES 渲染 API 和本地窗口系統(native platform window system)之間的一個中間接口層

    我的理解是,OpenGL 和屏幕硬件打交道的中間層,想要通過 OpenGL 將一些內容繪制到屏幕,必須通過 EGL

    3.2 GLContext 和 GLThread 是什么?

    GLContext 是調用 OpenGL Api 必須的上下文環境,其主要有 SurfaceTexture 和 EGL 的一些內容組成。調用 OpenGL api 的時候如果沒有環境,則會失敗。

    GLThread 其實就是一條普通的線程,只是綁上了 GLContext 后,就叫 GLThread 了

    3.3 SurfaceTexture

    Captures frames from an image stream as an OpenGL ES texture。把一張圖片作為 OpenGL ES 紋理

    這個類的作用我沒有深入研究,目前知道的是,SurfaceTexture 是 TextureView 和 EGL 之間通信的橋梁,想要通過 TextureView 調用 OpenGL,SurfaceTexture 也是必不可少的。

    3.4 再看整體流程

    大概知道每個環節的感念后,再看一下流程會感覺稍微清晰一點。

  • 通過 TextureView 和 EGL 準備好一個 GLContext
  • 準備一個 GLThread,并綁定好 GLContext
  • 通過 GLThread 調用 OpenGLApi 繪制出一個球
  • 通過 GLThread 調用 OpenGLApi 將全景圖"貼"到球上
  • 當然,技術細節遠不是上述4步這么容易,還有很多地方要細扣,比如怎么轉動視角?用 OpenGL 畫一個球的過程是什么?這些細節我還是會分散到后續的文章中介紹,敬請期待。

    感興趣的同學也可以自己先看源碼,https://github.com/androidZzT/VRPanoramaView ,記得給點個星星~

    三、完整技術棧

    圖3-技術棧

    圖中為項目里用到的技術,可能有遺漏,后面會再完善。

    轉文聲明

    如有文章轉載需求,請注明本文作者以及鏈接,感謝各位理解支持

    總結

    以上是生活随笔為你收集整理的让一个图片填满一个控件_如何在Android中实现一个全景图控件(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。