【正文】
逼真的 3D效果將被得到推崇。 不積跬步無(wú)以至千里,本論文能夠順利的完成,也歸功于各位指導(dǎo)老師的認(rèn)真負(fù)責(zé),使我能夠很好的掌握和運(yùn)用專業(yè)知識(shí),并在論文中得以體現(xiàn)。在此向老師表示深深的感謝和崇高的敬意。 但盡管手機(jī)在硬件和軟件上得到了發(fā)展,其計(jì)算能力還十分有限,還有待進(jìn)一步提高。 (getHolder())。 代碼 總結(jié) 使用模擬 3D主題樣式,應(yīng)用程序運(yùn)行得十分順暢;但使用 OpenGL ES 繪制的 3D效果,會(huì)導(dǎo)致手機(jī)出現(xiàn)卡機(jī)現(xiàn)象。 //關(guān)閉背面剪裁 /*** 恢復(fù)矩陣 */ ()。 ()。具體代碼如代碼 。 (gl)。 //打開(kāi)背面剪裁 //總繪制思想:通過(guò)把一個(gè)顏色矩形旋轉(zhuǎn)移位到立方體每個(gè)面的位置 //繪制立方體的每個(gè)面 //沿 y軸上升 SCALE個(gè)單位,使底面 y=0 (0, *, 0)。 在最終實(shí)現(xiàn)的效果圖上可以看到:場(chǎng)景中心有一個(gè)每個(gè)側(cè)面都 一樣的立方體。 // 啟用深度檢測(cè),被遮擋的物體不會(huì)被繪制 // 繪制立方體 (gl)。 // 初始化燈光效果 initMaterialWhite(gl)。 public void onDrawFrame(GL10 gl) { ?? 省略部分代碼 /** * 1,繪制反射面 :y=0;需關(guān)閉深度檢測(cè),并打開(kāi)混合模式 */ // 開(kāi)啟混合 ()。 如圖 是開(kāi)啟混合后的效果。 否則,表示當(dāng)前要繪制的圖形在已繪制的部分物體后面,則無(wú)需繪制該圖形。 在繪制 3D 場(chǎng)景 時(shí),將只繪制可見(jiàn)的面而不去繪制隱藏的面,這個(gè)過(guò)程叫 消隱( Hidden surface removal) ,采用的算法為 深度 緩沖算法( The depth buffer algorithm),算法描述的整個(gè) 過(guò)程也稱為深度 檢測(cè)( Depth Test)。但這些光照效果并不能倒影等鏡像效果;加之,在使用編程的方式繪制的場(chǎng)景中,每個(gè)場(chǎng)景元素都被繪制地十分細(xì)致清晰;因此,場(chǎng)景缺乏真實(shí)感,而且地面上的物體即使它們的底面 Y坐標(biāo)與地面相等,但看起來(lái) 卻像是懸空的(如圖 )。 //計(jì)算中點(diǎn) :獲取 xz比值 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 29頁(yè) 代碼 鏡像技術(shù) float normalZ = (positionZs[index] + positionZs[(index + 1) % number]) / 2。 float positionZs[] = new float[number]。計(jì)算公式如下: moveX = PARAM * X / (X + Z)。從圖中可以發(fā)現(xiàn),圖像鋪滿了 N棱體的每一個(gè)側(cè)面,當(dāng) N 值較大時(shí), N棱體每 個(gè)側(cè)面的夾角接近 180 度,用戶可能無(wú)法區(qū)分圖像的邊界,因此也無(wú)法獲知如何選取相對(duì)應(yīng)的圖像來(lái)到達(dá)相對(duì)應(yīng)的 Workspace 子視圖。 圖 方案二原理圖 優(yōu)點(diǎn):與方案一相同,同樣通過(guò)數(shù)學(xué)運(yùn)算簡(jiǎn)單,可以輕易得到坐標(biāo)值。 缺點(diǎn):圓半徑固定,圖像在 屏幕中的大小會(huì)隨著 N值增大而變小。而 如何獲得棱體側(cè)面中每幅圖像四個(gè)點(diǎn)的坐標(biāo)值是坐標(biāo)計(jì)算中最大的難題 。 ()。 在整個(gè)轉(zhuǎn)屏階段,只涉及 Workspace 中的兩個(gè)特定子視圖而已。 bitmaps[0] = (page1).getDrawingCache()。} if (mdirection == DIR_LEFT) { page1 = currentScreen。 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 19頁(yè) 代碼 然后,調(diào)用 Workspace 的 invalidate()方法,觸發(fā)其重繪屏幕。 (, , )。 在本論文的工程開(kāi)發(fā)中,就是使用了第三種解決方案,具體代碼如代碼 。 //散射光為白色材質(zhì) (, ,diffuseMaterial, 0)。物體上的每一點(diǎn)對(duì)應(yīng)一組紋理坐標(biāo) s、 t,在對(duì)紋理進(jìn)行粘貼之前要根據(jù)其所應(yīng)用的片段進(jìn)行排列。 // 反射光設(shè)置 (, , specularParams, 0)。點(diǎn)平均法向量過(guò)渡平滑,比較適合表面平 滑、沒(méi)有棱角的物體,如茶壺、圓柱面、球等 ② 。 但由于一個(gè)三維坐標(biāo)系中的點(diǎn)有可能在多個(gè)平面中,因此會(huì)有兩種計(jì)算方法來(lái)計(jì)算該點(diǎn)的法向量,分別是面法向量和點(diǎn)平均法向量。 specular 即鏡面光,鏡面光來(lái)自一個(gè)特定的方向,并且傾向于從表面向某個(gè)特定的方向反射。 ambient 即環(huán)境光,表示一個(gè)特定的光源在場(chǎng)景中所添加的環(huán)境光的 RGBA 強(qiáng)度。 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 14頁(yè) 代碼 光照效果 光照使物體看起來(lái)更立體。 圖 OpenGL ES 管道的結(jié)構(gòu)圖 投影方式 在 OpenGL ES 中支持兩種投影方式:正交投影和透視投影 ① 。 /**處理傳遞過(guò)來(lái)的所有觸摸事件 */ void destroy()。 如果接收到的是 事件,那么就把當(dāng)前的觸摸坐標(biāo)記錄為前一次觸摸坐標(biāo)以及保持觸摸狀態(tài)不變,并按照某種方式進(jìn)行轉(zhuǎn)動(dòng)屏幕。觸摸狀態(tài)改為 RESET。判斷的規(guī)則如下: 事件首先會(huì)傳遞到 onInterceptTouchEvent()方法 如果 父視圖 的 onInterceptTouchEvent(MotionEvent)方法 在接收到 事件處理完成之后 返回 false,那么后續(xù)的, 等事件將繼續(xù)會(huì)先傳遞給該 父視圖 ,之后才和 事件 一起 傳遞給 下一級(jí) 的目標(biāo) 子視圖 的. Workspace (ViewGroup) . CellLayout (ViewGroup) (FrameLayout) SlidingDrawer (FrameLayout) . CellLayout (ViewGroup) . CellLayout (ViewGroup) . HandlerView (ImageView) . AllAppsGirdView (GirdView) 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 10頁(yè) onTouchEvent(MotionEvent)處理。 界面模型 圖 Launcher 界面模型 CellLayout(由 N 個(gè) cellLayout 組成的workspace) 狀態(tài)欄 垃圾桶 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 9 頁(yè) 圖 HomeScreen 基本結(jié)構(gòu)圖 由于 Launcher 需要管理各種圖標(biāo)等,而 Android 自帶的視圖不足以實(shí)現(xiàn)如此復(fù)雜的界面。 在本論文的工程中, Workspace 類中通過(guò) java 反射機(jī)制來(lái)實(shí)例化當(dāng)前主題樣式 proxy,并在相應(yīng)的方法中調(diào)用 proxy 的相應(yīng)方法。主要是由于在三維場(chǎng)景到二維屏幕的轉(zhuǎn)換過(guò)程需要大量的計(jì)算,而且這種計(jì)算需要重復(fù)地運(yùn)行,可是移動(dòng)設(shè)備難以承擔(dān)這種計(jì)算負(fù)載。 關(guān)鍵詞: 安卓,桌面主題, OpenGL ES, Launcher, 3D,開(kāi)發(fā) ① google 公司官網(wǎng) . ② 安卓開(kāi)發(fā)者官網(wǎng) . ③ 本論文第 3 章將會(huì)介紹 ④ 本論文第 4 章將會(huì)介紹 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 3 頁(yè) ABSTRACT 2020,google has developed the Android smartphone operating system, which swept the world, making software engineers to develop on this system. And this thesis is to discuss the development of 3d desktop(the simulate 3D desktop and the 3D desktop based on OpenGL ES) based on the Android smart phone operating system and its optimized performance, in order to have a deeper understanding of the 3D development and put forward the views in the field. Both the simulate 3D desktop and the 3D desktop based on OpenGL ES are to modify the class named Workspace in the Android Launcher code. The difference is that this two desktop change screen in different ways to achieve the jump between Workspace child views. When changing screen, the simulate 3D desktop is to draw two images of the two related child views on the same screen at a fixed angle, a different visual direction. However, the 3D desktop based on OpenGL ES is to draw a N prism in the 3D scene, and each side of the prism is a corresponding image of the Workspace child view. Entering the corresponding child view of Workspace when user selects a side of the prism. Key Words: Android , Desktop Themes, OpenGL ES, Launcher,3D,develop 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 4 頁(yè) 目錄 中文摘要 .............................................................. 1 ABSTRACT ............................................................. 3 目錄 ................................................................. 4 第 1 章 引言 ........................................................... 6 第 2 章 關(guān)鍵技術(shù)介紹 ................................................... 7 JAVA 反射機(jī)制 ......................................................... 7 Android Launcher ...................................................... 7 界面模型 .......................................................... 8 觸摸事件處理 ...................................................... 9 Launcher 開(kāi)發(fā) ..................................................... 10 Opengl ES 標(biāo)準(zhǔn) ....................................................... 11 Opengl 標(biāo)準(zhǔn)簡(jiǎn)介 ................................................... 11 OpenGL ES 管道 .................................................... 12 投影方式 ......................................................... 12 光照效果 ......................................................... 14 法向量 ........................................................... 15 物體的材質(zhì) .................................................