![]() |
鎽樿:銆銆鍊熷姪EAI 鍜孲cript 鑺傜偣灝咼ava 鍜孷RML 鐩哥粨鍚?鏋勫緩浜嗕竴涓笁緇翠氦浜掑紡鐨勮櫄鎷熷満鏅?璇ュ満鏅厠鏈嶄簡VRML 鍦ㄤ氦浜掓柟闈㈢殑涓嶈凍,瀹炵幇浜嗙敤鎴蜂笌铏氭嫙鍦烘櫙涔嬮棿浠ュ強鐢ㄦ埛涓庣敤鎴蜂箣闂寸殑浜や簰鍜屽叡浜殑鍔熻兘,騫跺湪姝ゅ熀紜涓?鏋勫緩浜嗕竴涓敤浜庤綆楁満鍥懼艦瀛︽暀瀛︾殑铏氭嫙鍦烘櫙妗嗘灦,涓篤RML 鍦ㄨ繙紼嬫暀鑲叉柟闈㈢殑鏅強鍜屽簲鐢ㄥ仛浜嗘湁鐩婄殑鎺㈢儲. 鍏抽敭璇?銆VRML ;Java ; EAI ; 浜や簰寮?铏氭嫙鍦烘櫙 銆銆铏氭嫙鐜板疄鎶鏈槸褰撳墠鍥介檯涓婄殑涓涓爺絀剁儹鐐?鏄竴縐嶉肩湡鐨勯氳繃鍚勭浼犳劅璁懼妯℃嫙浜哄湪鑷劧鐜涓殑瑙嗐佸惉銆佸姩浣滅瓑琛屼負鐨勪漢鏈虹晫闈㈡妧鏈?瀹炵幇鎿嶄綔鑰呭拰鐜鐩存帴榪涜鑷劧浜や簰. 璇ユ妧鏈凡緇忓箍娉涘湴搴旂敤浜庡啗浜嬨佽埅絀鴻埅澶┿佸尰瀛︺佸緩絳戣璁°佹満姊般佸湴鐞嗐佸寲瀛︾瓑浼楀鐨勯鍩? 銆銆铏氭嫙鐜板疄寤烘ā璇█(Virtual Reality Modeling Language , 緙╁啓涓篤RML) 鏄竴涓紑鏀劇殑銆佸彲鎵╁厖鐨勪笁緇村満鏅弿榪拌璦,瀹冩弿榪頒簡濡備綍鍦╓orld Wide Web 涓婂垱寤哄拰嫻忚涓夌淮铏氭嫙鍦烘櫙. VRML 鐨勬瀯鎬濆浜?994 騫存槬鐟炲+鏃ュ唴鐡︾殑涓囩淮緗?WWW) 鐨勭涓灞婂浗闄呬細璁笂. 1994 騫?0 鏈堝湪鑺濆姞鍝ュ彫寮鐨勭浜屾涓囩淮緗戜細璁笂鍏竷浜哣RML1. 0 鐨勮鑼冭崏妗?鍏朵富瑕佺殑鍔熻兘鏄敓鎴愰潤鎬佺殑3D 鍦烘櫙,浠ュ強涓嶩TML 閾炬帴鐨勪竴浜涘姛鑳藉拰鎺柦. 1998 騫? 鏈圴RML 琚獻SO 姝e紡鎵瑰噯涓哄浗闄呮爣鍑? ISO/ IEC/ 4772 -1 :1997 , 閫氬父琚О涓篤RML1997 , 涔熻縐頒負VRML2. 0) . VRML2. 0 鐗堝皢VRML 鐨勯潤鎬佷笘鐣屾敼鍙樹負鍔ㄦ佷笘鐣?騫跺己鍖栦簡浜掑姩鍔熻兘,姝ゅ榪樺鍔犱簡鍔ㄧ敾銆佷紶鎰熷櫒銆佷簨浠躲佽涓哄拰鑴氭湰絳夊姛鑳? VRML 鎻愪緵浜?4 涓姛鑳藉己澶х殑鑺傜偣鐢ㄤ簬鎻忚堪涓夌淮鍦烘櫙涓殑瀵硅薄,鑳藉鍒╃敤灞傛鎬ф枃浠跺叧緋誨垱寤轟換鎰忓ぇ鐨勫姩鎬佸鐣孾 1 ]. 鐩墠,鍥藉唴鍦ㄨ櫄鎷熺幇瀹炴妧鏈殑搴旂敤鏂歸潰闄や簡涓埆棰嗗煙澶?鍩烘湰涓婅繕澶勪簬鎺㈢儲鐮旂┒闃舵,涓昏鏄簲鐢╒RML 鐨勪笁緇村緩妯″姛鑳藉垱寤轟竴涓敤鎴峰彲浠ユ祻瑙堢殑闈欐佷笁緇村満鏅?鑰屽湪鍒涘緩鍔ㄦ佸満鏅拰澶氱敤鎴峰満鏅柟闈㈢殑鐮旂┒鐩稿杈冨皯. 鏈枃鏃ㄥ湪璁ㄨ浣跨敤VRML 涓嶫 ava 鍒涘緩澶氱敤鎴蜂氦浜掑紡鍦烘櫙鐨勭粨鍚堟柟娉?騫剁粰鍑轟簡緋葷粺妗嗘灦鍜屽疄鐜版柟娉?
1 銆VRML 涓嶫 ava 鐩哥粨鍚?/strong>
銆銆VRML 鍦烘櫙涓換浣曚嬌鐢―EF 瀹氫箟鐨勮妭鐐歸兘鍙互琚獼 ava Applet 紼嬪簭鎵璁塊棶,鑾峰緱涓涓妭鐐圭殑鍙ユ焺鍚?璇ヨ妭鐐圭殑event In 鍜宔ventOut 灝辮兘琚紩鐢? Java Applet 鍙互鐩戣VRML 鍦烘櫙涓妭鐐圭殑鏀瑰彉騫惰兘澶熷湪鑺傜偣闂翠紶閫掍簨浠舵潵鐩存帴鏀瑰彉鑺傜偣鐨勫睘鎬? 綆鍗曠殑璇?涓鏂歸潰EA I 鑳芥妸VRML妯″瀷鐨勫彉鍖栦紶閫掔粰J ava Applet , 鍙︿竴鏂歸潰Java Applet 鍙互閫氳繃EA I 緇橵RML 浼犻佸悇縐嶅悇鏍風殑浜嬩歡鍜屼俊鎭?鎺у埗鍜屾敼鍙樿櫄鎷熷満鏅? browser = Browser. getBrowser() ;
2. 3 銆澶氱敤鎴峰叡浜殑瀹炵幇
|
綆榪?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 />