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

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

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

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

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

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

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

在Android上主要使用OpenGL ES來進(jìn)行3D開發(fā)。OpenGL ES(OpenGL for Embedded Systems)是OpenGL三維圖形API的子集,針對手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。Android 1.5中帶的是OpenGL ES 1.0版本,它是以O(shè)penGL 1.3規(guī)范為基礎(chǔ)的。本文將對3D場景中物體的觸摸控制進(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)到正方形兩對邊的距離之和如果大于邊長,則該點(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è)自由度,大家自然會想到使用三個(gè)對應(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),因此并不會產(chǎn)生萬向節(jié)死鎖的問題。

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

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

axis=cross(V0,V1)

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

angle=ds*TOUCH_SCALE_FACTOR

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

三、結(jié)論

觸摸控制對于目前流行的3D游戲和3D桌面的開發(fā)都具有十分重要的意義,3D開發(fā)者們根據(jù)本文對觸摸控制所做的分析可以很好地理清思路,避開一些因?yàn)槠脚_不同碰到的瑣碎問題,節(jié)省開發(fā)時(shí)間。本文針對立方體這個(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ā)。

主站蜘蛛池模板: 国产成人1024精品下载| 国产99精品久久| 91精品啪在线观看国产60岁| 久久精品国产精品青草app| 免费一级成人毛片| 国产免费久久精品99re丫丫一| 成人精品亚洲| 国产AV毛片| 国产麻豆91网在线看| 1769国产精品视频免费观看| 国产69精品久久久久妇女| www.av男人.com| 99热免费在线| 思思热精品在线8| 91精品情国产情侣高潮对白蜜| 国产SUV精品一区二区6| 国产视频 第一页| 一区二区三区四区日韩| 91福利免费视频| 福利一区在线| 欧美亚洲第一页| 91黄视频在线观看| 99尹人香蕉国产免费天天拍| 美女一区二区在线观看| 国产一二三区在线| 女高中生自慰污污网站| 国产欧美日韩精品综合在线| 毛片免费视频| 欧美激情网址| 狠狠ⅴ日韩v欧美v天堂| 香蕉99国内自产自拍视频| 久久精品女人天堂aaa| 欧美亚洲欧美| 久久精品一品道久久精品| 国产剧情伊人| 五月丁香伊人啪啪手机免费观看| 免费人成网站在线观看欧美| 在线a视频免费观看| 99色亚洲国产精品11p| 国产成年女人特黄特色大片免费| 毛片三级在线观看| 99热这里只有免费国产精品| 久久免费精品琪琪| 成人日韩视频| 黑人巨大精品欧美一区二区区| 国产精品黄色片| 欧美日韩亚洲国产主播第一区| 亚洲国产成人超福利久久精品| a级毛片一区二区免费视频| 精品成人一区二区| 国产产在线精品亚洲aavv| 国产福利一区视频| 99视频国产精品| 久久综合丝袜日本网| 色综合久久88| 国产精品一区在线麻豆| 中文精品久久久久国产网址 | AV不卡在线永久免费观看| 久久青草视频| 亚洲视频a| 九色视频一区| 欧洲成人免费视频| 国产精品亚欧美一区二区 | 免费jjzz在在线播放国产| 国产丝袜无码精品| 青草91视频免费观看| 亚洲性影院| 日韩黄色在线| 88国产经典欧美一区二区三区| 国产视频久久久久| 精品五夜婷香蕉国产线看观看| 欧美影院久久| 四虎影视8848永久精品| 欧美国产在线一区| 国内精品小视频福利网址| 国产迷奸在线看| 欧美啪啪精品| 欧美日韩资源| 无码粉嫩虎白一线天在线观看| 中文字幕在线欧美| 欧美福利在线| 国产剧情一区二区|