綆€榪?br />
鐜板湪錛岀Щ鍔ㄦ父鎴忓拰縐誨姩搴旂敤寮€鍙戞瀬涓虹儹闂紒娓告垙涓渶瑕佹湁鏃墮婕備寒鐨勫浘褰紝鍏惰璁℃爣鍑嗘瘮浠ュ墠浠諱綍鏃跺€欓兘瑕侀珮銆傛湰鏂囧皢鍛婅瘔浣犳€庢牱鐢ㄩ叿姣欑殑縐誨姩3D鍥懼艦API涓篔2ME璁懼寮€鍙?D鍥懼艦娓告垙銆?br />
濡傛灉浣犲湪鐢∕IDP1.0榪涜鐢ㄦ埛鎺ュ彛緙栫▼錛岄偅涔堟湁涓ゆ潯璺綘鍙互閫夋嫨錛氫嬌鐢ㄩ珮綰х殑UI綾繪垨鑰呬竴鍒囩敱浣犺嚜宸變粠澶村紑濮嬨€備綔涓烘父鎴忓紑鍙戣€咃紝絎竴縐嶉€夋嫨寰€寰€鏄笉鍙兘鐨勶紱榪欐槸涓轟粈涔堟父鎴忓紑鍙戣€呬笉寰椾笉涓轟粬浠殑楂樼駭娓告垙寮€鍙戣嚜宸辯殑3D寮曟搸鐨勫師鍥犮€傛棤鐤戯紝榪欓渶瑕佷粯鍑哄ぇ閲忕殑鏃墮棿鍜屽姫鍔涳紝鑰岀己涔忔誕鐐規暟鏀寔鐨凜LDC 1.0錛圡IDP 1.0姝f槸寤轟簬鍏朵笂錛夊闂鐨勮В鍐蟲病鏈夊澶у府鍔┿€?br />
鍦∕IDP 2.0涓紝鏈変竴涓彲閫夌殑鍙Щ鍔?D鍥懼艦API鐨勮蔣浠跺寘錛屾垨鑰呭彨JSR 184銆傝API鏄涓€涓熀浜嶫ava鏍囧噯寮€鍙戠殑縐誨姩璁懼涓婄殑涓夌淮鍥懼艦杞歡鍖呫€傝API鏃㈡湁楂樼駭鍙堟湁浣庣駭鍥懼艦鐗瑰緛錛涘叾涓紝楂樼駭鐗瑰緛縐頒負淇濈暀妯″紡錛屼綆綰х壒寰佺О涓虹珛鍗蟲ā寮忋€備繚鐣欐ā寮忎嬌寰楀紑鍙戣€呮湁鍙兘浣跨敤鍦烘櫙鍥懼艦騫朵嬌鍦烘櫙涓殑鐗╀綋鏍規嵁铏氭嫙鐩告満鍜岀伅鍏夌殑浣嶇疆榪涜鑷韓鐨勭潃鑹層€傜珛鍗蟲ā寮忚兘澶熷厑璁稿簲鐢ㄧ▼搴忕洿鎺ヨ繘琛岀墿浣撶粯鍒躲€傚鏋滈渶瑕侊紝鍙互鍦ㄥ悓涓€涓簲鐢ㄧ▼搴忎腑浣跨敤榪欎袱縐嶆ā寮忋€傛湰鏂囩潃閲嶄粙緇嶇珛鍗蟲ā寮忋€?br />
3D API
璁╂垜浠互鍒椾婦鍜岃В閲婅3D API涓殑綾諱綔涓哄紑濮嬨€傞櫎浜嗚繖浜汚PI澶栵紝JSR 184榪樺寘鍚簡涓€涓満鏅浘褰㈢粨鏋勫拰涓€涓浉搴旂殑鏂囦歡鏍煎紡浠ユ湁鏁堝湴綆$悊鍜岄厤緗?D鍐呭銆傝鏂囦歡鏍煎紡瀹氫箟浜嗕竴縐峬3g鏂囦歡錛岃繖縐嶆枃浠跺吀鍨嬪湴浠?D寤烘ā鏂囦歡搴旂敤紼嬪簭涓漿鎹㈣€屾潵銆?/p>
琛?錛?D API綾?/p>
綾? | 鎻忚堪 |
AnimationController | 鎺у埗鍔ㄧ敾欏哄簭銆?/td> |
AnimationTrack | 鎶婁竴涓狵eyframeSequence鍚屼竴涓狝nimationController鐩稿叧鑱斻€?/td> |
Appearance | 瀹氫箟涓€涓綉鐪鹼紙Mesh錛夋垨涓€涓猄pring3D鐨勭潃鑹插睘鎬х殑涓€緇勫璞°€?/td> |
Background | 瀹氫箟瑙嗗浘鏄€庢牱琚竻闄ょ殑銆?/td> |
Camera | 涓€涓満鏅浘欏剁偣錛屽畠瀹氫箟浜嗗満鏅腑瑙傚療鑰呯殑浣嶇疆浠ュ強浠?D鍒?D鐨勬姇褰便€?/td> |
CompositingMode | 涓€涓狝ppearance綾伙紝瀹冨皝瑁呬簡姣忎竴涓儚绱犵殑鍚堟垚灞炴€с€?/td> |
Fog | 涓€涓狝ppearance綾伙紝瀹冨寘鍚簡闆懼寲鐨勬湁鍏沖睘鎬с€?/td> |
Graphics3D | 涓€涓崟鐙殑3D鍥懼艦涓婁笅鏂囥€傛墍鏈夌殑鐫€鑹叉搷浣滈兘鏄湪璇ョ被涓殑render()鏂規硶涓疄鐜扮殑銆?/td> |
Group | 涓€涓満鏅浘褰㈢粨鐐癸紝瀹冨瓨鍌ㄤ簡涓€涓棤搴忕殑緇撶偣闆嗕綔涓哄畠鐨勫瓙緇撶偣銆?/td> |
Image2D | 涓€涓簩緇村浘鍍忥紝鍙敤浜庣汗鐞嗭紝鑳屾櫙錛屾垨鑰呯簿鐏靛浘鍍忋€?/td> |
IndexBuffer | 璇ョ被瀹氫箟浜嗗浣曟妸欏剁偣榪炴帴璧鋒潵浠ュ艦鎴愪竴涓嚑浣曚綋銆?/td> |
KeyframeSequence | 灝佽浜嗕竴緋誨垪鐨勫叿鏈夋椂闂存埑鍜岀煝閲忓€肩殑鍏抽敭甯х殑鍔ㄧ敾鏁版嵁銆?/td> |
Light | 鎻忚堪浜嗕笉鍚岀被鍨嬬殑鍏夋簮銆?/td> |
Loader | 涓嬭澆鍜屽弽涓茶鍖栧浘褰㈢粨鐐瑰強緇撶偣鎴愬垎錛屼互鍙婃暣涓満鏅浘褰€€?/td> |
Material | 灝佽浜嗚繘琛屽厜瀛﹁綆楃殑鏉愯川灞炴€с€? |
Mesh | 鎻忚堪浜嗕竴涓?D瀵硅薄錛屽畠鏄敤澶氳竟褰㈤潰瀹氫箟鐨勩€?/td> |
MorphingMesh | 鎻忚堪浜嗕竴涓《鐐癸紞鍙樺艦鐨勫杈瑰艦緗戠溂銆?/td> |
Node | 鎵€鏈夊満鏅浘褰㈢粨鐐圭殑鎶借薄鍩虹被銆傚叾浜斾釜鍏蜂綋瀛愮被鏄細Camera錛孧esh錛孲prite3D錛孡ight鍜孏roup銆?/td> |
Object3D | 鎵€鏈夊彲浠ユ垚涓?D涓栫晫涓粍鎴愰儴鍒嗙殑瀵硅薄鐨勬娊璞″熀綾匯€?/td> |
PolygonMode | 灝佽浜嗗杈瑰艦綰у埆灞炴€с€?/td> |
RayIntersection | 瀛樺偍浜嗗浜庡垎鍓茬殑Mesh鎴朣prite3D鐨勫紩鐢紝浠ュ強鏈夊叧鍒嗗壊鐐圭殑淇℃伅銆?/td> |
SkinnedMesh | 鎻忚堪浜嗕竴涓鏋跺姩鐢葷殑澶氳竟褰㈢綉鐪箋€?/td> |
Sprite3D | 鐢?D浣嶇疆鏉ユ弿榪頒竴涓?D鍥懼儚銆?/td> |
Texture2D | 灝佽浜嗕竴涓?D綰圭悊鍥懼儚鍜屼竴涓睘鎬ч泦鍚堬紝榪欎簺灞炴€ф寚鍑鴻鍥懼儚鏄浣曞簲鐢ㄥ埌瀛愮綉鐪間笂鐨勩€?/td> |
Transform | 涓€涓€氱敤鐨?x4鐨勬誕鐐規暟鐭╅樀錛岀敤鏉ユ弿榪頒竴涓彉鎹€€?/td> |
Transformable | Node鍜孴exture2D綾葷殑鎶借薄鍩虹被銆?/td> |
TriangleStripArray | 瀹氫箟浜嗕竴涓笁瑙掑艦甯︽暟緇勩€?/td> |
VertexArray | 涓€涓暣鍨嬬煝閲忔暟緇勶紝鎻忚堪浜嗛《鐐逛綅緗紝娉曠嚎錛岄鑹叉垨鑰呯汗鐞嗗潗鏍囥€?/td> |
VertexBuffer | 瀛樺偍瀵逛簬VertexArrays鐨勫紩鐢紝瀹冨寘鍚簡涓€涓《鐐歸泦鐨勪綅緗紝棰滆壊錛屾硶綰匡紝浠ュ強綰圭悊鍧愭爣銆?/td> |
World | 涓€涓壒鍒殑Group緇撶偣錛屽畠浣滀負鍦烘櫙鍥炬渶欏跺眰鐨勫鍣ㄣ€?/td> |
涓句緥
鎴戜滑灝嗗紑鍙戜竴涓畝鍗曠殑鏃嬭漿涓€涓杈瑰艦鐨?D搴旂敤紼嬪簭涓轟緥銆傝澶氳竟褰㈡槸涓€涓珛鏂逛綋錛屽畠鐨勭汗鐞嗘槸涓€寮犳棫姹借濺鐩哥墖銆傚垪琛?灞曠ず浜嗕緥紼媘idlet鐨勪富瑕佺被-搴旂敤紼嬪簭鐨勪腑蹇冪被銆傝綾昏礋璐e垱寤哄簲鐢ㄧ▼搴忓茍寤虹珛璧瘋繍琛孧yCanvas鐨勮鏃跺櫒銆?/p>
鍒楄〃1. MIDletMain綾?/p>
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.*; public class MIDletMain extends MIDlet { 銆€static MIDletMain midlet; 銆€MyCanvas d = new MyCanvas(); 銆€Timer iTimer = new Timer(); 銆€public MIDletMain() { this.midlet = this; 銆€} 銆€public void startApp() { Display.getDisplay(this).setCurrent(d); iTimer.schedule( new MyTimerTask(), 0, 40 ); 銆€} 銆€public void pauseApp() {} 銆€public void destroyApp(boolean unconditional) {} 銆€public static void quitApp() { midlet.destroyApp(true); midlet.notifyDestroyed(); midlet = null; 銆€} 銆€ 銆€class MyTimerTask extends TimerTask { public void run() { 銆€if( d != null ) { d.repaint(); 銆€} } 銆€} } |
鍒楄〃2鏄劇ず浜哅yCanvas綾伙紝璇ョ被鍖呭惈浜嗗簲鐢ㄧ▼搴忕殑鎵€鏈夊浘褰㈤€昏緫銆俰nit()鏂規硶璐熻矗緇撶偣鐨勫垱寤猴紝綰圭悊鏂囦歡鐨勮杞藉茍璁劇疆綰圭悊錛屽瑙傚拰鑳屾櫙涔熻涓€璧瘋緗€俻aint()鏂規硶璐熻矗鐫€鑹插茍鏃嬭漿绔嬫柟浣撱€傚浘1灞曠ず浜嗘鍦ㄤ竴涓ā鎷熷櫒涓繍琛岀殑瀹為檯紼嬪簭銆?
鍒楄〃2. MyCanvas綾?br />
import javax.microedition.lcdui.*; import javax.microedition.m3g.*; public class MyCanvas extends Canvas { 銆€private Graphics3D graphics3d; 銆€private Camera camera; 銆€private Light light; 銆€private float angle = 0.0f; 銆€private Transform transform = new Transform(); 銆€private Background background = new Background(); 銆€private VertexBuffer vbuffer; 銆€private IndexBuffer indexbuffer; 銆€private Appearance appearance; 銆€private Material material = new Material(); 銆€private Image image; 銆€public MyCanvas() { // 鍒涘緩Displayable瀵硅薄浠ユ帰鍚懡浠や簨浠?br /> setCommandListener(new CommandListener() { 銆€public void commandAction(Command c, Displayable d) { if (c.getCommandType() == Command.EXIT) { 銆€MIDletMain.quitApp();}} 銆€}); 銆€try { init();} 銆€catch(Exception e) { e.printStackTrace();} 銆€} 銆€/** 銆€* 緇勪歡鐨勫垵濮嬪寲 銆€*/ 銆€private void init() throws Exception { addCommand(new Command("Exit", Command.EXIT, 1)); graphics3d = Graphics3D.getInstance(); camera = new Camera(); camera.setPerspective( 60.0f,(float)getWidth()/ (float)getHeight(), 1.0f, 1000.0f ); light = new Light(); light.setColor(0xffffff); light.setIntensity(1.25f); short[] vert = { 銆€5, 5, 5, -5, 5, 5, 5,-5, 5, -5,-5, 5, 銆€-5, 5,-5, 5, 5,-5, -5,-5,-5, 5,-5,-5, 銆€-5, 5, 5, -5, 5,-5, -5,-5, 5, -5,-5,-5, 銆€5, 5,-5, 5, 5, 5, 5,-5,-5, 5,-5, 5, 銆€5, 5,-5, -5, 5,-5, 5, 5, 5, -5, 5, 5, 銆€5,-5, 5, -5,-5, 5, 5,-5,-5, -5,-5,-5 }; VertexArray vertArray = new VertexArray(vert.length / 3, 3, 2); vertArray.set(0, vert.length/3, vert); //绔嬫柟浣撶殑鍚勪釜緇撶偣娉曠嚎 byte[] norm = { 銆€0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 銆€0, 0,-127, 0, 0,-127, 0, 0,-127, 0, 0,-127, 銆€-127, 0, 0, -127, 0, 0, -127, 0, 0, -127, 0, 0, 銆€127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 銆€0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 銆€0,-127, 0, 0,-127, 0, 0,-127, 0, 0,-127, 0 }; VertexArray normArray = new VertexArray(norm.length / 3, 3, 1); normArray.set(0, norm.length/3, norm); //鍚勪釜緇撶偣鐨勭汗鐞嗗潗鏍?br /> short[] tex = { 銆€1, 0, 0, 0, 1, 1, 0, 1, 銆€1, 0, 0, 0, 1, 1, 0, 1, 銆€1, 0, 0, 0, 1, 1, 0, 1, 銆€1, 0, 0, 0, 1, 1, 0, 1, 銆€1, 0, 0, 0, 1, 1, 0, 1, 銆€1, 0, 0, 0, 1, 1, 0, 1 }; VertexArray texArray = new VertexArray(tex.length / 2, 2, 2); texArray.set(0, tex.length/2, tex); int[] stripLen = { 4, 4, 4, 4, 4, 4 }; // 瀵硅薄鐨刅ertexBuffer VertexBuffer vb = vbuffer = new VertexBuffer(); vb.setPositions(vertArray, 1.0f, null); vb.setNormals(normArray); vb.setTexCoords(0, texArray, 1.0f, null); indexbuffer = new TriangleStripArray( 0, stripLen ); //綰圭悊鍥懼儚 image = Image.createImage( "/pic1.png" ); Image2D image2D = new Image2D( Image2D.RGB, image ); Texture2D texture = new Texture2D( image2D ); texture.setFiltering(Texture2D.FILTER_NEAREST, Texture2D.FILTER_NEAREST); texture.setWrapping(Texture2D.WRAP_CLAMP,Texture2D.WRAP_CLAMP); texture.setBlending(Texture2D.FUNC_MODULATE); // 鍒涘緩澶栬錛圓ppearance錛夊璞?br /> appearance = new Appearance(); appearance.setTexture(0, texture); appearance.setMaterial(material); material.setColor(Material.DIFFUSE, 0xFFFFFFFF); material.setColor(Material.SPECULAR, 0xFFFFFFFF); material.setShininess(100.0f); background.setColor(0xffffcc); 銆€} 銆€protected void paint(Graphics g) { graphics3d.bindTarget(g, true, 銆€Graphics3D.DITHER | 銆€Graphics3D.TRUE_COLOR); 銆€graphics3d.clear(background); //璁劇疆鐓х浉鏈?br /> Transform transform = new Transform(); transform.postTranslate(0.0f, 0.0f, 30.0f); graphics3d.setCamera(camera, transform); //璁劇疆鐏厜 graphics3d.resetLights(); graphics3d.addLight(light, transform); //璁劇疆鏃嬭漿 angle += 1.0f; transform.setIdentity(); transform.postRotate(angle, 1.0f, 1.0f, 1.0f); graphics3d.render(vbuffer, indexbuffer, appearance, transform); graphics3d.releaseTarget(); 銆€} } |
鍥? 姝e湪涓€涓ā鎷熷櫒涓繍琛岀殑搴旂敤紼嬪簭
灝忕粨
JSR 184瀵逛簬鍙互榪愯MIDP 2.0鐨勮澶囨潵璇達紝鏄竴涓妭鐪佹椂闂村拰絀洪棿鐨勫彲閫夌殑杞歡寮€鍙戝寘銆傚畠鍏佽寮€鍙戣€呬嬌鐢ㄤ袱縐嶅浘褰㈡柟寮?淇濈暀妯″紡鍜岀珛鍗蟲ā寮?鏉ヤ駭鐢?D鍥懼艦銆傛湰鏂囬泦涓榪頒簡绔嬪嵆妯″紡錛屽茍緇欏嚭涓€涓緥瀛愮▼搴忔潵璇存槑鎬庢牱浣跨敤3D API銆?br />