999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

智能手機利用OpenGLES實現室內3D全景瀏覽的研究和實現

2014-04-29 00:00:00王溢達楊昱昺
科技創新與應用 2014年17期

摘 要:Android智能手機是目前應用最廣泛的智能手機平臺。目前,在Android的平臺上能將一個景點制作成360度全景觀賞的APP還很少見,但此類APP可以幫助人們更好了解景區情況。因此此類APP有一定研究價值和實現必要。本文詳細介紹了如何利用Android中自帶的OpenGLES庫來實現360度全景觀賞的功能。為廣大Android智能手機愛好者提供寶貴的參考價值。

關鍵詞:Android;OpenGLES;360度3D全景;景點觀賞

引言

OpenGLES是(OpenGL for Embedded Systems) 是OpenGL三維圖形API的子集,針對手機、PDA和游戲主機等嵌入式設備而設計。因此OpenGLES是OpenGL的裁剪版,OpenGL(Open Graphics Library)是個定義了一個跨編程語言、跨平臺的應用程序接口(API)的規范,它用于生成二維、三維圖像。這個接口由近三百五十個不同的函數調用組成,用來從簡單的圖形比特繪制復雜的三維景象。

利用OpenGLES來構建3D的模型,有利于對系統GPU的運用,可以提高運算效率,可以提升生成的三維景象的質量。Android中OpenGLES的計算都基于三角形,多么復雜的形狀都源于三角形的組合。

由于三角形只需要提供三個坐標(按一定順序)則可以創造一個唯一的三角形和他的紋理坐標。之后我們利用三角形組成多邊形。在OpenGLES的紋理映射的規則中,根據提供的按順序的三點坐標,可容易對齊紋理的位置和形狀,這是三角形的優勢。

1 具體原理

1.1 由三角形組成球

之前提過OpenGLES中最小的圖形是三角形,全部的圖形由三角形的組成而成,因此構建曲面物體最重要的就是找到將曲面恰當拆分成三角形的策略。最基本的策略是首先按照一定的規則將物體按行和列兩個方向進行拆分,這時就可以得到很多的小四邊形。然后再將每個小四邊形拆分成兩個三角形即可,對曲面物體進行拆分時,拆分得越細,最終的繪制結果就越接近想要結果,如圖1所示。

圖1 三角形組成球原理圖

從圖1可看出,分的越細,效果越接近球。但不是越細越好,分的過多,將導致頂點數量過多,渲染速度大大降低。我們這里將球看作20面體來細分。

1.2 從紋理角度解釋球

由于球是由三角形的組合構成的20面體,為了將原來準備好的紋理貼圖,按紋理規則貼圖到20面體上,OpenGL紋理映射的大致步驟是:(1)創建紋理對象,并為他指定一個紋理。(2)確定紋理如何應用到每個像素上。(3)啟用紋理貼圖。(4)繪制場景,提供紋理和幾何坐標。由于球是由很多三角形組成,因此紋理指定是也是三角形指定。球形的指定方法如圖2:

圖2 球體頂點紋理坐標生成

從圖2中可以看出,根據右圖中每個頂點對應的S軸,T軸的位置可以非常方便地計算出每個頂點的紋理坐標。而矩形里面的頂點都是通過拓補變換來自于球面上的頂點,與球面上的頂點一一對應,因此球面上每個頂點的紋理坐標就可以很方便的計算出來。其中,拓補變換是拓補幾何中的一種變換,拓補變換前后的兩個圖形是拓補全等。簡單來說拓補變換就是不產生新頂點以及不改變頂點與頂點之間邊連接情況的前提下,任意的將頂點移動,這時連接這些頂點的邊也可能被相應的拉伸、縮短和旋轉。舉例:圖2中的紋理貼圖(0,1),(0.25,1),(0.5,1),(0.75,1),(1,1)這5個點,被拓補之后位移成一個點,他們之間的邊也縮短為0,實際他們都是南極點。這樣的變換是合理的,因為接下來會提到360度全景拍攝的要點“取材”,是使用了魚眼鏡頭。具體代碼實現:

GLES20.glUseProgram(mProgram);

//將最終變換矩陣傳入著色器程序

GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, 1, MatrixState.getFinalMatrix(), 0);

//將位置、旋轉變換矩陣傳入著色器程序

GLES20.glUniformMatrix4fv(muMMatrixHandle, 1, 1, MatrixState.getMMatrix(), 0);

//將攝像機位置傳入著色器程序

GLES20.glUniform3fv(maCameraHandle, 1, MatrixState.cameraFB); //將光源位置傳入著色器程序

GLES20.glUniform3fv(maSunLightLocationHandle, 1, MatrixState.lightPositionFBSun);

GLES20.glVertexAttribPointer(//為畫筆指定頂點位置數據

maPositionHandle,3,GLES20.GL_FLOAT,1,3*4,

mVertexBuffer);

GLES20.glVertexAttribPointer( //為畫筆指定頂點紋理數據

maTexCoorHandle,2,GLES20.GL_FLOAT,1,2*4,

mTexCoorBuffe);

GLES20.glVertexAttribPointer //為畫筆指定頂點法向量數據

(maNormalHandle, 4, GLES20.GL_FLOAT, 1,3*4,

mVertexBuffer); //允許頂點位置數據數組

GLES20.glEnableVertexAttribArray(maPositionHandle);

GLES20.glEnableVertexAttribArray(maTexCoorHandle);

GLES20.glEnableVertexAttribArray(maNormalHandle); //綁定紋理

GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texId);

GLES20.glActiveTexture(GLES20.GL_TEXTURE1);

GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texIdNight);

GLES20.glUniform1i(uDayTexHandle, 0);

GLES20.glUniform1i(uNightTexHandle, 1);

//繪制三角形

GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vCount);

……

1.3 360度全景的關鍵-魚眼鏡頭拍攝

由上文,我們知道紋理左邊再處理時進行了拓補變換,因此我們若用普通的鏡頭拍攝將會有一定的變形,雖然圖片的中心“赤道”部分的拓補變換較小,而且我們觀看的大部分內容皆在“赤道部分”,但考慮到若想模擬人“抬頭”和“低頭”這2個動作的時候出現的扭曲,仍應采取魚眼鏡頭拍攝更佳。

魚眼鏡頭是一種焦距為16mm或更短的并且視角接近或等于180度。這種攝像鏡頭的前鏡直徑很短且呈拋物狀向鏡頭前部突出。為了達到180度的超大視角,魚眼鏡頭拍攝得出的照片出了畫面中心的景物不變,其他都發生了改變,之后我們配合iPhone中的全景拍攝功能,會發現出了中心的景物改變不大之外,上下邊緣的景物被拉伸過,經過拓補變化則正好還原成正常圖片。如圖3。

圖3 魚眼鏡頭拍攝結果

從圖3可看出上下是有進行過一定的變換,若經過拓補變換反而會使之正常化。

2 測試結果

(1)選擇想要看的地方;(2)點擊全景觀賞;(3)可以看到360度的展示。

具體結果如圖4:

3 結束語

智能手機通過OpenGLES將景點360度全方位展示給用戶,主要是利用了曲面體的拆分和紋理的拓補,將紋理圖片貼到球的內部。通過這樣的處理,最后我們將攝像機(Camera)放置在圓心,并設置觸屏動作,以達到虛擬現實的效果。

參考文獻

[1]吳亞峰.Android3D游戲開發技術寶典-OpenGL ES2.0[J].科學技術與工程,2012.

[2]李印思.基于OpenGL的三維交互建模技術及其應用[J].機械設計及理論,2012.

[3]張祖勛,蘇國中,鄭順義,等.OpenGL成像機理及其與攝影測量方位元素的相關分析[J].科學技術與工程,2012.

[4]李保杰,于法展,李戰成,等.基于OpenGL虛擬校園漫游系統的設計與實現[J].科學技術與工程,2006.

[5]馬杰,王晶,黃秋萍.OpenGL ES在Android平臺上3D繪圖的兩種方式分析與實現[J].科學技術與工程,2013,12.

作者簡介:

楊昱 (1969-),男,副教授,研究方向:軟件開發,文本檢索。

主站蜘蛛池模板: 内射人妻无套中出无码| 中文毛片无遮挡播放免费| 无码区日韩专区免费系列| 亚洲日韩第九十九页| 无码粉嫩虎白一线天在线观看| 国产亚洲精| 伊人久久大香线蕉综合影视| 亚洲精品成人7777在线观看| 国产午夜看片| 亚洲视频二| 日韩精品欧美国产在线| 国产69精品久久久久孕妇大杂乱 | 国产一区二区三区精品欧美日韩| 成人精品区| 青青青国产精品国产精品美女| 免费一级成人毛片| 人妻一本久道久久综合久久鬼色| 国产精品手机视频| 狼友av永久网站免费观看| 亚洲色偷偷偷鲁综合| 亚洲 欧美 日韩综合一区| 国产永久免费视频m3u8| 国产特级毛片aaaaaaa高清| 欧美曰批视频免费播放免费| 欧美精品成人| 亚洲自拍另类| 国产无码在线调教| 精品色综合| 免费毛片在线| 亚洲成年人网| 欧美日本在线一区二区三区| 四虎免费视频网站| 国产日韩丝袜一二三区| 成人一级免费视频| 99这里只有精品在线| 中国美女**毛片录像在线| 四虎精品国产AV二区| 69视频国产| 免费jjzz在在线播放国产| 日本午夜三级| 亚洲一级毛片在线观| 国产精品视频系列专区| 欧洲成人在线观看| 欧美日韩导航| 日本福利视频网站| 午夜欧美理论2019理论| 2021亚洲精品不卡a| 国产无码精品在线播放| 亚洲制服丝袜第一页| 精品撒尿视频一区二区三区| 在线看免费无码av天堂的| 免费在线色| 香蕉综合在线视频91| 欧洲高清无码在线| 极品私人尤物在线精品首页| 一区二区影院| 国产91丝袜在线播放动漫 | 亚洲精品无码久久久久苍井空| 亚洲无码视频一区二区三区| 熟女成人国产精品视频| 婷婷六月综合网| 亚洲高清中文字幕在线看不卡| 日韩精品毛片人妻AV不卡| 国产精品久久久久无码网站| 99热国产在线精品99| 波多野结衣第一页| 国产麻豆91网在线看| 无码中字出轨中文人妻中文中| 毛片在线看网站| 91蝌蚪视频在线观看| 91久久夜色精品国产网站| 国产精品久久久久鬼色| 国产免费久久精品99re不卡 | 黄色网页在线播放| 成人国产一区二区三区| 色婷婷丁香| 欧美在线免费| 国模视频一区二区| 国产精品午夜电影| 青青青视频免费一区二区| 日本免费一级视频| 国产黑丝视频在线观看|