freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android手機(jī)系統(tǒng)的3d桌面主題開(kāi)發(fā)畢業(yè)論文-預(yù)覽頁(yè)

 

【正文】 了繪制整個(gè) Launcher 界面模型的類關(guān)系圖。 如果該 父視圖 的 onInterceptTouchEvent(MotionEvent)在接收到 事件處理完成之后返回 true,那么后續(xù)的, 等事件將不再傳遞給 該父視圖的onInterceptTouchEvent(MotionEvent),而是和 事件 一起 傳遞給該 父視圖 的 onTouchEvent(MotionEvent)處理, 而 目標(biāo) 子視圖 將接收不到任何事件。那如何進(jìn)行 Launcher 開(kāi)發(fā)呢?一般Launcher 開(kāi)發(fā)都是基于改善和修改以下幾個(gè)方面: 轉(zhuǎn)屏方式; 布局方式; 事件處理方式; 應(yīng)用程序列表的展現(xiàn)方式; 本論文主要基于轉(zhuǎn)屏方式的應(yīng)用以及改善,改變系統(tǒng)默認(rèn)的滑屏方式,以 3D 轉(zhuǎn)屏方式取而代之,體現(xiàn)了較好的用戶體驗(yàn)。 如果接收到的是 事件,那么就計(jì)算當(dāng)前觸摸坐標(biāo)與前一次觸摸坐標(biāo)是否超出了某個(gè)值。 最后,如果觸摸狀態(tài)為 SCROLLING,則把當(dāng)前及后續(xù)事件傳遞給onTouchEvent(MotionEvent)處理;否則, onInterceptTouchEvent(MotionEvent)繼續(xù)處理后續(xù)事件。 如果接收到的是 事件,那么就把觸摸狀態(tài)改為 RESET,并繪制當(dāng)前滑動(dòng)到達(dá)的子視圖。 代碼 Opengl ES 標(biāo)準(zhǔn) Opengl 標(biāo)準(zhǔn)簡(jiǎn)介 /**主題樣式接口 */ public interface WorkspaceProxy { void dispatchDraw(Canvas canvas)。/**釋放資源 */ } 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 12頁(yè) 圖 OpenGL 和 OpenGL ES 之間的關(guān)系圖 OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 三維圖形 API 的子集, 定義了一個(gè)在移動(dòng)平臺(tái)上能夠支持 OpenGL 最基本功能的精簡(jiǎn)標(biāo)準(zhǔn),以適應(yīng)如手機(jī), PDA或其它消費(fèi)者移動(dòng)終端的顯示系統(tǒng) 。主 CPU 發(fā)出一個(gè)繪圖指令,對(duì)頂點(diǎn)數(shù)組進(jìn)行指定的坐標(biāo)變換或 光照處理。 所謂的正交投影是平行投影的一種,觀察者的實(shí)現(xiàn)是平行的,不產(chǎn)生真實(shí)世界遠(yuǎn)大近小的透視效果。通過(guò)透視投影,可以產(chǎn)生現(xiàn)實(shí)世界中的近大遠(yuǎn)小的效果。如果沒(méi)有光照,絕大多數(shù)物體看上去甚至不像三維物體。而定位光對(duì)應(yīng)的是光源在某一具體位置的光。在默認(rèn)情況下,不存在環(huán)境光。但是當(dāng)散射光撞擊物體表面時(shí),它就會(huì)向四面八方均勻地發(fā)散。鏡面光肉眼看起來(lái)是物體上最亮的地方。 // 投影矩陣參數(shù) :可視體 ?? 省略部分代碼 } /** * 初始化燈光效果 */ private void initLight(GL10 gl) { 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 15頁(yè) 代碼 法向量 物體每個(gè)頂點(diǎn)的法向量決定了光照時(shí)的反射情況,如果沒(méi)有為頂點(diǎn)設(shè)置法向量,光照系統(tǒng)也是不能正常工作的。 面法向量是指當(dāng)立體物體中一個(gè)頂點(diǎn)位于某個(gè)三角形面上時(shí),為其分配屬于面的法向量。如立方體中每個(gè)頂點(diǎn)屬于 3個(gè)面,因此每個(gè)頂點(diǎn)的法向量就是 3 個(gè)面法向量的平均值。 物體的材質(zhì) 設(shè)置材質(zhì)的主要工作就是設(shè)置材質(zhì)對(duì)于環(huán)境光、散射光、鏡面光的發(fā)射能力,也就是說(shuō)此安置能反射什么顏色的光。 float diffuseParams[] = { , , , }。 float positionParams[] = { cameraX, 0, cameraZ, 0 }。 紋理貼圖 在三維場(chǎng)景中,經(jīng)常需要把圖片等圖像信息顯示出來(lái),因此需要有一個(gè)機(jī)制能使二維圖像在三維場(chǎng)景中展現(xiàn),這就是紋理貼圖。對(duì)于二維的紋理圖,紋理坐標(biāo)在 S 和 T 方向上的范圍是 ~,但是進(jìn)行紋理貼圖的物體沒(méi)有坐標(biāo)范圍的限制。 使用合理的紋理拉伸方式,使得紋理能夠根據(jù)目標(biāo)平面的大小自動(dòng)重復(fù),這樣既private void initMaterialWhite(GL10 gl) { float ambientMaterial[] = { , , , }。 float specularMaterial[] = { , , , }。 } 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 17頁(yè) 不失去紋理圖的效果,也節(jié)省了內(nèi)存,提高了開(kāi)發(fā)效率。 代碼 ① 吳亞峰 蘇亞光 .Android 3D 游戲開(kāi)發(fā)技術(shù)詳解與典型案例 [M].北京 :電子工業(yè)出版社 .2020:P170– P171 /** 獲得紋理圖 ID*/ private int initTexture(GL10 gl, Bitmap bitmap) { int textures[] = new int[1]。//創(chuàng)建和使用紋理對(duì)象 (, , )。 (, 0, bitmap, 0)。 解決方案 在繪制圖像之前,必須獲取圖像,目前要獲取的圖像是 Workspace每個(gè)子視圖的 Bitmap圖像。即觸發(fā)其調(diào)用dispatchDraw(Canvas)方法 ① 。 ① Workspace 的 dispatchDraw(Canvas)方法繼承自 ViewGroup,負(fù)責(zé) ViewGroup 的重繪 private void calculateRotate() { ?? 省略部分代碼 /** * 依據(jù)第一次手勢(shì)移動(dòng)的方向,判斷轉(zhuǎn)屏?xí)r需繪制的兩個(gè)圖像( View)即屏幕。 page2 = (currentScreen + 1) % screenCount。 (page1).setBackgroundDrawable(wallpaperDrawable)。 (page2).buildDrawingCache()。在上述代碼中, mMatrix 把圖像看做一個(gè)矩形,源矩形四個(gè)點(diǎn)的二維坐標(biāo)存儲(chǔ)在 src浮點(diǎn)型數(shù)組中,而目標(biāo)矩形四個(gè)點(diǎn)的二維坐標(biāo)存儲(chǔ)在 dst 浮點(diǎn)型數(shù)組中, mMatrix 依據(jù)源矩形和目標(biāo)矩形的變化規(guī)則,在屏幕中源圖像就被繪制成目標(biāo)圖像(即方向、大小等都改變后的圖像)。因此,沒(méi)必要在每次轉(zhuǎn)屏前都獲取 Workspace 中所有子視圖的圖像。 (src, 0, dst, 0, 1)。 } 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 21頁(yè) 圖像。 其實(shí)現(xiàn)的關(guān)鍵點(diǎn)在于:如何熟練地使用數(shù)學(xué)知識(shí)快速準(zhǔn)確地計(jì)算出場(chǎng)景中每個(gè)點(diǎn)的三維坐標(biāo),并使用 OpenGL ES 知識(shí)快速地繪制場(chǎng)景中的每個(gè)元素;難點(diǎn)在于:如何使用鏡像技術(shù)繪制地板,使 N棱柱的每個(gè)側(cè)面在地板上都存在倒影 。目前有兩種解決方案,如下: 方案一 該方案思路依據(jù)是正 N 棱體的橫截面是一個(gè)正 N 邊形,正 N邊形的每個(gè)頂點(diǎn)一定在同一個(gè)圓上,因此 只要確定了該圓的圓心和半徑以及正 N棱體的高度,就可以確定整個(gè) N棱 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 24頁(yè) 體上所有點(diǎn)的坐標(biāo) 。 而每幅圖像的下頂點(diǎn) Y 坐標(biāo)的值都為零,即 Y = 0; 上頂點(diǎn) Y 坐標(biāo)的值都等于 N棱體的高度,即 Y = HEIGHT; 注: HEIGHT 為 N棱體的高度。當(dāng) N 值較大時(shí),圖像太小,不清晰;當(dāng) N 值較大時(shí),圖像太大,遮擋了所有視線。其中計(jì)算公式如下 : radius = WIDTH / (2 * SIN(360 / N)); X = radius * SIN( 360 * (n 1) / N); Z = radius * COS(360 * (n – 1 / N)); 注: radius 為圓的半徑; N 為圖像數(shù)量; n 為位于同一圓中的頂點(diǎn)序數(shù)(從 1開(kāi)始計(jì)算),如第一幅圖的左頂點(diǎn)序數(shù)為 1,第三幅圖的右頂點(diǎn)為 6。另外,無(wú)論 N值如何變化,用戶所看到的圖像大小都不會(huì)產(chǎn)生太大的變化,大小幾乎一樣。在 3D場(chǎng)景中,只要攝像機(jī)與 N棱體的距離足夠遠(yuǎn),就不會(huì)導(dǎo)致 N棱體的某些側(cè)面?zhèn)€在攝像機(jī)背后了,使得用戶無(wú)論從哪個(gè)角度看,最近的 N棱體側(cè)面都能看得到。所以,還需要使得每個(gè)圖像之間有一定的間隙以區(qū)分不同的圖像。具體移動(dòng)方式如下: 首先,依據(jù)各邊的兩個(gè)端點(diǎn)的 XZ 坐標(biāo),計(jì)算出各邊在 XOZ 平面中的移動(dòng)向量。 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 28頁(yè) moveZ = PARAM * Z / (X + Z)。 中點(diǎn) ((x1+x2)/2, (z1+z2)/2) 向量 (x1, z1) (x2, z2) public Rotation(float radius, float height, int textureIds[]) { number = 。 for (int index = 0。} ?? 省略部分代碼 for (int index = 0。 float sum = (normalX) + (normalZ)。 ?? 省略部分代碼 } 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 30頁(yè) 圖 物體看似懸空 現(xiàn)實(shí)世界中,假設(shè)物體放置 在地面上,那么觀察者可以明顯地看到物體底面與地面是緊密接觸的,而不會(huì)產(chǎn)生懸空的感覺(jué)。 那么,如何解決物體被懸空問(wèn)題呢?這需要使用鏡像技術(shù)繪制場(chǎng)景,使場(chǎng)景中的元素都有在地面上的鏡像。 ① 因?yàn)榈孛嫠诘钠矫鏋?XOZ 平面 ② 按照?qǐng)鼍霸氐?Y 坐標(biāo)從小到大繪制 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 31頁(yè) 圖 Y0 的場(chǎng)景元素 圖 繪制 Y=0的地面 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 32頁(yè) 圖 繪制 Y0 的場(chǎng)景元素 從上面的截圖可以發(fā)現(xiàn),所有場(chǎng)景都已經(jīng)繪制出來(lái)了,但 Y0 的場(chǎng)景元素卻被上面的地板擋住了,顯然這并不是所需的效果。深度緩沖算法在 OpenGL ES 3D 繪制的過(guò)程中這個(gè)算法是自動(dòng)被采用的 。因此將初值這設(shè)為 相當(dāng)于清空 Depth Buffer。 因此,在繪制地面時(shí),由于地面距離攝像機(jī)更近,所以所有 Depth Buffer 值都被更新了,即鏡像不會(huì)被繪制 出來(lái)。所以需要開(kāi)啟 OpenGL ES的混合。 但美中不足的是,雖然把鏡像繪制出來(lái)了,物體也沒(méi)有懸空的錯(cuò)覺(jué),可是場(chǎng)景依然缺乏真實(shí)效果。先繪 制不透明地板,然后繪制鏡像,再繪制透明地板,最后繪制實(shí)際物體。 // 設(shè)置源混合因子與目標(biāo)混合因子 (, )。 (gl)。 // 初始化材質(zhì)為白色 (gl)。 (gl)。 // 繪制旋轉(zhuǎn)體 ()。 // 繪制 ()。一般情況下,首先需要把立方體的每個(gè)點(diǎn)坐標(biāo)都計(jì)算出來(lái),然后在內(nèi)存中創(chuàng)建浮點(diǎn)型緩沖區(qū),并放置立方體的坐標(biāo),最后調(diào)用繪制方法把立方體繪制出來(lái)。代碼 是具體代碼實(shí)現(xiàn)。 //繪制前小面 ()。 //繪制后小面 ()。 ()。 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 37頁(yè) 代碼 由于 3D場(chǎng)景進(jìn)入顯示階段后,仍需要不斷調(diào)用渲染器的 onDrawFrame(GL10)方法來(lái)不斷刷新重繪畫面。 (gl)。 (90, 1, 0, 0)。 //繪制右大面 ()。 (gl)。 } public void onSurfaceCreated(GL10 gl, EGLConfig config) { ?? 省略部分代碼 /*** 初始化場(chǎng)景元素 */ // 初始化紋理 floorTexId = initTexture(gl, bitmapFloor)。本程序中,使用了各種圖像資源等。經(jīng)分析,得出以下結(jié)論: 模擬 3D主題樣式只是對(duì)圖像進(jìn)行矩陣變換處理,計(jì)算量并不高,而且占用的內(nèi)存也很?。ㄏ喈?dāng)于記錄圖像以及矩陣數(shù)據(jù)所需內(nèi)存)。 /** * 計(jì)算攝像機(jī)坐標(biāo)參數(shù) */ caculateCameraParams()。 } 基于 Android手機(jī)系統(tǒng)的 3D桌面主題開(kāi)發(fā) 39頁(yè) OpenGL 的 3D場(chǎng)景中,會(huì)有各種的光照、色彩渲染、紋理粘貼等效果,需要對(duì)屏幕上的每個(gè)像素進(jìn)行 RGBA 計(jì)算,這將占用非常多的內(nèi)存資源及 cpu計(jì)算資源。 近幾年,無(wú)論是手機(jī)的硬件設(shè)備,還是 手機(jī)的軟件資源,都高速地發(fā)展。因此在選擇實(shí)現(xiàn)普通 3D 效果時(shí),首選是模擬 3D 效果,因其占用較少的計(jì)算資源。所以,對(duì) OpenGL ES 應(yīng)用程序的優(yōu)化,怎么要求都不為過(guò)。 同時(shí)要感謝項(xiàng)目開(kāi)發(fā)時(shí)帶領(lǐng)我們的老師,是他們帶著我一步步走進(jìn)實(shí)戰(zhàn)編程的世界,提高了我的開(kāi)發(fā)能力和思考
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1