版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、J2ME 在三維可視化中的應(yīng)用摘要 :首先系統(tǒng)地介紹了 J2ME 由來(lái)及其體系結(jié)構(gòu) ,然 后詳細(xì)描述了移動(dòng) 3D 圖形 API 在三維可視化中的具體實(shí)現(xiàn) , 包括 3D 對(duì)象的定義和模型渲染 ,以及為增加可視化真實(shí)性的 光照和紋理映射。關(guān)鍵詞 :三維可視化 ;J2ME(Java 2,Micro Edition);JSR184; 配置 ;簡(jiǎn)表中圖分類號(hào) :TP311 文獻(xiàn)標(biāo)識(shí)碼 :A 文章編 號(hào):1009-3044(2009)13-3535-031 引言隨著移動(dòng)計(jì)算和無(wú)線通信技術(shù)的發(fā)展 ,特別是移動(dòng)三維 可視化技術(shù)的不斷成熟 ,移動(dòng)終端迎來(lái)了 3D 時(shí)代。 J2ME 由 于其跨平臺(tái)、 面向?qū)ο蟆?/p>
2、 內(nèi)置安全等優(yōu)點(diǎn) ,已經(jīng)成為移動(dòng)終端 上的主流開(kāi)發(fā)語(yǔ)言之一。 JSR184 作為 J2ME 的一個(gè)可選包 , 是以 OpenGL 為基礎(chǔ)的精簡(jiǎn)版 ,一共有 30 個(gè)類。它為 Java 移 動(dòng)應(yīng)用程序定義了一個(gè)簡(jiǎn)潔的 3D API 接口 ,可以方便地實(shí)現(xiàn) 3D 應(yīng)用。2 J2ME 簡(jiǎn)介J2ME 概述J2ME最早在1999年6月的JavaOne大會(huì)上被正式提出 是 Sun 公司專門(mén)為開(kāi)發(fā)小型的資源受限的消費(fèi)性電子設(shè)備的 應(yīng)用程序所提供新的Java版本,它被廣泛的使用于手機(jī)、PDA 及電視機(jī)頂盒等眾多小型資源受限設(shè)備中。由于此Java版本的虛擬機(jī)的大小僅僅需要數(shù)百 KB, 因此又被稱為“ K-Jav
3、a”。J2ME 實(shí)際上是一系列規(guī)范的集合 ,由 Java Community Process(Java社區(qū)組織,JCP)制定并發(fā)布相關(guān)的 Java規(guī)范請(qǐng)求 (JSR),各個(gè)廠商按照規(guī)范在自己的產(chǎn)品上進(jìn)行實(shí)現(xiàn),但是必須要通過(guò) TCK(Technical Compatible Kit, 兼容性測(cè)試包 )測(cè)試來(lái) 確保兼容性。2.1 J2ME 平臺(tái)的體系結(jié)構(gòu)J2ME平臺(tái)由多種配置(Configuration)、簡(jiǎn)表(Profile)和可 選包(Optional Package)組成。平臺(tái)的實(shí)現(xiàn)者和應(yīng)用程序的開(kāi) 發(fā)者可以從中選擇并組合出一個(gè)完整的 Java 運(yùn)行環(huán)境來(lái)滿 足特定范圍內(nèi)的設(shè)備要求。其體系結(jié)
4、構(gòu)如圖 1。2.1.1 配置目前,J2ME可用的配置有兩種:CLDC(Connected Limited Device Configuration, 連接受限設(shè)備配置 )和 CDC(connected Device Configuration , 連接設(shè)備配置 )。CLDC 是兩個(gè)配置中較小的一個(gè) ,為具有間斷性聯(lián)網(wǎng)能 力、較慢的處理速度和受限內(nèi)存的設(shè)備設(shè)計(jì)的。這些設(shè)備包 括移動(dòng)電話、雙工呼叫器和入門(mén)級(jí)的 PDA, 它們通常具有 16位或 32 位的 CPU,128KB512KB 內(nèi)存空間CDC 是為處理能力較強(qiáng)、 內(nèi)存空間更大、 聯(lián)網(wǎng)能力更出 色的設(shè)備設(shè)計(jì)的。 這些設(shè)備包括電視機(jī)頂盒、 車載
5、娛樂(lè)系統(tǒng)、 高端 PDA 等,它們通常具有 32 位或 64 位處理器 ,2MB 以上的 內(nèi)存空間。需要說(shuō)明的是 ,移動(dòng)終端設(shè)備發(fā)展非???,上述的硬件區(qū) 分標(biāo)準(zhǔn)已經(jīng)不適合現(xiàn)在的移動(dòng)終端設(shè)備了。2.1.2 簡(jiǎn)表 簡(jiǎn)表是架構(gòu)在配置之上的規(guī)范 ,因此每種簡(jiǎn)表都會(huì)聲明 它根植于的配置種類。簡(jiǎn)表針對(duì)各種不同硬件設(shè)備的特性定 義了高級(jí)的API,這些高級(jí)的API通常是與其他硬件設(shè)備不相 關(guān)的擴(kuò)充類庫(kù)。 MIDP 是基于 CLDC 配置上的簡(jiǎn)表 ,描述定制 了通訊產(chǎn)品中諸如界面 ,網(wǎng)絡(luò)連接等類庫(kù)和資源 ,開(kāi)發(fā)人員可 以在描述的基礎(chǔ)上更加方便簡(jiǎn)潔地開(kāi)發(fā)程序。在 CDC 類產(chǎn) 品中應(yīng)用得比較多的描述有 Pers
6、onal Profile 和 RMI Profile 。2.1.3 廠商可選包除了配置與簡(jiǎn)表之外 ,在 J2ME 規(guī)范之中還定義了廠商可 選包 ,可以對(duì) J2ME 平臺(tái)進(jìn)行擴(kuò)展。其中 CLDC 上的 JSR184 主要用來(lái)在資源受限設(shè)備上開(kāi)發(fā) 3D 圖形的應(yīng)用程序。3 移動(dòng) 3D 圖形 API 在三維可視化中的具體實(shí)現(xiàn)移動(dòng)3D圖形API(JSR184)提供了一套用于移動(dòng)設(shè)備上 的3D編程API。由于JSR184需要使用浮點(diǎn)數(shù)運(yùn)算,所以需要 的最小版本是CLDC1.1。JSR184支持兩種模式:立即模式和 保留模式。下面是使用立即模式建模的步驟 :3.1 定義 3D 對(duì)象JSR184 提供了 V
7、ertexArray 和 VertexBuffer 兩個(gè)類來(lái)保 存頂點(diǎn)信息 ,其中 VertexArray 類用處比較多 ,也比較靈活。VertexArray 類有四個(gè)作用 :保存頂點(diǎn)坐標(biāo)信息、保存頂 點(diǎn)法線信息、保存頂點(diǎn)顏色信息和保存貼圖坐標(biāo)信息。 VertexArray 類的構(gòu)造函數(shù)如下 :VertexArray(int numVertices,int numComponents,int componentSize)其中 ,numVertices 表示包含對(duì)象的數(shù)量 ,numComponents 表示每個(gè)對(duì)象包含的子元素?cái)?shù)目 ,componentSize 表示每個(gè)子 元素所占的字節(jié)數(shù)。另外
8、該類還有一個(gè)比較常用的方法 set(int index,int length,short array0), 這個(gè)方法是用來(lái)向該類的實(shí)例對(duì)象中存 放數(shù)據(jù)的 ,第一個(gè)參數(shù)是指從第幾個(gè)元素開(kāi)始,第二個(gè)參數(shù)是指要設(shè)置多少個(gè) ,第三個(gè)參數(shù)是實(shí)際設(shè)置的值。VertexBuffer 類才是真正保存多邊形的框架信息的類。 該 類通過(guò)設(shè)置頂點(diǎn)信息、外觀、貼圖信息來(lái)建立圖形。其中 setPositions(VertexBuffer v,float s,float b) 方法是用來(lái)設(shè)置頂 點(diǎn)位置的 ,第一個(gè)是頂點(diǎn)的坐標(biāo)信息,后兩個(gè)是用來(lái)做坐標(biāo)偏移等操作的。坐標(biāo)偏移的數(shù)學(xué)公式為:v '=v*s+b 。在 JS
9、R184 中,多邊形是通過(guò)三角面來(lái)表示的 , 并且可以使 用背面削隱算法。 這樣一來(lái)頂點(diǎn)就不再是任意定義的了 ,而是 有順序的。比如圖 2 中矩形格網(wǎng)的四個(gè)三角面的索引如下 :int index=new int0,3,4,0,4,2,0,2,1,0,1,3;Int length=new int3,3,3,3;TriangleStripArray triangle=new TriangleStripArray(index,length);設(shè)置 3D 對(duì)象頂點(diǎn)信息的代碼片段如下 : /頂點(diǎn)位置Short verts=new short0,0,0,-5,-5,30,5,-5,30,-5,5,30,5
10、,5,30 ;/頂點(diǎn)索引int index=new int0,3,4,0,4,2, 0,2,1,0,1,3 ;int length=new int3,3,3,3;/保存頂點(diǎn)位置VertexArray vertexArray=newVertexArray(verts.length/3,3,2); vertexArray.set(0,verts.length/3,verts);/設(shè)置三角面TriangleStripArray triangle=new TriangleStripArray(index,length);VertexBuffer verBuffer=new VertexBuffer()
11、; verBuffer.setPositions(vertexArray,1f/100f,null);/生成矩形Mesh arrow=new Mesh(verBuffer,triangle,null);3.2 渲染模型模型建立后 ,最終的目標(biāo)是為了渲染到屏幕上 ,渲染的操 作需要用到 Graphics3D 和 Camera 類。Camera 繼承自 Transformable 類 ,有位移、旋轉(zhuǎn)等信息 可以把它理解為虛擬場(chǎng)景中的眼睛。 Camera 類有兩種觀察場(chǎng) 景的方法 :透視法和平視法 ,常用的是透視法。透視法屬性通過(guò)方法 setPerspective(float fivy,float
12、aspectRatio,float near,floatfar)設(shè)置,第一個(gè)參數(shù)為透視角度,第二個(gè)參數(shù)是視圖的長(zhǎng)寬比例,后兩個(gè)參數(shù)是前后裁減面。代碼片段如下 :Camera camera=newCamera();Float aspectRatio=(float)getWidth()/(float)getHeight(); Camera. setPerspective(45.0f, aspectRatio,1.0f,1000.0f); Transform cameraTransform=new Transform(); cameraTransform.postTranslate(0.0f,0.0
13、f,10.0f);Graphics3D 類是按照單模式設(shè)計(jì)的 ,因此在程序運(yùn)行過(guò) 程中只能存在一個(gè) Graphics3D 的實(shí)例。使用 Graphics3D 很 簡(jiǎn)單,繪制3D任務(wù)由paint()方法來(lái)完成。首先是獲得Graphics3D的實(shí)例并綁定到目標(biāo)對(duì)象上,然后調(diào)用clear()方法 來(lái)清空屏幕,隨后調(diào)用render()方法來(lái)繪制3D對(duì)象。繪制完畢 后,調(diào)用releaseTarget()方法來(lái)釋放 Graphics對(duì)象。部分代碼 如下:public class Mycanvas extends Canvas/單例模式 ,程序中只存在一個(gè) Graphics3D 引用 Graphics3D
14、myG3D=Graphics3D.getInstance();Public void paint(Graphics g) myG3D.bindTarget(g);/更新場(chǎng)景Graphics3D.clear(null);/渲染場(chǎng)景Graphics3D.render(verBuffer, triangle,new Appearance(),null);/釋放目標(biāo)對(duì)象myG3D.releaseTarget();3.3 光照和紋理映射 為了更好地實(shí)現(xiàn)三維可視化效果,可以加入光照和紋理影射。JSR184中有四個(gè)不同的光線選項(xiàng):Ambient(環(huán)境光)、 Directional(平行光)、Omnidire
15、ctional(點(diǎn)光)、Spot(錐光),并通 過(guò) Light.setMode(int mode) 方法來(lái)設(shè)置光源的類 型,setColor(int RGB)設(shè)置光源顏色。JSR1 84中紋理一般作為一個(gè)資源文件放在 Midlet Suite 包中,可以通過(guò)Loader對(duì)象的load()方法想將紋理圖像讀入一 個(gè) Image2D 對(duì)象中 ,然后利用 Image2D 對(duì)象來(lái)創(chuàng)建一個(gè)紋理 對(duì)象。4 結(jié)論JSR184的出現(xiàn),使得在移動(dòng)終端上實(shí)現(xiàn)三維功能成為可 能。作為一個(gè)廠商可選包 ,JSR184 的主要目的是為 J2ME 平 臺(tái)構(gòu)架一個(gè)運(yùn)行在資源受限的移動(dòng)設(shè)備上的接口。 JSR184 的標(biāo)準(zhǔn)正在不斷完善 ,目前已經(jīng)廣泛應(yīng)用到 3D 游戲、空間信 息三維可視化等領(lǐng)域。參考文獻(xiàn) :1 詹建飛 .J2ME 開(kāi)發(fā)精解
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中數(shù)學(xué)教研組工作總結(jié)-15篇
- 2025年水利管理及技術(shù)咨詢服務(wù)項(xiàng)目申請(qǐng)報(bào)告模范
- 2025年測(cè)高儀項(xiàng)目提案報(bào)告模范
- 2025年數(shù)控裁板鋸項(xiàng)目提案報(bào)告模稿
- 保安個(gè)人述職報(bào)告集合15篇
- 2024冶金工程質(zhì)保期合同擔(dān)保協(xié)議2篇
- 去廣告公司實(shí)習(xí)報(bào)告范文集合七篇
- 保險(xiǎn)公司實(shí)習(xí)報(bào)告范文集錦八篇
- 初二生物教學(xué)計(jì)劃范文合集五篇
- 小學(xué)生考試沒(méi)考好檢討書(shū)
- “大綜合一體化”行政執(zhí)法改革工作自查報(bào)告
- DB5110∕T 37-2021 地理標(biāo)志產(chǎn)品 資中冬尖加工技術(shù)規(guī)范
- (3)110KV配電裝置安裝單位工程質(zhì)量驗(yàn)收評(píng)定表1
- 課程設(shè)計(jì)之年產(chǎn)90000噸丙酮水連續(xù)精餾塔的設(shè)計(jì)
- 贊比亞礦產(chǎn)資源及礦業(yè)開(kāi)發(fā)前景分析
- 餐飲前臺(tái)餐具與雜件清單
- 河南省建設(shè)工程安全監(jiān)督備案申請(qǐng)表
- 海拔高度與氣壓、空氣密度、重力加速度對(duì)照表
- 道路平交口計(jì)算公式
- 鐵路隧道安全風(fēng)險(xiǎn)評(píng)估
- 靜壓樁施工記錄表
評(píng)論
0/150
提交評(píng)論