亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android的三維物體的觸摸控制

        2009-07-01 02:42:24陳建偉
        新媒體研究 2009年23期

        [摘要]Android平臺(tái)是手機(jī)界的一股新生力量,它是完全免費(fèi)并開源的,在Android上主要使用OpenGL ES來進(jìn)行3D開發(fā)。因此,將探討在3D場(chǎng)景中如何實(shí)現(xiàn)對(duì)三維物體的觸摸控制,比如如何選中,移動(dòng),旋轉(zhuǎn)等,并給出一個(gè)比較高效的選中物體的算法和一個(gè)簡單實(shí)用的旋轉(zhuǎn)物體的算法,以及在此基礎(chǔ)上開發(fā)一個(gè)簡單的魔方游戲,游戲程序在:http://sites.google.com/site/quillchan/android。

        [關(guān)鍵詞]AndroidOpenGL ES觸摸控制三維選中三維旋轉(zhuǎn)

        中圖分類號(hào):TP2文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)1210091-01

        Android是Google開發(fā)的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)。它包括操作系統(tǒng)、用戶界面和應(yīng)用程序——移動(dòng)電話工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。

        在Android上主要使用OpenGL ES來進(jìn)行3D開發(fā)。OpenGL ES(OpenGL for Embedded Systems)是OpenGL三維圖形API的子集,針對(duì)手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。Android 1.5中帶的是OpenGL ES 1.0版本,它是以O(shè)penGL 1.3規(guī)范為基礎(chǔ)的。本文將對(duì)3D場(chǎng)景中物體的觸摸控制進(jìn)行研究,并給出實(shí)現(xiàn)的算法。本文所做的論述都是基于Android 1.5,OpenGL ES 1.0。

        一、如何選中三維物體

        OpenGL ES并沒有像OpenGL一樣提供有選擇模式,因此需要自己去實(shí)現(xiàn)選中物體。

        算法思路:作一條直線,該直線經(jīng)過屏幕上的觸點(diǎn)并且與屏幕垂直;求出該直線在世界坐標(biāo)系中的方程,然后再判斷該直線與三維物體是否有交點(diǎn),如有交點(diǎn),則選中該物體。

        下面以立方體為例(不規(guī)則的三維物體都可以轉(zhuǎn)化為規(guī)則物體來操作),來說明一下算法的具體過程。設(shè)(x,y)為觸點(diǎn)的屏幕坐標(biāo),則得到視點(diǎn)坐標(biāo)為(x,windowHeighty),記作(winX,winY)。分別給該點(diǎn)配上深度坐標(biāo),得到兩點(diǎn)A1(winX,winy,0),A2(winX,winy,1)。通過gluUnProject轉(zhuǎn)化到世界坐標(biāo),得到世界坐標(biāo)系下一條直線的兩點(diǎn):

        GluUnProject(A1)-->S2(Sx2,Sy2,Sz2)

        GluUnProject(A2)-->E2(Ex2,Ey2,Ez2)

        現(xiàn)在問題就剩如何求直線與立方體的交點(diǎn)了。立方體一共有六個(gè)面,建立模型的時(shí)候頂點(diǎn)坐標(biāo)都是已知的,因此可以得到立方體每個(gè)面的空間方程表示,再分別求出每個(gè)面與直線的交點(diǎn)。

        1.設(shè)平面上3點(diǎn)為ptA,ptB,ptC;構(gòu)造一個(gè)平面:

        plane(ptA,ptB,ptC)。

        2.再根據(jù)兩點(diǎn)構(gòu)造一條直線:

        line(S2,E2)。

        3.求出交點(diǎn):

        crossPoint=cross(plane,line)。

        4.再判斷該點(diǎn)是否在相交平面的正方形內(nèi)(點(diǎn)到正方形兩對(duì)邊的距離之和如果大于邊長,則該點(diǎn)在正方形外部),如果是,說明選中了該物體。

        5.為了提高效率,可以先判斷立方體都有哪些面朝向屏幕外側(cè),然后再計(jì)算這些面與直線的交點(diǎn)就可以了。方法如下:由兩點(diǎn)S2,E2得到一個(gè)向量E2->S2(朝向屏幕外側(cè)),分別求該向量與立方體各個(gè)面的法線(方向朝外)的夾角,如果夾角小于90度,說明該面朝向屏幕外側(cè),進(jìn)而判斷直線與該面的交點(diǎn)是否落在這個(gè)面上。

        先求平面朝外的法向量,設(shè)平面上的三點(diǎn)ptA,ptB,ptC(點(diǎn)的順序要按照右手法則):normal=(ptBptA)X(ptCptA)(X代表向量叉乘)。

        再求E2->S2和法向量的夾角余弦值,如果余弦值大于零小于一,說明夾角小于90度,該面朝向屏幕外側(cè)。

        二、如何旋轉(zhuǎn)三維物體

        三維空間的旋轉(zhuǎn)有三個(gè)自由度,大家自然會(huì)想到使用三個(gè)對(duì)應(yīng)于三條坐標(biāo)軸的角度去記錄,即:

        GlRotatef(ax,1,0,0)

        GlRotatef(ay,0,1,0)

        GlRotatef(az,0,0,1)

        這就是我們通常所說的Euler Angle方法。但是這種方法存在一個(gè)萬向節(jié)死鎖的問題。

        如何來避免萬向節(jié)死鎖呢?實(shí)際上數(shù)學(xué)上有種偏軸角(Axis Angle)的定義。先定出兩個(gè)旋轉(zhuǎn)向量,然后求出他們之間的最少旋轉(zhuǎn)角度,再繞這兩個(gè)向量的法線旋轉(zhuǎn)該角度即可。由于每次只繞一個(gè)固定的軸旋轉(zhuǎn),因此并不會(huì)產(chǎn)生萬向節(jié)死鎖的問題。

        這里我自己實(shí)現(xiàn)了一種類似于偏軸角的旋轉(zhuǎn)定義,但是比偏軸角的方法更符合用戶在屏幕上的旋轉(zhuǎn)操作。方法是通過將觸點(diǎn)映射到三維坐標(biāo)上,對(duì)前后相鄰的兩個(gè)觸點(diǎn)(手指滑動(dòng)形成)作一條直線,該條直線和垂直于屏幕的另一條直線形成一個(gè)平面,該平面的法線即是物體的旋轉(zhuǎn)軸,再通過觸點(diǎn)的位移得到合適的旋轉(zhuǎn)角度,把物體繞該法線旋轉(zhuǎn)即可。

        記手指在屏幕上滑動(dòng)形成的向量為V0;垂直于屏幕向外的向量為V1;則可得到旋轉(zhuǎn)軸:

        axis=cross(V0,V1)

        記手指在屏幕上滑動(dòng)的距離為ds;通過設(shè)定屏幕大小和角度的比例因子TOUCH_SCALE_FACTOR,得旋轉(zhuǎn)角度:

        angle=ds*TOUCH_SCALE_FACTOR

        從而對(duì)物體進(jìn)行旋轉(zhuǎn)glRotatef(angle,axis.x,axis.y,axis.z)。

        三、結(jié)論

        觸摸控制對(duì)于目前流行的3D游戲和3D桌面的開發(fā)都具有十分重要的意義,3D開發(fā)者們根據(jù)本文對(duì)觸摸控制所做的分析可以很好地理清思路,避開一些因?yàn)槠脚_(tái)不同碰到的瑣碎問題,節(jié)省開發(fā)時(shí)間。本文針對(duì)立方體這個(gè)特例在選中和旋轉(zhuǎn)物體的時(shí)候提供了高效的算法,也可以為別的規(guī)則的空間模型提供一個(gè)參考,具體的算法實(shí)現(xiàn)起來不同,思路大同小異。

        參考文獻(xiàn):

        [1]Foley van Dam,Feiner,Hughes.Introduction to computer graphics [M].[s.1.]:Addison-Wesley Publishing.

        [2]Dava Shreiner,OPENGL編程指南[M].北京:機(jī)械工業(yè)出版社,2008.

        [3]Samual R.Buss,3D計(jì)算機(jī)圖形學(xué)(OPENGL版)[M].北京:清華大學(xué)出版社,2006.

        作者簡介:

        陳建偉,碩士,主要研究領(lǐng)域:手機(jī)嵌入式系統(tǒng),Android應(yīng)用開發(fā)。

        久久www色情成人免费观看| 少妇精品偷拍高潮少妇在线观看| 国产精品大片一区二区三区四区| 亚洲av国产av综合av卡| 无码熟妇人妻av在线影片| 亚洲黄色在线看| 蜜桃视频一区二区三区| 亚洲性无码av中文字幕| 国产高清在线精品一区二区三区| 国产一区二区精品尤物| 中文字幕中文字幕人妻黑丝| 一二三区无线乱码中文在线| 国产女人高潮叫床视频| 人妻少妇偷人精品无码| 久久国产劲爆内射日本| 亚洲国产国语在线对白观看| 欧美日韩国产码高清综合人成 | 午夜影视啪啪免费体验区入口| 日韩亚洲精选一区二区三区| 99国产精品久久久久久久成人热| 免费精品一区二区三区第35| 亚洲精品国产老熟女久久| 日本一道本加勒比东京热| 美女张开腿黄网站免费| 亚洲一区av无码少妇电影 | 精品激情成人影院在线播放| 国产成人无码一区二区在线播放| 国产精品爽爽va在线观看网站| 青青草是针对华人绿色超碰| 亚洲精品一区二区国产精华液 | 黄色中文字幕视频网站| 亚洲人成在线播放网站| 亚洲精品欧美二区三区中文字幕| 国产精品日日摸夜夜添夜夜添 | 青青河边草免费在线看的视频| 少妇私密会所按摩到高潮呻吟| 国产精品成人午夜久久| 亚洲乱码中文字幕第一页| 亚洲熟妇av一区| 成年视频国产免费观看| 亚洲综合精品一区二区三区|