新聞中心
你對J2ME 3D技術(shù)的用法是否熟悉,這里和大家分享一下,JSR184標準(M3G:Mobile3DGraphics)為Java移動應(yīng)用程序定義了一個簡潔的3DAPI接口,J2ME程序可以非常方便地使用M3G來實現(xiàn)3D應(yīng)用比如游戲等等。

創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標,我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。
J2ME 3D技術(shù)簡介
3D技術(shù)對我們來說已經(jīng)非常熟悉了,最常用的3D API有OpenGL和Microsoft的Direct3D,在桌面游戲中早已廣泛應(yīng)用。對于J2ME程序而言,Mobile3DGraphicsAPI(JSR184)的出現(xiàn),使得為手機應(yīng)用程序添加3D功能成為可能。
◆JSR184標準(M3G:Mobile3DGraphics)為Java移動應(yīng)用程序定義了一個簡潔的3DAPI接口,J2ME程序可以非常方便地使用M3G來實現(xiàn)3D應(yīng)用比如游戲等等。M3G被設(shè)計為非常輕量級的,整個API的完整實現(xiàn)不超過150kb。
M3G是J2ME的一個可選包,以O(shè)penGL為基礎(chǔ)的精簡版,一共有30個類,運行在CLDC1.1/CLDC2.0上(必須支持浮點運算),可以在MIDP1.0和MIDP2.0中使用。目前,支持M3G的手機有Nokia6230/3650/7650/6600、SiemensS65/CX65/S55/M55、Sony-EricssonK700i/P800/P900、Moto220/T720等。M3G只是一個Java接口,具體的底層3D引擎一般由C代碼實現(xiàn),比如許多手機廠商的3D引擎采用的便是SuperScape公司的Swerve引擎,這是一個專門為移動設(shè)備設(shè)計的高性能3D引擎。
類似于Microsoft的D3D,M3G支持兩種3D模式:立即模式(immediatemode)和保留模式(retainedmode)。在立即模式下,開發(fā)者必須手動渲染每一幀,從而獲得較快的速度,但代碼較繁瑣;在保留模式下,開發(fā)者只需設(shè)置好關(guān)鍵幀,剩下的動畫由M3G完成,代碼較簡單,但速度較慢。M3G也允許混合使用這兩種模式。
◆3D模型可以在程序中創(chuàng)建,但是非常繁瑣。因此,M3G提供一個Loader類,允許直接從一個單一的.m3g文件中讀入全部3D場景。m3g文件可以通過3DStudioMax之類的軟件創(chuàng)建。
如果熟悉OpenGL,那么M3G是非常容易理解的。在M3G中,Graphics3D是3D渲染的屏幕接口,World代表整個3D場景,包括Camera(用于設(shè)置觀察者視角)、Light(燈光)、Background(背景)和樹型結(jié)構(gòu)的任意數(shù)量的3D物體。3D對象在計算機中用點(Point,Pixel)、線(Line,Polyline,Spline)、面(Mesh)來描述,具體存儲和運算(如旋轉(zhuǎn)、投影)都是矩陣運算和變換。
SUN的WTK2.2已經(jīng)內(nèi)置了M3G的實現(xiàn)包,如果安裝了WTK2.2,就可以在模擬器上運行3DMIDP程序??梢詤⒖糤TK2.2的示例demo3d。#p#
◆下面是一個最簡單的M3G程序,來自Sony-Ericsson的示例代碼,它創(chuàng)建一個旋轉(zhuǎn)的金字塔,可以從此處下載完整代碼并在WTK2.2中運行。
首先,我們要獲得唯一的Graphics3D實例,用于渲染3D場景。Graphics3D是一個Singleton實現(xiàn),可以在任何地方獲得:
- g3d=Graphics3D.getInstance();
然后,在Canvas中渲染:
- publicclassMyCanvasextendsCanvas
- {
- publicvoidpaint(Graphicsg){
- try{
- g3d.bindTarget(g);
- ...updatethescene...
- ...renderthescene...
- }finally{
- g3d.releaseTarget();
- }
- }
接下來創(chuàng)建一個World并設(shè)置Camera:
- world=newWorld();
- camera=newCamera();
- world.addChild(camera);
- //Thewidthandheightofthecanvas.
- floatw=getWidth();
- floath=getHeight();
- //Constructsaperspectiveprojectionmatri
- xandsetsthatasthecurrentprojectionmatrix.
- camera.setPerspective(60.0f,w/h,0.1f,50f);
- world.setActiveCamera(camera);
接著,在createPyramid()方法中創(chuàng)建一個Mesh,代表金字塔,并添加到World中:
- privateMeshpyramidMesh;//thepyramidinthescene
- pyramidMesh=createPyramid();//createourpyramid.
- pyramidMesh.setTranslation(0.0f,0.0f,-3.0f);
- //movethepyramid3unitsintothescreen.
- world.addChild(pyramidMesh);//addthepyramidtotheworld
***,在一個線程中讓金字塔繞Y軸旋轉(zhuǎn)起來:
- publicvoidrun(){
- Graphicsg=getGraphics();
- while(true){
- //rotatethepyramid1degreearoundtheY-axis.
- pyramidMesh.postRotate(3.0f,0.0f,1.0f,0.0f);
- draw3D(g);
- flushGraphics();
- }
- }
文章標題:術(shù)語匯編J2ME3D技術(shù)簡介
URL分享:http://m.fisionsoft.com.cn/article/ccscccp.html


咨詢
建站咨詢
