锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩中文字幕精品,国产小视频国产精品,欧美国产一区二区http://m.shnenglu.com/winmain/Programming is so coolzh-cnWed, 24 Sep 2025 05:57:44 GMTWed, 24 Sep 2025 05:57:44 GMT60鎼鍘誨崥瀹㈠洯浜?/title><link>http://m.shnenglu.com/winmain/archive/2010/05/16/115510.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Sun, 16 May 2010 04:57:00 GMT</pubDate><guid>http://m.shnenglu.com/winmain/archive/2010/05/16/115510.html</guid><wfw:comment>http://m.shnenglu.com/winmain/comments/115510.html</wfw:comment><comments>http://m.shnenglu.com/winmain/archive/2010/05/16/115510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/winmain/comments/commentRss/115510.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/winmain/services/trackbacks/115510.html</trackback:ping><description><![CDATA[<a >http://www.cnblogs.com/CodeKnight/</a> <img src ="http://m.shnenglu.com/winmain/aggbug/115510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/winmain/" target="_blank">Code Knight</a> 2010-05-16 12:57 <a href="http://m.shnenglu.com/winmain/archive/2010/05/16/115510.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓閬撻潰璇曢http://m.shnenglu.com/winmain/archive/2010/04/12/112332.htmlCode KnightCode KnightMon, 12 Apr 2010 07:55:00 GMThttp://m.shnenglu.com/winmain/archive/2010/04/12/112332.htmlhttp://m.shnenglu.com/winmain/comments/112332.htmlhttp://m.shnenglu.com/winmain/archive/2010/04/12/112332.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/112332.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/112332.html闃呰鍏ㄦ枃

Code Knight 2010-04-12 15:55 鍙戣〃璇勮
]]>
LUA灝忚http://m.shnenglu.com/winmain/archive/2010/03/29/110919.htmlCode KnightCode KnightMon, 29 Mar 2010 13:58:00 GMThttp://m.shnenglu.com/winmain/archive/2010/03/29/110919.htmlhttp://m.shnenglu.com/winmain/comments/110919.htmlhttp://m.shnenglu.com/winmain/archive/2010/03/29/110919.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/110919.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/110919.html2錛宒ostring鍙互鐩存帴鐢?a(1, 2)“鐨勫瓧絎︿覆鏉ヨ皟鐢↙UA寮鏀劇粰C++璋冪敤鐨勮濡俧unction a(x, y)鐨勫嚱鏁般?

Code Knight 2010-03-29 21:58 鍙戣〃璇勮
]]>
CryEnginehttp://m.shnenglu.com/winmain/archive/2010/03/07/109136.htmlCode KnightCode KnightSun, 07 Mar 2010 11:50:00 GMThttp://m.shnenglu.com/winmain/archive/2010/03/07/109136.htmlhttp://m.shnenglu.com/winmain/comments/109136.htmlhttp://m.shnenglu.com/winmain/archive/2010/03/07/109136.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/109136.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/109136.htmlCryEngine緋誨垪寮曟搸鐜╁浠茍涓嶉檶鐢燂紝浠庢渶鍒濈殑鍗曟満娓告垙銆婂宀涙儕欖傘嬨併婂宀涘嵄鏈恒嬪埌鐩墠鐏儹鐨勭綉娓搞婃案鎭掍箣濉斻嬬瓑涓緋誨垪澶т綔閮芥槸鐢辮緋誨垪1鍒?浠e紩鎿庢墦閫狅紝鐩墠錛孋rytek宸茬粡鍙戝竷浜嗚緋誨垪鐨勭涓変唬寮曟搸“CryEngine 3”銆?/p>

銆銆濡備笅鏄渶鏂板叕甯冪殑涓孌?#8220;CryEngine 3”寮曟搸鍒朵綔FPS娓告垙鍦板浘瑙嗛錛屼粠鍒朵綔鍒版紨紺轟粎闀?鍒嗛挓錛岀湅浜嗚浜虹灎鐩粨鑸岋紝鍞忓槝涓嶅凡銆?/p>

Code Knight 2010-03-07 19:50 鍙戣〃璇勮
]]>
[杞澆]錛堣鐐癸級閮庡捀騫充笌涓浗緗戞父http://m.shnenglu.com/winmain/archive/2010/02/28/108627.htmlCode KnightCode KnightSun, 28 Feb 2010 12:21:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/28/108627.htmlhttp://m.shnenglu.com/winmain/comments/108627.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/28/108627.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108627.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108627.html杞澆鑷細http://data.gameres.com/article.game?id=139036
--------------------------------------

榪欑瘒鏂囩珷綰睘鏄幓騫寸湅閮庢暀鎺堢殑璁插駭鍚庣殑涓鏃跺啿鍔紝闄嗙畫鍐欎簡寰堜箙銆備絾寰堝瑙傜偣鐜板湪鐪嬫潵鍊煎緱鍟嗘Ψ錛屽彲鑳芥槸褰撴椂澶縺鍔ㄤ簡錛屽氨欏虹潃閮庢暀鎺堢殑鐞嗚寰涓嬪垎鏋愪簡涓涓嬨備慨鏀圭殑宸ヤ綔閲忓お澶т篃娌℃椂闂村氨鏀懼純浜嗭紝鍘熸牱璐村嚭鏉ヤ緵澶у鍙傝冦?br>---------------------------------------
浜т笟閾炬垬浜変腑鐨勪腑鍥芥父鎴忎笟

銆婁駭涓氶摼闃磋皨銆?br>鍦ㄤ竾浼楁鑵劇殑鍖椾含濂ヨ繍浼氶棴騫曞悗涓嶄箙錛屼竴鏈悕涓恒婁駭涓氶摼闃磋皨銆嬬殑鍥句功鎮勬倓榪涘叆甯傚満錛屽紩鍙戜簡涓闃電儹娼傞儙鍜稿鉤鏁欐巿鍐嶆鍚戝叕浼椾紶杈撲簡浠栫殑鏂版濇兂錛岃鍥犵敓媧誨湪“涓栫晫宸ュ巶”鑰屾棤姣旈獎鍌茬殑鍥戒漢鐢ㄥ彟涓縐嶈瑙掗噸鏂扮湅涓栫晫錛岄噸鏂拌璇嗕腑鍥藉埗閫犱笟銆傞殢鐫騫村簳閲戣瀺嫻峰暩涓嬪崡鏂瑰伐鍘傜殑澶ф壒鍊掗棴鍙婂姹囧偍澶囩殑澶ч噺璐鹼紝榪欑鎬濇兂鏄懼緱瓚婃潵瓚婄弽璐點?br>鑰屼笌姝ゅ悓鏃訛紝涓浗緗戞父涓氬嵈涓鏋濈嫭縐錛屽湪瀵掑啲涓嗗競澧為暱錛岃屼笖鑷富鐮斿彂鐨勫競鍦哄崰鏈夌巼杈懼埌59%銆傚艦鍔夸技涔庝竴鐗囧ぇ濂斤紝鎯呭喌鐪熺殑鏄繖鏍峰悧?
-------------------------------------------------------------
涓庡埗閫犱笟鐨勭浉鍚岀偣

涓浗浼佷笟瀹惰繘鍙f満鍣ㄨ澶囷紝鍒╃敤寤変環鍔沖姩鍔涗笌鍘熸枡錛屾寜鐓у鍥界殑閰嶆柟鎴栨妧鏈爣鍑嗙敓浜уぇ閲忓粔浠峰晢鍝侊紝澶ч儴鍒嗗嚭鍙c傛垜浠殑浼佷笟鏇村儚鏄唬宸ュ巶銆傝屾父鎴忎笟鐨勬儏鍐靛張鎬庝箞鏍峰憿錛熸潵鐪嬬湅鎴戜滑鐨勪竴澶╁惂銆?br>鍦ㄧ彔涓夎鐨勪唬宸ュ巶錛屽伐浜轟滑鎸夌収鏍囧噯寮濮嬬敓浜-box360涓繪満鐨勮姱鐗囥佷富鏉夸笌澶栧3錛屾妧鏈灦鏋勪笌鏍囧噯鏄疘BM銆丄TI銆丼iS鑱斿悎鍒跺畾鐨勶紝鏃跺皻鐨勫瑙傛槸緹庡浗鏃ч噾灞辯殑Astro Studios鍜屾棩鏈ぇ闃殑Hers Experimental鍏卞悓璁捐鐨勩傚伐鍘傛妸鎴愬搧涓婁氦緇欐柊鍔犲潯鍏徃浼熷垱鍔涖佸彴婀懼叕鍙哥含鍒涖佷互鍙婂姞鎷垮ぇ鍏徃澶╁紭錛屾渶鍚庝氦緇欏井杞獙鏀訛紝榪愬線鍏ㄤ笘鐣岀殑閿鍞綉鐐廣?br>鍦ㄤ笂嫻瘋偛紕у垎鍏徃錛屼腑鍥藉憳宸ユ蹇欑潃緇橷360娓告垙銆婃湯鏃ユ垬浜夈嬪埗浣滃浘鍍忕礌鏉愶紝鏈夌殑璐熻矗妯″瀷錛屾湁鐨勫埗浣滆創鍥撅紝鏈夌殑鍒朵綔鍔ㄧ敾銆?br>鍦ㄥ寳浜煇鍏徃鐨勬父鎴忕爺鍙戦」鐩粍錛岀瓥鍒掓竻涓鑹蹭嬌鐢ㄧ潃Microsoft鐨凮ffice鍒朵綔涓涓釜鎵╁睍鍚嶄負Doc銆乆ls鐨勬枃浠訛紝紼嬪簭鍛樹嬌鐢?Microsoft鐨刅isualStudio2005錛屼互ISO鐨処SO C涓烘爣鍑嗭紝鎴栬呯洿鎺ュ湪涔版潵鐨凮gre銆丅igWorld鎴朥E3寮曟搸鍩虹涓婄暐鍔犱慨鏀癸紝緹庡伐浣跨敤Painter銆丳S銆?DSmax涓嶆柇嫻佹按綰跨敓浜у嚭澶ф壒绱犳潗銆?br>鍦ㄤ笂嫻風殑鏌愮綉鍚э紝緗戞父娑堣垂鑰呭儚寰甯鎬竴鏍鋒墦寮浠ntel銆丯vidia鑺墖涓烘牳蹇?鍥戒駭澶栧洿閰嶄歡鐨勭數鑴戯紝榪涘叆Microsoft鐨?WindowsVista鎿嶄綔緋葷粺錛岃礬鐢卞櫒鑷姩鍒嗛厤浜嗕竴涓鍚圛Pv6鏍囧噯鐨処P鍦板潃錛屾秷璐硅呬嬌鐢ㄥ井杞殑IE榪涘叆緹庡浗鍙戞槑鐨処nternet錛岃繛鎺ュ埌鐢典俊鏈嶅姟鍟嗙殑IBM鏈嶅姟鍣ㄥ啀榪炴帴鍒扮洰鏍囩綉绔欑殑鏈嶅姟鍣紝涓嶄箙鎵撳紑涓涓浗浜х綉娓革紝瀹為檯閲囩敤浜哋gre銆丅igWorld鎴朥E3寮曟搸+Microsoft鐨勬暟鎹簱+鍥戒駭澶栫毊銆?br>
涓鍙ヨ瘽錛氭垜浠寜鐓х編鍥芥爣鍑嗕唬宸ュ埗閫犱簡澶ч噺娓告垙鏈恒佹寜鐓у鍥戒漢鐨勮姹備負嬈′笘浠f父鎴忓埗浣滀簡寰堝緹庢湳绱犳潗錛岃繖浜涗駭鍊間篃鑳界畻鍏DP涓庡嚭鍙f婚涓幓錛屼絾鎴戜滑鍗存病鏈夊緱鍒頒換浣曞疄鎯狅紝鍥藉娌℃湁姝e紡鐨勬涓栦唬涓繪満甯傚満錛屾垜浠殑浼佷笟鏃犵紭嬈′笘浠c傛垜浠嬌鐢ㄧ編鍥界殑宸ュ叿杞歡鎸夌収緹庡浗鐨勬妧鏈爣鍑嗙敓浜т簡涓澶у爢鍥戒駭緗戞父錛屾垜浠殑娑堣垂鑰呬嬌鐢ㄧ潃緹庡浗鏍囧噯鐨勭數鑴戠帺鐫緹庡浗鏍囧噯鐨勫浗浜х綉娓革紝鎴戜滑鏃╁凡涔犱互涓哄父銆?br>鏈鏃╁湪涓浗璁劇珛鐮斿彂涓績鐨勫浗闄呮父鎴忓法澶磋偛紕э紝鏈緇堝凡灝嗕腑鍥戒綔涓哄鍖呭熀鍦幫紝涓昏鏄涓栦唬緹庢湳銆備腑鍥藉憳宸ユ垚浜嗗浼侀檷浣庣爺鍙戞垚鏈殑閲嶈鐜妭銆傝繕鏈変笢鏄熴佺淮濉斿+銆?EPIC絳夈備駭鍝佸鏄鐢ㄦ父鎴忔満鐨勬父鎴忥紝綰補鐢ㄤ簬鍑哄彛錛屽洜涓哄浗鍐呮病鏈夎繖涓競鍦恒傘婄敓鍖栭渿鑽°嬨婃湯鏃ユ垬浜夈嬬瓑瓚婃潵瓚婃涓栦唬娓告垙涓嚭鐜頒簡鍥戒漢鐨勮韓褰便備互銆婃礇鍩庡ぇ鐏鵑毦銆嬭繖嬈綳-box娓告垙涓轟緥錛岀敱緹庡浗鎬婚儴榪涜娓告垙鏋舵瀯涓庤瑙夐鏍艱璁★紝棣欐腐宸ヤ綔瀹わ紙Enlight Hong Kong Studio錛夎礋璐g紪紼嬩笌璇︾粏緹庢湳璁懼畾錛岃岀編鏈墽琛岄儴鍒嗗叏閮ㄦ潵鑷ぇ闄嗗伐浣滃錛圗nlight China Studio錛夛紝鍖呮嫭寤烘ā銆佽創鍥俱侀楠煎姩鐢諱笌榪囧満鍔ㄧ敾鍒朵綔銆備篃灝辨槸璇達紝涓浗孌嬪瓨鐨勫崟鏈烘父鎴忎駭涓氫篃灝辨槸緹庢湳澶栧寘浜嗭紝榪欎竴鐐逛笂灝辨槸IT姘戝伐錛屼笌騫夸笢閭d簺閫犻瀷閫犵帺鍏風殑宸ュ巶娌℃湁鏈川鍖哄埆錛岀畝鐩村氨鏄畺姘戝湴銆傚彧鍓╀笅澶у畤絳夊瀵ュ嚑瀹惰繕鍦ㄨ嫤鑻︽敮鎾戯紝鍏朵粬鐨勮涔堝掗棴瑕佷箞杞瀷涓虹綉娓搞?br>榪欎簺鎯呭喌鏄笉姝e父鐨勩傞噾灞辮懀浜嬮暱姹備集鍚涜榪囷細“涓栫晫涓婃病鏈夊摢涓涓皯鏃忔効鎰忔妸浣滀負淇℃伅浜т笟鐏甸瓊鐨勮蔣浠朵駭涓氬畬鍏ㄥ緩绔嬪湪浠栦漢鐨勬櫤鎱т笂銆傚叏涓栫晫浼樼杞歡鐨勫喅鎴樻洿鏄竴縐嶆枃鍖栫殑紕版挒錛屼竴鍦烘櫤鎱х殑杈冮噺錛?#8221;

浠庢妧鏈殑瑙掑害璁詫紝娓告垙浜т笟閾劇敱紜歡涓庤蔣浠朵袱閮ㄥ垎緇勬垚錛屽垎涓鴻姱鐗囥佹搷浣滅郴緇熴丄PI銆佸紩鎿庝笌宸ュ叿銆佺‖浠朵唬宸ヤ笌杞歡澶栧寘錛屾牳蹇冩槸鎽╁皵瀹氬緥銆傜編鍥芥帉鎻$潃涓栫晫紜歡鐨勮蛋鍚戯紝鎽╁皵瀹氬緥鎺ㄥ姩鐫紜歡鐨勪笉鏂崌綰э紝涔熼棿鎺ユ帹鍔ㄦ父鎴忔妧鏈殑涓嶆柇榪涘寲錛屾涓栦唬娓告垙鐨勫嚭鐜板埡嬋浜轟滑鍗囩駭紜歡鎴栬喘涔版柊鏈哄櫒錛屼簬鏄竴涓蔣紜歡浜掔浉淇冭繘鐨勪駭涓氶摼褰㈡垚浜嗐侰SDN紺懼尯鏈変竴縐嶈鐐癸細杞歡浜т笟鍩烘湰褰㈡垚“涓夋闃?#8221;鐨勫浗闄呭垎宸ユ牸灞錛屽鍥界墷鐗㈡帶鍒剁潃鎶鏈爣鍑嗭紝鍐沖畾鎶鏈殑鏈潵璧板悜錛屾敨鍙栭珮棰濆埄娑︺傜編鍥芥帉鎻′簡鏈鍏堣繘鐨勮蔣浠舵妧鏈紝鎺у埗鐫杞歡寮鍙戝鉤鍙板拰杞歡宸ュ叿錛屽湪鍏ㄧ悆杞歡浜т笟閾句腑灞呬簬棰嗗厛鍦頒綅錛屽DX11銆乂S2008銆?DSMax2009銆?Office2007銆傝屼腑鍥戒紒涓氬湪鎶鏈珵浜夊姏涓婁笌澶栧浗宸ㄥご鐨勫樊璺濇槸瓚婃潵瓚婂ぇ浜嗐?br>涓浗娑堣垂鑰呭彲浠ヤ笉涔板浗浜у搧鐗岀殑鐢佃剳錛屼絾鍗翠笉寰椾笉鍦ㄥ吋瀹規満涓嬌鐢↖ntel鐨勯叿鐫?CPU錛孨vidia鐨凣eForce鏄懼崱錛屽井杞殑 WindowsVista銆備腑鍥界帺瀹跺彲浠ヤ笉鐜╁鍥芥父鎴忥紝浣嗗浗浜ф父鎴忎腑宸茬粡鏈変笉灝戠敤鐨勬槸澶栧浗鐨凮gre銆丅igWorld鎴朥E3寮曟搸銆傛牳蹇冩妧鏈案榪滄搷浜庢晫鎵嬶紝鎴戜滑鍙槸鐢熶駭澶栫毊+緇勮鑰屽凡銆?br>鎴戜滑鐨勭‘鐢熸椿鍦ㄥお騫崇洓涓栵紝浣嗕篃鐨勭‘鐢熸椿鍦ㄦ病鏈夌鐑熺殑浜т笟閾炬垬浜変箣涓紝鏃犲0鏃犳伅涔嬩腑宸茬粡钑村惈浜嗘棤闄愭潃鏈恒傛牳蹇冩妧鏈搷浜庢晫鎵嬪氨鏄腑鍥芥父鎴忎笟涓庡埗閫犱笟鐨勫叡鎬с?br>-------------------------------------------------------
涓庡埗閫犱笟鐨勫樊寮?br>
涓浗紺句細縐戝闄㈢爺絀跺憳鐜嬬珛寮鴻涓猴紝鍦ㄥ紑鏀劇殑榪囩▼涓紝鍙戝睍涓浗瀹剁殑鏈澶ф崯澶辮繕涓嶆槸鍥藉鐨勮鍗曪紝鑰屾槸鑷繁鐨勫競鍦鴻祫婧愩?%鐨勫競鍦烘祦澶卞鍥藉鍙戝睍灝辨瀯鎴愪激瀹籌紝瓚呰繃10%灝辨瀯鎴愬疄璐ㄦт激瀹籌紝瓚呰繃30%灝卞彲浠ラ犳垚鏃犳硶寮ヨˉ鐨勪激瀹熾傛垜浠浗瀹剁殑GDP姣忓勾閮藉湪浠ヤ袱浣嶆暟鐨勯熷害閫掑錛岃繘鍑哄彛鎬婚灞″垱鏂伴珮銆備絾涓浗榪涘嚭鍙f婚鐨?60%閮芥潵鑷璧勪紒涓氭垨澶栬祫鎺ц偂浼佷笟錛屽叾涓珮縐戞妧浜у搧楂樿揪80%銆傚浗鍔¢櫌鐮旂┒鍙戝睍涓績鐨勭爺絀舵姤鍛婃寚鍑猴紝鍦ㄤ腑鍥藉凡寮鏀劇殑浜т笟涓紝姣忎釜浜т笟鎺掑悕鍓?浣嶇殑浼佷笟鍑犱箮閮界敱澶栬祫鎺у埗錛氫腑鍥?8涓富瑕佷駭涓氫腑錛屽璧勫湪21涓駭涓氫腑鎷ユ湁澶氭暟璧勪駭鎺у埗鏉冦傚法棰濆埄娑﹁鍥藉浼佷笟鏀彇錛屼腑鍥藉埗閫犱笟鐨勫埄娑︾巼浠?%錛屼弗閲嶅獎鍝嶄腑鍥戒紒涓氱殑縐瘡涓庡啀寰幆鑳藉姏錛岃屼笖涓ラ噸濞佽儊鍥藉鐨勬垬鐣ュ畨鍏ㄣ傝屾父鎴忎笟鐨勬儏鍐典笌涔嬩笉鍚屻?br>涓浗娓告垙涓氱殑涓諱綋鏄綉娓革紝鍗犳嵁浜?9%銆傝岀綉娓鎬笌鍗曟満鏄笉鍚岀殑錛岃繖涓競鍦烘殏鏃朵笉鏄畺姘戝湴銆備腑鍥界綉娓稿競鍦烘殏鏃舵病鏈夊澶栧紑鏀撅紝鑰屽浜庢斂搴滅鍒朵箣涓紝鏀垮簻灝辨槸宸ㄥぇ鐨勪繚鎶や紴錛屽浗瀹剁殑涓浜涙斂絳栭檺鍒朵簡瀹冪殑鍙戝睍錛屼篃闄愬埗浜嗗璧勭殑榪涘叆錛屾墍浠ョ洰鍓嶆皯鏃忎駭涓氬彂灞曡緝蹇侴ameRES璁哄潧涓婏紝鏈変簺璧勬繁浠庝笟鑰呭皷閿愮殑鎸囧嚭錛氱洰鍓嶆皯鏃忎駭涓氬浜庨棴鍏寵嚜瀹堜笅鎶㈠崰鍥藉唴甯傚満鐨勯樁孌點?br>鍦ㄤ繚鎶や紴涓嬶紝澶栬祫闅句互瀹屽叏鎺у埗浜т笟閾撅紝浜т笟浠峰煎ぇ閮ㄥ垎嫻佸悜鏈湡浼佷笟銆傜敱浜庡璧勪笉鑳戒互浠諱綍鏂瑰紡鍙備笌榪愯惀錛屽彧鑳藉鎵炬湰鍦熺殑榪愯惀鍟嗚繘琛屽悎浣滐紝澶栧浗鐮斿彂鍟嗙殑鍒嗘垚姣斾緥澶х害鏄?5%錛屾墍浠ョ綉娓哥殑浜у兼病鏈夊畬鍏ㄦ祦鍚戝鍥斤紝浠g悊鍨嬩紒涓氱殑鍒╂鼎鐜囨槸30%錛岃嚜涓葷爺鍙戠殑緗戞父鍏徃鍒╂鼎鐜囪揪鍒?0%浠ヤ笂銆傚湪2004騫翠唬鐞嗙洓琛岀殑鏃跺欙紝澶栧浗娓告垙涓搴﹀崰鎹簡甯傚満鐨?0%錛屽惛璧頒簡澶ч噺璧勯噾銆傜洰鍓嶈嚜涓葷爺鍙戝崰鎹簡59%錛岃祫閲戝洖絎肩殑姣斾緥瓚婃潵瓚婂ぇ錛屾儏鍐靛鏈湡鏈夊埄銆傚嵆渚挎槸涔濆煄榪欐牱鐨勭函浠g悊鍨嬩紒涓氾紝鍦ㄦ毚闆殑鐩樺墺涔嬩笅錛屼笁騫存潵閫氳繃銆婇瓟鍏戒笘鐣屻嬩篃縐瘡浜?0浜胯祫閲戯紝淇濇寔浜嗗厖瑁曠殑鐜伴噾嫻侊紝涓烘棩鍚庤嚜涓葷爺鍙戣漿鍨嬪瀹氫簡闆勫帤鐨勫熀紜銆?br>
浜т笟閾句篃鍙互鍒嗕負錛氱數淇¤繍钀ュ晢銆佹父鎴忕爺鍙戝晢銆佽繍钀ュ晢銆佹笭閬撳晢銆佸獟浣撱備駭涓氶摼鐨勪笂娓告槸宸ュ叿涓庢祦琛屽唴瀹癸紝鍏朵腑鐑棬褰辮涓庢枃瀛﹀璧勬病鏈夋帶鍒訛紝鍙嶈屾槸鍥藉唴浼佷笟閫氳繃鏀惰喘鎺у埗浜嗗叾涓竴閮ㄥ垎錛屽鐩涘ぇ鐨勮搗鐐規枃瀛︾綉錛堢洓澶ф枃瀛︼級銆傚璧勫湪宸ュ叿鍗犱紭鍔匡紝鎺屾帶浜嗗ぇ閮ㄥ垎鍏抽敭鍩虹宸ュ叿涓庡鉤鍙幫紝濡俉indowsVista銆?VisualStudio2008銆乁E3銆乄ACOM緇樺浘鏉褲侀叿鐫?銆侀珮綰ф湇鍔″櫒錛岃繖浜涙槸鍥藉唴鏃犲姏鎺屾彙鐨勶紱涓父鏄爺鍙戯紝澶栧浗鍗犱紭鍔匡紝浣嗙敱浜庢枃鍖栧樊寮傦紝澶栧浗娓告垙鍦ㄥ浗鍐呯殑绔炰簤鍔涚浉瀵瑰噺寮變簡錛屽湪鑷富鐮斿彂鑳藉姏涓嶆柇鎻愰珮鐨勪粖澶╋紝姘戞棌浼佷笟鐨勫澶栦緷璧栧害澶уぇ闄嶄綆錛屼唬鐞嗘椂鐨勮浠瘋兘鍔涗篃鐩稿鎻愰珮錛屽彲浠ヤ笌瀵規柟榪涜鍗氬紙錛屼唬鐞嗛毦搴︿篃鐩稿闄嶄綆浜嗭紱鑰屼笅娓告槸榪愯惀錛屽璧勬棤娉曚粙鍏ワ紝鍙兘鑾峰緱涓閮ㄥ垎鍒嗘垚銆?br>涓庢鍚屾椂錛岀洓澶х瓑鍏徃宸茬粡寮濮嬫暣鍚堜駭涓氶摼錛屽涓婃父鐨勭綉娓稿紩鎿庛佹枃瀛︾綉錛屼腑娓哥殑宸ヤ綔瀹ゅ茍璐笌鍚堜綔錛屼笅娓哥殑娓犻亾鎵╁紶涓庢搗澶栧嚭鍙c傚湪浜т笟閾炬垬浜変腑鐨勬垬鏂楀姏鎸囨暟姝e湪涓嶆柇澧炲己銆傝繖浜涗紭鍔挎槸澶栦紒鏃犳硶鑾峰緱鐨勩?br>鎶涘紑澶嶆潅鐨勬妧鏈棶棰橈紝鎹竴涓瑙掞紝浜т笟閾炬垬浜夌殑鍏抽敭鍦ㄤ簬璧勯噾鐨勬祦鍚戙備粠璧勯噾鐨勮搴︽潵鐪嬶紝澶栧浗鍔垮姏鍦ㄤ笂娓歌禋鍙栦簡宸ュ叿鐨勯挶錛屽湪涓父鑾峰緱浜嗕竴浜涗唬鐞嗚垂錛屽湪涓嬫父鑾峰緱浜?5%鐨勮繍钀ュ垎鎴愩傛墍浠ユ暣浣撲笂錛屼駭涓氫環鍊肩殑鍏垚浠ヤ笂閮藉洖鍒板浗鍐咃紝浜т笟閾炬垬浜変腑鎴戞柟鍗犱富瀵鹼紝鏈夊埄浜庢皯鏃忎紒涓氳嚜韜殑璧勯噾縐瘡涓庡驚鐜紝鑰岃繖鎭版伆鏄駭涓氬疄鍔涗笉鏂寮虹殑鍏抽敭銆傝祫閲戝ぇ閮ㄥ垎嫻佸悜鍥藉唴灝辨槸涓浗娓告垙涓氫笌鍒墮犱笟鐨勬渶澶у樊寮傘?br>-----------------------------------------------------------
闀胯繙鍙戝睍鐨勯殣鎮?br>
琛ㄩ潰涓婏紝涓浗娓告垙涓氬彇寰椾簡鑳滃埄錛屼絾闄ゅ幓鏀垮簻鐨勪繚鎶ゃ佸浗澶栫殑寮曟搸涓庡伐鍏蜂箣澶栵紝鍙堟湁鍑犲垎鍔熷姵鍙互褰掑姛浜庤嚜宸辯殑寮哄ぇ瀹炲姏鍛紵
浠庡搧鐗岀殑瑙掑害鏉ョ湅錛屼腑鍥界殑鐭ュ悕娓告垙鍝佺墝榪樻槸澶皯錛岃繕鏈夋病涓栫晫綰х殑娓告垙澶т綔銆傝繖涓棶棰樺緇堥毦浠ヨВ鍐籌紝鑰岃繖涓棶棰樹笉瑙e喅錛屾皯鏃忕綉娓鎬紒涓氬氨鍍忔槸鏆村彂鎴瘋屼笉鏄笘鐣屽叕璁ょ殑欏跺皷娓告垙鍟嗐傝嚜涓葷爺鍙戠殑鐡墮鏈夊緢澶氥傝岃繖鍑犲勾鐨勩婂姴鑸炲洟銆嬨婇瓟鍏戒笘鐣屻嬩唬鐞嗘潈鐨勬伓鎬х珵浜変簨浠舵伆鎭拌鏄庝簡姘戞棌浼佷笟鐨勫疄鍔涜杽寮便?br>浠庡彟涓涓搴︾湅錛屼腑鍥絀T涓氬凡緇忚觸浜嗭紝杞歡涓氱殑85%銆佺‖浠剁殑澶у崐閮藉凡緇忎笉灞炰簬鎴戜滑浜嗐傛垜浠敓瀛樺湪澶栧浗鐨勬妧鏈爣鍑嗕箣涓嬶紝澶勪簬浜т笟閾劇殑涓嬫父涓庡緙橈紝鍗楀寳宸紓宸ㄥぇ錛屼笉瀵圭瓑銆傜綉娓稿競鍦虹殑灞閮ㄨ儨鍒╀笉鑳芥敼鍙業T甯傚満鏁翠綋鐨勫姡鍔褲?br>娌℃湁浜鴻兘鍚﹁榪欎釜琛屼笟瑙勬ā寰堝ぇ錛屽彂灞曡繀閫燂紝浣嗗緢澶氫漢閮借涓烘垜浠繕鏄釜寮卞浗銆傛病鏈夎嚜宸辯殑鏍稿績鎶鏈佸鉤鍙般佸浗闄呭ぇ浣溿佺帇鐗屽埗浣滀漢銆佺煡鍚嶇爺鍙戝洟闃熴佸ぇ鍙戣鍟嗭紝鎵浠ュ緢闅劇О涓烘父鎴忓己鍥斤紝鑰屽彧鏄畺姘戝湴鎴栧嵆灝嗘垚涓烘畺姘戝湴銆?br>浠涔堟槸娓告垙寮哄浗錛熸棩鏈湁鐫NDS銆乄ii銆丳S3騫沖彴錛屼互姝ゅ鉤鍙版爣鍑嗘寜鐓ф爣鍑嗘父鎴忕被鍨嬫墦閫犵殑浼楀鏍囧噯鍖栫帇鐗屾父鎴忥紝鍏ㄤ笘鐣岀殑娓告垙鍏徃閮借璺熺潃榪欎釜鏍囧噯寮鍙戝茍閿鍞駭鍝侊紝杞‖浠跺叡鍚屽垱閫犲法澶х殑浜у箋傚埗瀹氱‖浠舵爣鍑嗐佹爣鍑嗘父鎴忕被鍨嬶紝鍒跺畾瑙勫垯鏄竴嫻佷紒涓氱殑閫夋嫨錛岃繖縐嶄紭鍔挎槸闅句互鍦ㄧ煭鏈熻刀涓婄殑銆傚己鍥介渶瑕侀暱鏈熺殑娓愯繘鐨勭Н绱紝鏃犳暟緇嗚妭鐨勯敜鐐鹼紝澶ц穬榪涙棤鐢ㄣ傜編鍥芥棩鏈繖浜涘己鍥界敤浜?8騫存椂闂存墠褰㈡垚鐩墠鐨勫眬闈€備腑鍥芥父鎴忎笟鎵嶄笉榪?4騫達紝鑰屼笖鍙戝睍鍙楀埌澶х幆澧冮檺鍒訛紝涓庡浗澶栧樊璺濆法澶с?br>
鍦ㄦ斂搴滅殑淇濇姢浼炰笅錛屾皯鏃忎駭涓氳幏寰椾簡鏆傛椂鐨勪富瀵煎湴浣嶃備絾闂鍦ㄤ簬錛屼竴鏃﹁繖涓競鍦虹殑寮鏀劇▼搴︽墿澶э紝濡傚璧勫彲浠ヤ互鍚堣祫鍏徃鎴栫嫭璧勫叕鍙告柟寮忓弬涓庤繍钀ワ紝閭d箞浠ユ毚闆殑鐙煎瓙閲庡績鏉ユ帹嫻嬶紝鏁翠釜浜т笟浠峰兼祦鍚戝鍥界殑姣斾緥浼氬ぇ澶ф彁楂橈紝姘戞棌浼佷笟鍙楀埌鏋佸ぇ鍐插嚮銆?br>涓浗鏈変笉灝戜駭涓氶兘鏄湪甯傚満鐨勪笉鏂紑鏀句腑琚璧勬帶鍒剁殑錛屽鍖栧鍝併佹補鏂欍佹満姊般佽兌鍗楓傛皯鏃忎紒涓氱殑瀹炲姏榪樹笉澶熷己錛屽氨鍍忔槸灝忓瀛愪笌鑱屼笟鎷沖嚮鎵嬪鎴橈紝璐ュ鑳滃皯銆備粠榪欎釜瑙掑害鏉ョ湅錛岀綉娓鎬笟涓庡叾浠栬涓氱殑鎯呭喌鏋佷負綾諱技錛屼笉鍚岀殑鏄繖涓涓氳繕澶勪簬淇濇姢浼炰箣涓嬶紝娌℃湁瀹屽叏寮鏀俱備絾鎬諱細鏈夊紑鏀劇殑涓澶╃殑銆?br>涓浗緗戞父涓氱殑鍙戝睍榪戝嚑騫村凡緇忛愭笎鎱笅鏉ヤ簡錛屽競鍦鴻妯℃繪湁涓澶╀細璧板悜鍋滄粸銆傚畠涓嶄細鏃犻檺鎵╁紶涓嬪幓錛屾垚鐔熺殑緗戞父甯傚満蹇呯劧鏄綆澧為暱銆佷綆鍒╂鼎鐜囦笌楂樼珵浜夌殑銆傚埌閭d釜鏃跺欙紝涓浗娓告垙涓氫細璧板悜鍝噷錛?br>
涓浗鐨勬父鎴忓競鍦轟笌浠諱綍鍥藉閮戒笉鐩稿悓錛屽畠浠?00浜垮厓鐨勭綉娓稿競鍦轟負琛ㄥ眰錛屼互涓婂崈浜跨殑鍏冪殑瀹剁敤鏈恒佹帉鏈恒丳C鍗曟満鍦頒笅姘磋揣銆佺洍鐗堝競鍦轟負閲屽眰銆傜洰鍓嶅浗鍐呬紒涓氬彧鑳戒粠琛ㄥ眰甯傚満璧氶挶錛岃屽鍦頒笅甯傚満鏃犺兘涓哄姏銆傞偅涓湴涓嬪競鍦哄瘎鎵樼潃鐜╁瀵瑰悇騫沖彴鍗曟満娓告垙鐨勭儹鐖便佹湁闄愭敹鍏ョ殑鏃犲銆佷笌瀵硅涓氱幇鐘剁殑濡ュ崗錛屼篃璞″緛鐫鏈潵鍙戝睍鐨勬柟鍚戙傝櫧鐒跺崟鏈烘父鎴忎笟鐢辯洓杞“錛屽交搴曟秷浜★紝浣嗕漢浠殑鐑儏瓚婂彂鐐界儓銆?br>涓浗緗戞父涓氱殑浜у煎湪鍏ㄧ悆娓告垙涓氫腑涔嬪崰6%錛屾垜浠緇堜笌宸ㄥぇ鐨勫鐢ㄦ父鎴忔満涓庢帉鏈哄競鍦洪殧緇濄傛垜浠殑浜т笟緇撴瀯鏄笘鐣屼笂鐙竴鏃犱簩鐨勪腑鍥界壒鑹茬殑錛屾病鏈夊摢涓浗瀹舵槸濡傛鍦頒緷璧栫綉娓搞傚浠婅嚜涓葷爺鍙戠綉娓哥殑鐡墮姝d笌鍗曟満鍙戝睍涓嶅姏鐨勬儏鍐靛瘑鍒囩浉鍏籌紝緇忛獙涓嶈凍錛岀己涔忓彲浠ュ埄鐢ㄧ殑娓告垙鍘熷瀷錛岃屽彧鏄竴紿濊渹鍦伴殢澶ф祦錛岀己涔忚嚜宸辯殑鐙埌鎬濊冧笌鍒涢犲姏銆?004騫村尶鍚嶄漢澹殑涓綃囩伀鐖嗙綉緇滃紩鍙戞棤鏁拌漿杞界殑濂囨枃銆婁竴綃囦護鎵鏈夋父鎴忓湀鐨勫厔寮熸睏棰滅殑鏂囩珷銆嬩腑璇寸殑宸茬粡寰堥忓交浜嗐?br>涓浗緗戞父涓氳兘鍚﹀湪鏈潵鎴愪負涓栫晫絎竴錛岃繕鍊煎緱鍟嗘Ψ銆傚亣璁炬垚鍔熶簡錛岄偅鏃朵腑鍥戒篃鏈繀灝辨槸娓告垙寮哄浗銆傚洜涓虹綉娓稿湪鍏ㄧ悆娓告垙涓氬彧鏄皬寮燂紝鏃犳硶褰誨簳鍙栦唬搴炲ぇ鐨勫崟鏈哄競鍦恒?br>鍗曟満娓告垙濡備綍浠庡浠婄殑緹庢湳澶栧寘杞悜鏈潵鐨勯噸寤哄浗鍐呭崟鏈烘父鎴忓競鍦猴紝鏉鍏ュ浗闄呭鐢ㄦ父鎴忔満涓庢帉鏈哄競鍦猴紝榪欐槸鏈潵蹇呯劧瑕侀潰涓寸殑闂銆傝繖涔熸槸涓浗瑕佹垚涓轟笘鐣屽叕璁ゆ父鎴忓己鍥界殑鏈澶ч殰紕嶃傛湭鏉ョ殑浜т笟閾句笂娓告槸娓告垙鍩虹宸ュ叿銆佸鉤鍙板埗閫犮佹祦琛屽唴瀹癸紱涓父鏄悇騫沖彴鍚勭被鍨嬫父鎴忕爺鍙戯紱涓嬫父鏄攢鍞佽繍钀ャ佸煿璁佹父鎴忚鐢熶駭涓氥傞偅鏃剁殑浜т笟閾炬垬浜変細鏇村姞綺懼僵錛屼腑鍥界湡姝d笌鍥介檯鎺ヨ建錛屽湪浜т笟閾炬垬浜変腑鎴愪負娓告垙寮哄浗銆?br>--------------------------------------------------
鍙傝冭祫鏂?br>銆婁駭涓氶摼闃磋皨銆嬩綔鑰咃細閮庡捀騫?br>銆婂埄鐢ㄥ璧勫叓鎬濄嬶紙鏉ヨ嚜銆婄灜鏈涙柊闂誨懆鍒娿嬶級
銆婁竴綃囦護鎵鏈夋父鎴忓湀鐨勫厔寮熸睏棰滅殑鏂囩珷銆嬩綔鑰咃細緗戠粶鍖垮悕浜哄+
銆婅糠鑼殑紼嬪簭鍛樺拰涓浗杞歡涓氥嬶紙鏉ヨ嚜CSDN錛変綔鑰咃細wfwonde (閫嗛娌夋撥)
闃垮仴鐨勫姩婕父鎴忔暀瀹わ紙鏉ヨ嚜澶╂動鍗氬錛?br>鐧懼害鐧劇
-----------------------------------------------



Code Knight 2010-02-28 20:21 鍙戣〃璇勮
]]>
[杞琞CEGUI涓殑姹夊瓧鏄劇ず瀹炵幇http://m.shnenglu.com/winmain/archive/2010/02/27/108576.htmlCode KnightCode KnightSat, 27 Feb 2010 13:38:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/27/108576.htmlhttp://m.shnenglu.com/winmain/comments/108576.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/27/108576.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108576.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108576.html鍑犳棩鍓嶏紝鐢?nbsp;CEGUI鍋氱晫闈紝鍙戠幇鏃犳硶搴旂敤CEGUI鐨剋indow涓璼etText()鍑芥暟鐩存帴鏄劇ず涓枃銆備笂緗慻oogle涓涓嬶紝鍘熸潵緇忚繃綆鍗曠殑瀛楃杞寲鍙互鏄劇ず涓枃錛堝伔鐫涔愶紝CEGUI澶柟渚夸簡錛夈?/p>

 

鏂規硶濡備笅錛堝紩鐢級錛歨ttp://blog.csdn.net/kun1234567/archive/2008/04/11/2282761.aspx

CEGUI浣跨敤utf8緙栫爜鏍煎紡銆傝繖灝辨剰鍛崇潃鎴戜滑鍙互寰堢畝鍗曠殑灝辨樉紺轟腑鏂囥?/p>

 

1銆佸紕涓寘鍚腑鏂囩殑瀛椾綋錛屽湪榪欓噷鎴戝熺敤澶у鏁頒緥瀛愰噷鐨?“C錛?windows/Font/simhei.ttf”鏂囦歡銆傛妸榪欎釜鏂囦歡鎷瘋礉鍒癉atafiles鏂囦歡澶圭殑Font鏂囦歡澶歸噷銆?/p>

 

2銆侀殢渚跨収鐫涓涓?.Font鏂囦歡錛岃嚜宸卞啓涓涓猻imhei.font鏂囦歡銆傚彲浠ョ敤TXT鍐欙紝鐒跺悗淇濆瓨錛屾湁鐨勬湅鍙嬭闇瑕佷繚瀛樹負utf8緙栫爜鏍煎紡錛屽疄闄呬笂鏄笉闇瑕佺殑銆?/p>

 

3銆佸悓鏃舵敞鎰忎慨鏀逛綘鍔犺澆鍒扮▼搴忛噷鐨剆cheme鏂囦歡錛屽皢閲岄潰鐨勫瓧浣撴枃浠惰緗垚simhei.ttf銆備綘涔熷彲浠ョ戶緇嬌鐢‵irstWindow榪欎釜渚嬪瓙錛岃繖鏍風殑璇濈洿鎺ヤ慨鏀規簮浠g爜閲岀殑瀛椾綋涓簊imhei.tff銆?/p>

 

4銆佺幇鍦ㄥ湪紼嬪簭閲岃繘琛屽瓧絎︾紪鐮佽漿鎹紝鎴戞嬁浠g爜璇存槑闂錛?/p>

 

std::wstring aa = L"123涓枃abc銇傘亜銇嗐亪銇?;

char buff[128] = "";

WideCharToMultiByte( CP_UTF8, 0, aa.c_str(), aa.size(), buff, sizeof(buff), 0, 0);

button1->setText ( CEGUI::String ( CEGUI::utf8* )buff );

 

鍘熺悊鏄繖鏍風殑錛屽浜巙tf8鏉ヨ錛岃嫳鏂囧瓧絎﹀拰ansi緙栫爜鍦ㄥ唴瀛樺竷灞涓婃病浠涔堝尯鍒紝閮芥槸涓涓猆CHAR銆備絾鏄浜庨潪鑻辨枃瀛楃錛屽垯鏄疷CHAR+UCHAR+UCHAR銆傚鏋滄垜浠墜宸ヨ繘琛岀紪鐮佹牸寮忚漿鎹紝浼氭瘮杈冪儲鐞愩?/p>

 

姣旇緝鍋鋒噿鐨勬柟娉曞氨鏄紝鎴戜滑鍏堢敤WCHAR(unicode鍐呭瓨甯冨眬,UCHAR+UCHAR+UCHAR+UCHAR)鏉ュ偍瀛橀渶瑕佹樉紺虹殑瀛楃涓詫紝鐒跺悗璋冪敤Win32API鏉ュ府鎴戜滑鎶婂瀛楃杞崲鎴恈har(澶氬瓧鑺傚瓧絎﹂泦鍐呭瓨甯冨眬)銆?/p>

 

榪欏氨鏄熀鏈柟娉曚簡錛岀劧鍚庢垜浠彲浠ユ牴鎹繖涓漿鎹㈡柟閽堬紝鍒╃敤Win32API闅忔剰鐨勮漿鎹㈠瓧絎︾紪鐮佹牸寮忥紝浠庤屾弧瓚崇▼搴忎腑鐨勫悇縐嶉渶姹傘?/p>

 

 

       閫氳繃姝ゆ柟娉曞彲浠ユ樉紺轟腑鏂囷紝榪樻病鏉ュ緱鎬ラ珮鍏村氨鍙戠幇浜嗙浜屼釜闂錛氳繖縐嶆柟娉曟樉紺轟腑鏂囬熷害澶參錛堟樉紺哄嚑鍗佷釜瀛楅渶瑕佺瓑涓?銆?縐掑乏鍙籌級銆傞毦閬撴病鏈夐珮鏁堢殑鏂規硶鍚楋紵

浜庢槸緇х畫Google(鎴戝緢鎳掞紝鍒漢鑳藉仛鐨勪簨鎯呬粠鏉ヤ笉楹葷儲鑷繁錛屾噿寰楄窡韙唬鐮?錛岀粨鏋滆繕鐪熻鎴戞壘鍒頒簡涓ょ瘒鐩稿叧鐨勬枃绔狅細涓浠芥槸鍗冮噷椹倽鐨勩婃父鎴忎腑姹夊瓧鏄劇ず鐨勫疄鐜頒笌鎶宸с嬶紝鍙︿竴浠芥槸鍏嶈垂鎵撳伐浠旂殑銆婅OGRE鏀寔涓枃銆嬨備粠涓壘鍒頒簡鍘熷洜錛?/p>

       鍘熸潵鍦ㄦ父鎴忎腑錛屾槸灝嗙偣闃靛瓧搴撴垨tif瀛椾綋閲岀殑鏂囧瓧鍐欒繘綰圭悊錛屾牴鎹渶姹傝創鍒版寚瀹氱殑浣嶇疆銆傝嫳鏂囩殑鏄劇ず闈炲父綆鍗曪紝鍙湁26涓瓧姣嶏紝灝辯畻鍐嶅姞涓浜涙爣鐐廣佺鍙蜂粈涔堢殑錛岀敤涓寮犱綅鍥撅紝灝卞彲浠ヨ凍浠ユ樉紺烘墍鏈夌殑鍗曡瘝浜嗐傝屼腑鏂囪鍍忓鐞嗚嫳鏂囬偅鏍鳳紝鎶婃墍鏈夌殑姹夊瓧閮戒繚瀛樺湪涓寮犱綅鍥鵑噷錛岄偅涔堟瘡涓縐嶅瓧浣撻兘瑕佺敓鎴愪竴涓法鍨嬩綅鍥俱傚湪 GB2312涓紝涓鍏辨湁6000澶氫釜姹夊瓧錛屽氨綆楁槸鐢?6*16錛屾嵁璇翠細鏈?.5M錛侊紙椹倽鍏勮鐨勶紝鎴戞病綆楄繃錛?/p>

    緇х畫Google錛屼篃娌℃湁鎵懼埌瑙e喅闂鐨勭洿鎺ュ姙娉曪紝鍞夛紝鍐嶆噿涔熷緱鑷繁涓婇樀浜嗐?/p>

閫氳繃璺熻釜璋冭瘯錛屽彂鐜頒簡闂鎵鍦紝鍘熸潵緗瓉紲擱灝辨槸浠栵細

 

const FontGlyph *Font::getGlyphData (utf32 codepoint)

{

     if (codepoint > d_maxCodepoint)

         return 0;

 

         if (d_glyphPageLoaded)

         {

              uint page = codepoint / GLYPHS_PER_PAGE;

              uint mask = 1 << (page & (BITS_PER_UINT - 1));

              if (!(d_glyphPageLoaded [page / BITS_PER_UINT] & mask))

              {

                   d_glyphPageLoaded [page / BITS_PER_UINT] |= mask;

                   rasterize (codepoint & ~(GLYPHS_PER_PAGE - 1),

                       codepoint | (GLYPHS_PER_PAGE - 1));

              }

         }

 

         CodepointMap::const_iterator pos = d_cp_map.find (codepoint);

         return (pos != d_cp_map.end()) ? &pos->second : 0;

}

 

鍘熸潵CEGUI鏍規嵁Unicode瀛楃鐨勭紪鐮侀『搴忥紝涓烘瘡256涓瓧絎﹀垎閰嶄竴寮犵汗鐞嗭紙渚嬪緙栫爜0-255瀛樻斁鍦ㄧ汗鐞嗕竴錛岀紪鐮?68-1023 瀛樻斁鍦ㄧ汗鐞嗗洓錛夈傝嫳鏂囧緢瀹規槗鎼炲畾浜嗭紝閭d箞鍑犱釜瀛楃涓寮犵汗鐞嗗氨澶熶簡錛屽彲涓枃灝卞緱闈犺繍姘斾簡錛屾湁鏃舵樉紺哄嚑涓瓧灝辮鐢熸垚鍑犲紶綰圭悊錛岃繕瑕佸皢姣忓紶綰圭悊鐢ㄤ笉闇瑕佺殑鐩擱偦瀛楀~婊★紝鍔蟲皯浼よ儲錛?/p>

鍙戠幇浜嗛棶棰橈紝鎴戜究鎸夌収鍗冮噷椹倽鐨勬濇兂瀵瑰嚱鏁拌繘琛屼簡鏀歸狅紝灝嗕嬌鐢ㄧ殑鏂囧瓧鏀懼叆涓寮犵汗鐞嗕腑錛屽洜涓虹汗鐞嗘渶澶ф壙杞?56涓瓧錛屾墍浠ワ紝褰撴眽瀛楄秴榪?56涓椂錛屽垯灝嗕笉甯哥敤鐨勫幓鎺夛紝灝嗘柊鐨勫瓧絎﹀啓鍏ャ?/p>

鍚庢潵鎴戝彂鐜版眽瀛楃殑寮曠敤娌℃湁澶鐨勮寰嬶紝甯哥敤鐨勪竴鍗冨姹夊瓧鍑虹幇鐨勬鐜囨病鏈夐偅涔堟偓孌婏紙搴熻瘽錛岃涓嶆庝箞鏄父鐢ㄥ憿!錛夛紝娌℃湁鍔炴硶寰堝ソ鍦版寜鐓т嬌鐢ㄧ殑棰戠巼灝嗘眽瀛楅檺鍒跺湪256涓瓧浠ュ唴錛屽啓榪涚汗鐞嗭紝灝辯儲鎬т竴鏃︽弧浜嗗氨灝嗗瓧鍏ㄩ儴閲婃斁鎺夛紝閲嶆柊鍐欏叆銆傦紙涔熼渶鏈夋垜娌℃壘鍒幫紝榪樿楂樻墜鎸囨暀錛?/p>

浠g爜濡備笅錛?/p>

const FontGlyph *Font::getGlyphData (utf32 codepoint)

{

     if (codepoint > d_maxCodepoint)

         return 0;

 

     if(codepoint < 256)  //鍐沖畾淇濈暀涓寮犵汗鐞嗘斁鑻辨枃鍜屽瓧絎?/p>

     {

         if (d_glyphPageLoaded)

         {

              uint page = codepoint / GLYPHS_PER_PAGE;

              uint mask = 1 << (page & (BITS_PER_UINT - 1));

              if (!(d_glyphPageLoaded [page / BITS_PER_UINT] & mask))

              {

                   d_glyphPageLoaded [page / BITS_PER_UINT] |= mask;

                   rasterize (codepoint & ~(GLYPHS_PER_PAGE - 1),

                       codepoint | (GLYPHS_PER_PAGE - 1));

              }

         }

 

         CodepointMap::const_iterator pos = d_cp_map.find (codepoint);

         return (pos != d_cp_map.end()) ? &pos->second : 0;

     }

     else //鏄劇ず姹夊瓧鍟?/p>

     {

         CodepointMap::const_iterator pos;

 

         pos = d_hz_map.find (codepoint);

 

         if(pos != d_hz_map.end())

         {

              return (pos != d_hz_map.end()) ? &pos->second : 0;

         }

         else

         {

              rasterizeHZ(codepoint);

 

              pos = d_hz_map.find (codepoint);

              return (pos != d_hz_map.end()) ? &pos->second : 0;

         }

     }

}

 

void FreeTypeFont::rasterizeHZ (utf32 codepoint)

{

     int num;

     uint texsize = 512;

 

     if(d_hz_map.size() < 256)

     {

         float adv = d_fontFace->glyph->metrics.horiAdvance * float(FT_POS_COEF);

 

         d_hz_map[codepoint] = FontGlyph (adv);

     }

     else

     {

         d_hz_map.clear();

 

          ImagesetManager::getSingleton ().destroyImageset (hzImageset->getName ());

 

         hzImageset = ImagesetManager::getSingleton ().createImageset (

              d_name + "_auto_glyph_images_" ,

              System::getSingleton ().getRenderer ()->createTexture ());

 

         d_glyphImages.push_back (hzImageset);

 

         float adv = d_fontFace->glyph->metrics.horiAdvance * float(FT_POS_COEF);

 

         d_hz_map[codepoint] = FontGlyph (adv);

     }

 

     CodepointMap::const_iterator hzInter  = d_hz_map.find(codepoint);

 

     if (!hzInter->second.getImage())

     {

         // Render the glyph

         if (FT_Load_Char (d_fontFace, hzInter->first, FT_LOAD_RENDER | FT_LOAD_FORCE_AUTOHINT |

              (d_antiAliased ? FT_LOAD_TARGET_NORMAL : FT_LOAD_TARGET_MONO)))

         {

              std::stringstream err;

              err << "Font::loadFreetypeGlyph - Failed to load glyph for codepoint: ";

              err << static_cast<unsigned int> (hzInter->first);

              err << ".  Will use an empty image for this glyph!";

              Logger::getSingleton ().logEvent (err.str (), Errors);

 

              // Create a 'null' image for this glyph so we do not seg later

              Rect area(0, 0, 0, 0);

              Point offset(0, 0);

              String name;

              name += hzInter->first;

              hzImageset->defineImage(name, area, offset);

              ((FontGlyph &)hzInter->second).setImage(&hzImageset->getImage(name));

         }

         else

         {

              uint glyph_w = d_fontFace->glyph->bitmap.width + INTER_GLYPH_PAD_SPACE;

              uint glyph_h = d_fontFace->glyph->bitmap.rows + INTER_GLYPH_PAD_SPACE;

 

              // Check if glyph right margin does not exceed texture size

              uint x_next = m_nHZX + glyph_w;

              if (x_next > texsize)

              {

                  m_nHZX = INTER_GLYPH_PAD_SPACE;

                   x_next = m_nHZX + glyph_w;

                   m_nHZY = m_nHZYB;

              }

 

              // Check if glyph bottom margine does not exceed texture size

              uint y_bot = m_nHZY + glyph_h;

             

 

              // Copy rendered glyph to memory buffer in RGBA format

              drawGlyphToBuffer (hzmem_buffer + (m_nHZY * texsize) + m_nHZX, texsize);

 

              // Create a new image in the imageset

              Rect area(static_cast<float>(m_nHZX),

                   static_cast<float>(m_nHZY),

                   static_cast<float>(m_nHZX + glyph_w - INTER_GLYPH_PAD_SPACE),

                   static_cast<float>(m_nHZY + glyph_h - INTER_GLYPH_PAD_SPACE));

 

              Point offset(d_fontFace->glyph->metrics.horiBearingX * static_cast<float>(FT_POS_COEF),

                   -d_fontFace->glyph->metrics.horiBearingY * static_cast<float>(FT_POS_COEF));

 

              String name;

              name += hzInter->first;

              hzImageset->defineImage (name, area, offset);

              ((FontGlyph &)hzInter->second).setImage (&hzImageset->getImage (name));

 

              // Advance to next position

              m_nHZX = x_next;

              if (y_bot > m_nHZYB)

              {

                   m_nHZYB = y_bot;

              }

         }

     }

 

     // Copy our memory buffer into the texture and free it

     hzImageset->getTexture ()->loadFromMemory (hzmem_buffer, texsize, texsize, Texture::PF_RGBA);

 

}

 

     OK錛岄棶棰樻悶瀹氾紝鎵撳畬鏀跺伐銆傝瘯璇曪紝鏁堟灉榪樹笉閿欙紝鍙互媧楁礂鐫′簡銆傜壒灝嗚嚜宸辯殑涓鐐逛綋浼氬啓鍑烘潵錛岀粰鏂版墜鎻愪緵涓嵎寰勶紝涔熷笇鏈涢珮鎵嬫壒璇勬寚鏁欍?/p>

Code Knight 2010-02-27 21:38 鍙戣〃璇勮
]]>
[杞琞OGRE鏂版彃浠禤agedGeometry(嫻烽噺鍦烘櫙鍒嗛〉璋冨害)http://m.shnenglu.com/winmain/archive/2010/02/24/108371.htmlCode KnightCode KnightWed, 24 Feb 2010 13:31:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/24/108371.htmlhttp://m.shnenglu.com/winmain/comments/108371.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/24/108371.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108371.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108371.html
1,浠嬬粛錛?/span>
         

 PagedGeometry鏄?/span>OGRE寮曟搸鐨勪竴涓彃浠訛紝瀹冨錛堟棤絀鳳級澶у尯鍩熺殑嫻烽噺緗戞牸鐨勬覆鏌撴彁渚涗紭鍖栫瓥鐣ャ傚畠闈炲父閫傚悎浜庣瀵嗙殑媯灄鍜屽澶栧満鏅紝閭i噷鏈夋搗閲忕殑鏍戯紝鑽夛紝宀╃煶錛岀亴鏈ㄤ笡絳夊満鏅璞°?/span>

 

2, PagedGeometry綆$悊

PagedGeometry class

 

      璇ョ被璐熻矗鍔犺澆閭d簺闇瑕佺珛鍗籌紙鎴栧緢蹇級鍙鐨勫満鏅嚑浣曪紝鑰屼笉鍔犺澆鍏朵粬鐨勫満鏅互鑺傜害鍐呭瓨絀洪棿銆?/span>PagedGeometry寮曟搸鍙互閫氳繃璇稿闈欐佸嚑浣曪紝imposters絳夋柟娉曞幓鏄劇ず瀹炰綋瀵硅薄錛?/span>Entities錛夈傝繖浜涙柟娉曟槸涓庡疄浣撳拰鍦烘櫙鐩告満鐨勮窛紱伙紝浠ュ強浣犵殑閰嶇疆鐩稿叧鐨勩?/span>

      瀵歸〉闈㈢殑鍔犺澆鏄氳繃鐢ㄦ埛瀹氫箟鐨?/span>PageLoader鏉ュ畬鎴愮殑銆傝繖鏍鳳紝鐢ㄦ埛鍙互緙栫▼瀹炵幇鍔犺澆欏甸潰錛屾棤璁哄畠鏄潵鑷‖鐩樹笂鐨勬枃浠訛紝紼嬪簭浜х敓鐨勬垨鏄叾浠栧湴鏂廣?/span>

 

     GeometryPageManager

     鍦?/span>PagedGeometry綾諱腑浣跨敤錛岀敤浜庣鐞嗗垎欏甸〉闈紝鍦ㄩ渶瑕佺殑鏃跺欏仛cacheing, deleting絳夊伐浣溿傚畠閫氳繃鍒嗘瀽鎽勫儚鏈鴻窛紱誨幓璁$畻欏甸潰cathe鐨勯熷害錛屽茍delete閭d簺宸茬粡緇忚繃浜嗚瀹氭椂闂寸殑涓嶅彲瑙侀〉闈€?/span>

璋冪敤PagedGeometry::addDetailLevel(), 鍒涘緩 GeometryPageManager 銆?/span>

addDetailLevel() returns a pointer to this page manager, allowing you access to some useful functions, documented below.

綾繪垚鍛樺嚱鏁頒腑鏈変簺娉ㄩ噴浜?/span>DO NOT USE鐨勶紝涓嶈兘琚敤鎴蜂嬌鐢紝瀹冧滑鏄湪PagedGeometry涓浣跨敤鐨勩?/span>

addDetailLevel()

Adds a detail level to the PagedGeometry object.

PageType 瀵硅detail level錛岀敤鎴鋒兂浣跨敤鐨勯〉闈㈢被鍨嬨傚畠涓嶆槸涓涓嚱鏁板弬鏁幫紝鑰屾槸涓涓ā鏉垮弬鏁般?/span>

 maxRange 榪欎釜detail level浣跨敤鐨勬渶澶ц窛紱伙紙鎽勫儚鏈虹殑瑙嗚窛錛?/span>

transitionLength 鏈熸湜鐨勮“鍑忚漿鍙橀暱搴?/span> - 錛堝彲閫夛級

紺轟緥錛?/font>

    pagedTrees->addDetailLevel<BatchPage>(100); //Use batched geometry from 0-100

    pagedTrees->addDetailLevel<ImpostorPage>(500); //Use impostors from 100-500

鍚嶅彨pagedTrees鐨?/span>PagedGeometry 鐨勫璞′細鍦?/span>0錛?/span>100鍗曚綅鎽勫儚鏈鴻窛紱葷殑鑼冨洿鍐呬嬌鐢?/span>batched錛堝垎鎵瑰嚑浣曪紝闈欐佸嚑浣曪級錛?/span>100錛?/span>500鍗曚綅璺濈鑼冨洿鍐呬嬌鐢?/span>imposters

濡傛灉宸叉湁鐨勯〉闈㈢被鍨嬩笉鍚堥傦紝鐢ㄦ埛鍙互寰堣交鏉劇殑娣誨姞鑷畾涔夌殑GeometryPage瀛愮被

transitionLength 鍙傛暟鍦ㄩ粯璁ゆ儏鍐典笅鏄病鏈夌殑錛屼絾鏄敤鎴峰彲浠ヨ嚜宸辨坊鍔狅紝瀹冪殑浣滅敤鏄嬌緇嗚妭灞傛杞彉鏇村鉤婊戙備絾鏄敞鎰忥紝浣跨敤鍙傛暟鍙兘浼氭槸娓叉煋鐨勬晥鐜囦笅闄?/span>10錛咃紞30錛呫?/span>

3,欏甸潰綾誨瀷

Class GeometryPage

濡備笂鎵璇達紝璇ョ被鏄竴涓櫄鍩虹被錛岀敤鎴峰彲浠ユ墿灞曠戶鎵胯綾誨幓瀹炵幇涓嶅悓鐨勬浛浠h娓叉煋瀹炰綋鐨勬柟寮忥紝濡?/span>batched錛?/span>imposters絳夈傚鏋滀綘闇瑕佸叾浠栫殑欏甸潰綾誨瀷錛屼綘鍙互鑷繁瀹炵幇涓浜涖?/span>

浠ヤ笅鏄敤鎴峰繀欏誨湪瀛愮被涓疄鐜扮殑铏氬嚱鏁幫細

virtual void init(SceneManager *mgr, Camera *cam) = 0;

virtual void setRegion(Real left, Real top, Real right, Real bottom) = 0;

virtual void addEntity(Entity *ent, const Vector3 &position, const Quaternion &rotation, const Vector3 &scale, const Ogre::ColourValue &color) = 0;

virtual void build() {}

virtual void removeEntities() = 0;

virtual void setVisible(bool visible) = 0;

virtual void setFade(bool enabled, Real visibleDist, Real invisibleDist) = 0;

virtual void update() {}

浠ヤ笅鏄〉闈㈢鐞嗗櫒錛?/span>page manager錛夊浣曞幓浣跨敤涓婇潰鐨勫嚱鏁幫細

1錛屽綋PagedGeometry棣栧厛create涓涓?/span>GeometryPage錛岄┈涓婅皟鐢ㄥ畠鐨?/span>init錛堬級錛岃鍑芥暟灝卞ソ鍍忔瀯閫犲嚱鏁頒竴鏍楓?/span>

2錛屽噯澶囦竴涓嚑浣曢〉闈㈢粰寰呮覆鏌撳疄浣擄紝璁劇疆欏甸潰鍖哄煙銆?/span>

3錛屾坊鍔犲疄浣撳璞″埌璇ラ〉闈紝騫跺垵濮嬪寲浣嶇疆錛屾柟鍚戠瓑銆?/span>

4錛屾坊鍔犲疄浣撳埌鍦烘櫙涓殑鏈鍚庝竴姝ャ傚湪娣誨姞瀹屾墍鏈夊疄浣撳璞″悗鑷姩璋冪敤銆?/span>

5錛屼粠欏甸潰瀹屽叏鍒犻櫎瀹炰綋瀵硅薄銆?/span>

6錛屼嬌鏁翠釜欏甸潰鍙樹負鍙銆?/span>

7錛岃緗〉闈㈢殑娑堝噺灞炴с?/span>

8錛屽湪甯у驚鐜腑淇濊瘉欏甸潰鍑犱綍鐨勬洿鏂般?/span>

class BatchPage

The BatchPage class鎶婂疄浣撳綋浣滈潤鎬佸嚑浣曚綋鏉ユ覆鏌撱?/span>

 

闈欐佸嚑浣曚綋錛?/span>StaticGeometry錛夛細鍦ㄥ満鏅腑鏈夎澶氬疄浣撴槸浠庡畠浠姞鍏ュ満鏅紑濮嬪氨涓嶄細縐誨姩鐨勶紝濡傛埧灞嬶紝鏍戠瓑錛?/span>Ogre涓鴻繖縐嶆儏鍐墊彁渚涗簡StaticGeometry綾?/span>,瀹冨厑璁鎬綘鎵規覆鏌?/strong>寰堝鐗╀綋.榪欎釜閫氬父瑕佹瘮鎵嬪姩鍦?/span>SceneNodes娣誨姞瑕佸揩澶氫簡銆?/span>

 

class ImposterPage

the ImpostorPage class.鎶婂疄浣撳綋浣?/span>impostors錛堜竴縐嶅竷鍛婄増鍥懼儚錛岀湅璧鋒潵鍍忕湡瀹炵殑瀹炰綋錛夋潵娓叉煋

鎵鏈?/span>page綾誨瀷涓紝榪欎釜鏄渶蹇殑錛屽畠浣跨敤Impostors鍘諱唬鏇胯娓叉煋鐨?/span>entities錛岃繖鏍鳳紝鏄懼崱鍙鍘繪覆鏌撲竴緋誨垪鐨?/span>2d image錛岃屼笉鏄?/span>3d mesh

 

 

class GrassPage

A custom page type designed specifically for use with GrassLoader.

GrassPage欏甸潰綾誨瀷鏄璁捐鏉ラ厤鍚?/span>GrassLoader浣跨敤鐨?/span>

榪欑綾誨瀷鏄病鏈夊仛榪囦紭鍖栫殑錛屽畠鍙槸瀵規墍緇欑殑entity榪涜鍏嬮殕錛岀劧鍚庣粦瀹氬埌涓涓柊鐨勫満鏅妭鐐逛箣涓娿傝繖鎰忓懗鐫鎬ц兘寰堝樊銆?/span>

4錛?/span>BatchedGeometry錛嶄竴縐嶉潤鎬佸嚑浣曠殑鐗堟湰

class BatchedGeometry

瀹冩槸Ogre::StaticGeometry鐨勪竴涓交閲忕駭鐗堟湰銆?/span>

staticGeometry鏄?/span>ogre鎻愪緵緇欑敤鎴風殑鎵規覆鏌撶殑綾伙紝瀹冨彲浠ヤ竴嬈℃ф覆鏌撻偅浜涘湪鍦烘櫙涓繚鎸?#8220;闈欐佺殑”瀹炰綋錛?/span>entities錛夛紝濡傦紝鎴垮眿錛屾爲絳夈?/span>

瀹冪粰鐢ㄦ埛鎻愪緵澶氫竴浜涚殑瀵?/span>batch鏉愯川絳夌殑鎺у埗銆?/span>

class SubBatch: public Ogre::Renderable

subBatch緇ф壙浜?/span>Renderable錛屾槸BatchedGeometry鐨勫唴閮ㄧ被錛屽畠鐨勬瀯閫犲嚱鏁頒腑浼犲叆BatchedGeometry鎸囬拡鍜?/span>submesh鐨勬寚閽堬紝璇ョ被鍖呭惈鍦?/span>BatchedGeometry涓?/span>

5錛?/span>Loading Entities

class PageLoader

铏氬熀綾匯傜敤鎴峰彲浠ユ墿灞曞畠鍘繪彁渚涜礋璐e姞杞介〉闈紙Page錛夌殑鍥炶皟鍑芥暟銆?/span>

PagedGeometry棰勮浜嗗嚑縐嶄笉鍚岀殑Loader錛岀戶鎵夸簬PageLoader錛岃窡寰堝瀹炰綋綆$悊鍣ㄤ笉鍚岀殑鏄紝PagedGeometry涓嶅厑璁哥敤鎴蜂竴嬈℃у悜object娣誨姞鎵鏈夌殑entities錛岀敱浜庡畠鏄敤浜庡ぇ瑙勬ā鐨勬父鎴忓満鏅紝鎵浠ュ畠浼氬涓栫晫鍑犱綍榪涜鍒嗛〉錛岀劧鍚庤皟搴︼紝鍙姞杞介渶瑕佺粯鍒剁殑欏甸潰銆?/span>

鍙寮曟搸闇瑕佺‘瀹氫笘鐣屽嚑浣曠殑閭d竴鍧楀尯鍩熼渶瑕佽鍔犺澆錛屽氨瑕佽皟鐢?/span>PageLoader鐨勬垚鍛?/span>loadPage()銆傚湪鍑芥暟涓殑PageInfo緇撴瀯浣擄紝鎻愪緵浜嗛〉闈㈢殑鍖呭洿浣撲俊鎭傚湪鍑芥暟涓紝鐢ㄦ埛閫氳繃

addEntity錛堬級鏉ユ坊鍔犲疄浣撳埌璇ラ〉闈腑錛岃繕鍙互瀹氫箟瀹炰綋鐨勫昂搴︼紝浣嶇疆錛屾棆杞瓑灞炴с?/span>

褰撶敤鎴峰垱寤轟簡鑷繁鐨?/span>loader瀵硅薄鍚庯紝蹇呴』灝嗗叾attatch鍒?/span>PagedGeometry瀵硅薄涓婂幓銆傚涓嬶細

pagedGeometry->setPageLoader(yourPageLoader);

 

PageInfo: 緇撴瀯浣撱傛彁渚涚粰PageLoader鐨勬湁鐢ㄧ殑欏甸潰淇℃伅銆傚熀鏈殑淇℃伅鏄畾涔夎鍔犺澆鐨勫尯鍩燂紝榪樻湁涓浜涜鍖哄煙鐨勫叾浠栦俊鎭?/span>

緇撴瀯浣撳唴鍖呭惈浜嗕竴涓?/span>TBound錛?/span>typedef Ogre::TRect<Ogre::Real> TBounds錛夛紝鎵鏈夊湪璇ラ〉闈㈠唴鐨勫疄浣撻兘蹇呴』鏀劇疆鍦ㄨ繖涓煩褰㈠寘鍥翠綋涔嬩腑銆?/span>

鍏蜂綋鐨?/span>loaders錛?/span>

錛?/span>1錛?/span>GrassLoader 緇ф壙浜?/span>PageLoader錛岀敤浜庡拰PagedGeometry涓璧蜂駭鐢熺湡瀹炵殑鑽夊湴鍦烘櫙銆傛墍璋撶湡瀹炵殑鑽夊湴妯℃嫙錛屼嬌鐢?/span>GrassLoader鎴愬憳鍑芥暟addLayer錛堬級鏉ユ坊鍔犺崏錛屼嬌鐢?/span>updateAnimation()鏉ラ┍鍔ㄥ姩鐢匯?/span>

     褰撶敤鎴峰垱寤轟簡Grassloader瀵硅薄鍚庯紝蹇呴』灝嗗叾attatch鍒?/span>PagedGeometry瀵硅薄涓婂幓銆傚涓嬶細

pagedGeometry->setPageLoader(GrassLoader);

     鑽夊湴loader鍦ㄤ嬌鐢ㄥ嚑浣曢〉闈㈢被鍨嬬殑鏃跺欙紝琚帹鑽愪負浣跨敤GrassPage錛岃繖鏍風殑娓叉煋鏁堢巼杈冮珮錛岃岄噰鐢ㄥ叾浠栫被鍨嬪垯鏁堢巼寰堜綆銆?/span>

     鍚屾椂鎻愪緵浜嗕竴涓暟鎹粨鏋勬潵瀹屽叏鎺у埗Grass鐨勫睘鎬?/span> class GrassLayer錛屽畠鏄氳繃addLayer錛堬級鏉ユ坊鍔犵殑錛岃綾繪彁渚涗簡涓緋誨垪鐨?#8220;set”鏂規硶錛岀敤浜庣敤鎴烽厤緗崏鍦扮殑鏉愯川錛屽瘑搴︼紝澶у皬絳夊睘鎬т俊鎭?/span>

 

錛?/span>2錛?/span>TreeLoader2D緇ф壙浜?/span>PageLoader錛岀敤浜庡拰PagedGeometry涓璧瘋交鏄撶殑瀹炵幇鍦ㄥ湴褰笂鏀劇疆鏍戞湪鐨勫姛鑳姐?/span>

     浣跨敤鏂規硶鍜屽墠榪頒竴鑷達紝浣跨敤鏃訛紝addTrees錛堬級鏂規硶鍚戝満鏅腑娣誨姞鏍戞湪銆傞渶瑕佹敞鎰忕殑鏄紝loader鍔犺澆鏍戞湪鏃跺茍涓嶇煡閬撹鍦板艦鐨勯珮搴︼紝鑰屾槸鍋囪楂樺害涓?/span>0錛岃繖灝遍渶瑕佽瀹氳幏寰楀綋鍓嶏紙鍗崇粰瀹?/span>x錛?/span>z鍊兼椂錛夌殑鍦板艦楂樺害銆?/span>Loader鎻愪緵浜嗚繖浜涙柟娉曘?/span>

 

錛?/span>3錛?/span>TreeLoader3D鍚?/span>2D鐨勬儏鍐靛樊涓嶅錛屽彧鏄晥鐜囧ぇ姒備綆40錛呭乏鍙熾?/span>TreeLoader3D灝嗘爲鍦ㄥ唴瀛樹腑鎵撳寘鐨勬晥鐜囧緢楂橈紝澶х害10Bytes涓媯墊爲錛岀浉褰撲簬100涓囨5鏍戝彧瑕?/span>9.53m鍐呭瓨絀洪棿銆傝繖灝卞緢閫傜敤浜庡ぇ瑙勬ā媯灄鐨勬覆鏌撱?/span>

     寮曟搸涓?/span>2D錛?/span>3Dloader鎻愪緵浜嗕竴浜涘叕鐢ㄧ殑宸ュ叿綾伙紝濡?/span>class TreeRef錛屼互鍐呰仈鍑芥暟鐨勬ц川涓?/span>loader鎻愪緵浜嗕綅緗紝鏃嬭漿錛屽昂瀵革紝鏂瑰悜絳夌殑“get”鏁板榪愮畻銆傝?/span>TreeIterator2D錛?span>TreeIterator3D鍒欎負loader鎻愪緵浜嗘爲鎸囬拡鐨勬搷浣溿?/span>



]]>
[杞琞OGRE鏍規嵁楂樺害鍥懼垱寤篢errain鍦板艦嫻佺▼鍒嗘瀽http://m.shnenglu.com/winmain/archive/2010/02/24/108370.htmlCode KnightCode KnightWed, 24 Feb 2010 13:30:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/24/108370.htmlhttp://m.shnenglu.com/winmain/comments/108370.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/24/108370.html#Feedback1http://m.shnenglu.com/winmain/comments/commentRss/108370.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108370.htmlOGRE鍙互閫氳繃涓や釜鎺ュ彛鏉ョ敓鎴愬湴褰紝鍒嗗埆鏄痸oid TerrainSceneManager::setWorldGeometry( const String& filename )浠ュ強void TerrainSceneManager::setWorldGeometry(DataStreamPtr& stream, const String& typeName )錛屼袱鑰呯殑鏍規湰鍖哄埆灝辨槸涓涓槸浼犻掑湴褰俊鎭枃浠跺悕涓涓槸浼犻掑湴褰俊鎭暟鎹祦錛岃璁′袱涓帴鍙g殑鐩殑鏄彲浠ヨ鐢ㄦ埛浣跨敤鑷繁鐨勫湴褰俊鎭厤緗枃浠訛紝鑰屼笉蹇呭眬闄愪簬 OGRE瀹氫箟鐨勫湴褰俊鎭厤緗枃浠舵牸寮忋傚湪鍒嗘瀽嫻佺▼涔嬪墠錛屽厛璇存槑涓鐐癸紝涓轟簡鎻愰珮娓叉煋鎬ц兘浠ュ強鍦板艦鏌ユ壘鎬ц兘錛孫GRE鎶婃暣涓湴褰㈠垎鎴愯嫢騫蹭釜鍦板艦欏碉紝姣忎釜鍦板艦欏靛張鍒嗘垚浜嗗涓湴褰㈠皬鍧楋紝鍒版渶鍚庝細鎶婂湴褰㈤〉鍙婂湴褰㈠皬鍧梩ile鎸傛帴鍒板満鏅妭鐐逛笂銆備互涓嬫槸鐢熸垚鍦板艦鐨勪富瑕佹祦紼嬶細

涓錛氭竻闄ゅ湴褰㈠垎綰х儲寮曠紦鍐插強鍦板艦鍒嗛〉錛屾牴鎹湴褰俊鎭暟鎹祦鍔犺澆鍦板艦淇℃伅閰嶇疆鏂囦歡錛?/span>

void TerrainSceneManager::loadConfig(DataStreamPtr& stream)錛屽叾鍏堝皢鍦板艦閰嶇疆淇℃伅浠庢暟鎹祦涓愪竴璇誨嚭鍒癿ap涓紝鐒跺悗閫氳繃void TerrainSceneManager::selectPageSource(const String& typeName,  TerrainPageSourceOptionList& optionList)璁劇疆鍦板艦鏁版嵁婧?鐩墠鍙湁楂樺害鍥炬暟鎹簮)銆傚湪鍦板艦淇℃伅閰嶇疆鏂囦歡涓彲浠ラ厤緗涓湴褰㈡暟鎹簮錛岀劧鍚庢牴鎹竴縐嶆暟鎹簮綾誨瀷鐢熸垚鍦板艦錛屽弬鏁?typeName灝辯敤鏉ユ寚瀹氭暟鎹簮綾誨瀷錛岀洰鍓嶅氨鏄疕eightMap錛屾壘鍒版寚瀹氱殑鏁版嵁婧愬悗錛屽鎸囧畾鐨勬暟鎹簮榪涜鍒濆鍖栵紝

 void HeightmapTerrainPageSource::initialise(TerrainSceneManager* tsm,  ushort tileSize, ushort pageSize, bool asyncLoading, TerrainPageSourceOptionList& optionList)銆傚垵濮嬪寲鐨勮繃紼嬩富瑕佹槸璋冪敤void HeightmapTerrainPageSource::loadHeightmap(void)灝嗛珮搴﹀浘鐏板害鍥懼儚鏁版嵁鍔犺澆鍒板唴瀛樹腑錛屽鏋滄槸Raw鏁版嵁錛屽氨鍔犺澆鍒癿RawData涓紝鍚﹀垯鍔犺澆鍒癿Image涓傛暣涓姞杞借繃紼嬪叾瀹炲畬鎴愪簡涓ゅぇ宸ヤ綔錛岄鍏堝姞杞藉湴褰㈤厤緗俊鎭紝鐒跺悗鍔犺澆楂樺害鍥炬暟鎹?

浜岋細鍒濆鍖栧垎綰х儲寮曠紦鍐詫紝void TerrainSceneManager::initLevelIndexes()錛?

涓夛細void OctreeSceneManager::resize( const AxisAlignedBox &box )

鍥涳細璁劇疆鍦板艦鏉愯川錛寁oid TerrainSceneManager::setupTerrainMaterial(void)錛?

浜旓細璁劇疆鍦板艦鍒嗛〉錛?void TerrainSceneManager::setupTerrainPages(void)

棣栧厛鍒涘緩涓涓悕涓篢errain鐨勫満鏅牴鑺傜偣鐨勫瓙鑺傜偣

mTerrainRoot = getRootSceneNode() -> createChildSceneNode( "Terrain" );

鐒跺悗鍒濆鍖朤errainPage2D mTerrainPages錛?/span>

鏈鍚庤皟鐢?void HeightmapTerrainPageSource::requestPage(ushort x, ushort y)requestPage鍙敮鎸佷竴涓狿age錛岄鍏堝皢鍥懼儚鏁版嵁榪涜緙╂斁

鐒跺悗璋冪敤 “TerrainPageSource::firePageConstructed錛堬級”閫氱煡Listener錛涚劧鍚庤皟鐢?#8220;TerrainPage* TerrainPageSource::buildPage(Real*heightData, const MaterialPtr& pMaterial)”鍒涘緩涓涓柊鐨凾errainPage瀵硅薄銆?/span>

buildPage()鏄竴涓瘮杈冩牳蹇冪殑鍑芥暟銆傚畠棣栧厛鏋勯犱竴涓?TerrainPage瀵硅薄錛岀劧鍚庡垱寤轟竴涓敤浜庡綰寵TerrainPage瀵硅薄鐨勫満鏅妭鐐癸細“page->pageSceneNode = mSceneManager->createSceneNode(name);”錛岀劧鍚庢牴鎹鍦板艦鐨勫垎鍓詫紝寰幆鍒涘緩瀛怱ceneNode錛屽茍涓斿垱寤哄瓙鍦烘櫙鑺傜偣瀵瑰簲鐨勫彲娓叉煋浣揟errainRenderable錛屽皢璇ュ彲娓叉煋浣揳ttach鍒拌繖涓瓙鑺傜偣涓娿傞氳繃 “TerrainRenderable::initialise錛堬級”鏉ュ垱寤洪《鐐規暟鎹佹覆鏌撴柟寮忕瓑銆?

鐒跺悗璋冪敤void TerrainSceneManager::attachPage(ushort pageX, ushort pageZ, TerrainPage* page)鍔犲叆鍒癿TerrainPages涓紱

鐒跺悗鍦╝ttachPage涓皟鐢?#8220;mTerrainRoot->addChild(page->pageSceneNode);”鍔犲叆鍒癝ceneGraph涓?

娉細褰撳墠鍙敮鎸佷竴涓狿age錛岃鍒嗛〉琚寕鎺ュ埌涓涓О璋揟errain鐨勫満鏅妭鐐逛笂錛岃鍦烘櫙鑺傜偣涓嬮潰鍙堝垱寤轟簡寰堝瀛愬満鏅妭鐐癸紝姣忎竴涓瓙鍦烘櫙鑺傜偣瀵瑰簲涓涓猼ile錛屼篃灝辨槸涓涓嫭绔嬬殑鍙覆鏌撲綋TerrainRenderable



]]>
[杞琞 OGRE鍦板艦閰嶇疆鏂囦歡瑙f瀽http://m.shnenglu.com/winmain/archive/2010/02/24/108369.htmlCode KnightCode KnightWed, 24 Feb 2010 13:30:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/24/108369.htmlhttp://m.shnenglu.com/winmain/comments/108369.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/24/108369.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108369.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108369.htmlOGRE閫氳繃閰嶇疆鏂囦歡鐢熸垚鍦板艦錛屾瀬澶ф彁楂樹簡鍦板艦鐢熸垚鐨勭伒媧繪с備笅闈㈠鍦板艦閰嶇疆鏂囦歡(terrain.cfg)鍚勯厤緗」鐨勬剰涔夎繘琛岀畝瑕佸垎鏋愩?/p>

WorldTexture=terrain_texture.jpg  //鍦板艦綰圭悊
DetailTexture=terrain_detail.jpg  //鍦板艦緇嗚妭綰圭悊(鐩告満璺濈鍦伴潰寰堣繎鏃墮噰鐢ㄧ粏鑺傜汗鐞?
DetailTile=3                      //緇嗚妭綰圭悊鍦ㄤ竴涓湴褰㈠皬鍧椾腑鐨勫鉤閾烘暟
PageSource=Heightmap              //楂樺害鍥炬暟鎹簮
Heightmap.image=terrain.png       //楂樺害鍥懼悕縐?鐏板害鍥炬枃浠跺悕),絎﹀悎2^n+1
PageSize=513                      //楂樺害鍥懼ぇ灝?br>TileSize=65                       //鍦板艦灝忓潡澶у皬
MaxPixelError=3                   //鍐沖畾浣跨敤灞傛緇嗚妭鏃跺厖璁歌宸?br>PageWorldX=1500                   //鍦板艦鍦ㄤ笘鐣屼腑鐨勮寖鍥磝鏂瑰悜
PageWorldZ=1500                   //z鏂瑰悜
MaxHeight=100                     //涓栫晫涓湴褰㈡渶澶ф槧灝勯珮搴?br>MaxMipMapLevel=5                  //灞傛緇嗚妭涓婇檺
#VertexNormals=yes                //鍦ㄧ紦鍐蹭腑璁$畻欏剁偣娉曠嚎錛岃綆楁満鍏夌収鎴朑PU紼嬪簭鐢ㄥ埌鏃舵墦寮
#VertexColors=yes銆銆銆銆銆銆銆銆 //鍦ㄧ紦鍐蹭腑璁劇疆欏剁偣棰滆壊錛屽亣濡傛湁GPU紼嬪簭闇瑕佹椂鎵撳紑
#UseTriStrips=yes                 //瀵逛簬鐜板湪鐨勭‖浠訛紝寤鴻鍏蟲帀
VertexProgramMorph=yes銆銆銆      //浣跨敤欏剁偣紼嬪簭榪涜LOD铻嶅悎澶勭悊
LODMorphStart=0.2                 //LOD铻嶅悎寮濮嬬偣錛氶珮錛屼綆LOD涔嬮棿璺濈涔嬫瘮

涓嬪垪鍙傛暟鐢ㄤ簬鎻愪緵鑷繁鐨勭潃鑹茬▼搴忔椂浣跨敤錛岃繖浼氭彁渚涜嚜宸卞畾涔夌殑material錛岄偅涔堝厛鍓嶅畾涔夌殑
WorldTexture 涓?DetailTexture鐨勮緗笉鍐嶇敤鍒般?/p>

MorphLODFactorParamName=morphFactor銆
//鍋囪VertexProgramMorph琚涓簓es,瀹氬埗鐨刴aterial涓寘鎷竴涓珮綰ч《鐐圭▼搴忋傚畠鎸囧畾浜嗕竴涓《鐐?br>//紼嬪簭鐨勫弬鏁板悕錛岃繖涓弬鏁扮敤浜庤瀺鍚圠OD,鍙傛暟鍊間粠0錛?錛?琛ㄧず涓嶈皟鏁達紝1琛ㄧず瀹屽叏璋冩暣鍒頒笅涓綰OD
MorphLODFactorParamIndex         //鐢ㄤ簬materail涓寘鍚綆綰ч《鐐圭▼搴忕殑鎯呭喌錛屾剰涔夊悓涓?br>CustomMaterialName               //鎸囧畾鐨刴aterail鍚嶅瓧

涓婅堪閰嶇疆鏂囦歡瀹氫箟浜嗗熀浜庨珮搴﹀浘鐨勫湴褰€?/p>

榪欎簺鍙傛暟瀹氫箟鍙鎷負涓ょ被錛歄gre浣跨敤絎竴綾諱粠楂樺害鍥句駭鐢熷湴褰?br>mesh涓庢潗璐ㄣ?/p>

絎簩綾繪槸瀹氬埗鏉愯川涓嶨PU欏剁偣紼嬪簭錛岃繖鍙互浠f浛ogre鑷姩浜х敓鐨勭潃鑹茬▼搴忋?br>鍙﹀鐨勮鏄庯細
TerrainScenceManager浼氭妸楂樺害鍥懼垎涓哄涓猵age,姣忎釜page鐢卞嚑涓猼ile緇勬垚.瀹冧滑閮藉畾涔変簡鍦ㄤ駭鐢熺殑mesh涓竴緇勬瀯鎴愭鏂瑰艦鐨勯《鐐歸泦銆?br>WorldTexture瀹氫箟鐨勭汗鐞嗕笉蹇呬笌鐩爣鍦板艦涓鏍峰ぇ銆?br>PageWorldX錛孭ageWorldZ鍙互緙╂斁涓栫晫涓殑鍦板艦銆?br>MaxHeight 鍦╕鏂瑰悜緙╂斁鍦板艦銆?br>DetailTexture 鍙嬌鐢ㄤ竴涓汗鐞嗭紝濡備嬌鐢ㄥ灞傜汗鐞嗭紝搴旇浣跨敤鑷畾涔塵aterail銆?br>
浠庣▼搴忓姞杞藉湴褰?/span>
setWorldGeometry()鏈夐噸杞藉艦寮忥紝涓縐嶇敤浜庡姞杞介厤緗枃浠訛紝鍙︿竴縐嶆垜浠彲鍦ㄧ▼搴忎腑浣跨敤錛屼互
杈懼埌鎵嬪伐鍔犺澆鐨勫姛鑳姐傝繖閲岋紝SceneData琚?typedef 涓簊td:map,瀹冨瓨鍌ㄤ簡濡傛垜浠湪terrain.cfg
涓湅鍒伴偅浜涘煎銆傚亣璁炬垜浠凡緇忎粠鏌愪釜浜岃繘鍒舵枃浠惰鍏ユ垜浠兂瑕佺殑鍐呭鍒癝ceneData涓傛垜浠鍋?br>鐨勫氨鏄妸璇誨叆鐨勫唴瀹硅漿鎹㈡垚setWorldGeometry()闇瑕佺殑綾誨瀷銆?/p>

]]>
[鍘焆銆婃繁搴︽帰绱++瀵硅薄妯″瀷銆嬭涔︾瑪璁?/title><link>http://m.shnenglu.com/winmain/archive/2010/02/23/108308.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Tue, 23 Feb 2010 13:37:00 GMT</pubDate><guid>http://m.shnenglu.com/winmain/archive/2010/02/23/108308.html</guid><wfw:comment>http://m.shnenglu.com/winmain/comments/108308.html</wfw:comment><comments>http://m.shnenglu.com/winmain/archive/2010/02/23/108308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/winmain/comments/commentRss/108308.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/winmain/services/trackbacks/108308.html</trackback:ping><description><![CDATA[1錛屼嬌鐢ㄥ垵濮嬪寲鍒楄〃鍒濆鍖栧弬鏁扮殑欏哄簭涓嶆槸鏍規嵁鍙傛暟鍒楄〃閲屽0鏄庣殑欏哄簭錛岃屾槸鏍規嵁璇ユ垚鍛樺彉閲忓湪綾諱腑澹版槑鐨勯『搴忓喅瀹氱殑銆?br>et.<br>class A<br>{<br>public:<br>   A();<br>   ~A();<br>private:<br>   int a;<br>   byte b;<br>}<br><br>A::A():b(1),a(b)<br>{<br><br>}<br><br>a鐨勫兼棤娉曠‘瀹氾紝鑰宐鏄?<br><br>2錛屽湪data璇箟瀛︿腑<br>鎵懼埌浜嗕竴涓竴騫村洶鎵拌繃鎴戠殑闂錛屾葷畻寰楀埌瑙g瓟<br>class X;<br>class A:class X;<br>class B:class X;<br>class Y:class A, class B;<br><br>sizeof(X):1<br>sizeof(A):8<br>sizeof(B):8<br>sizeof(Y):12<br><br>緙栬瘧鍣ㄥ絀虹被浼氬仛浼樺寲緇欎簣涓涓猚har鐨勫ぇ灝?br>鑷充簬A,B 鐢變簬鏈夌戶鎵垮叧緋誨瓨鍦ㄨ櫄鍑芥暟琛紝size搴斾負5錛屽湪4瀛楄妭瀵瑰叾鐨勭紪璇戝櫒涓媠izeof涓?錛屽綋鐒惰瀹氬瓧鑺傚榻愪負1鐨勮瘽搴旇鏄? <img src ="http://m.shnenglu.com/winmain/aggbug/108308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/winmain/" target="_blank">Code Knight</a> 2010-02-23 21:37 <a href="http://m.shnenglu.com/winmain/archive/2010/02/23/108308.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Introduction To Octreeshttp://m.shnenglu.com/winmain/archive/2010/02/23/108306.htmlCode KnightCode KnightTue, 23 Feb 2010 13:18:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/23/108306.htmlhttp://m.shnenglu.com/winmain/comments/108306.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/23/108306.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108306.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108306.html
Introduction


Hidden surface removal is among the biggest problems when writing a 3D engine.

I struggled with it since the very beginning of writing 3D engines and still have no satisfactory solution to it. The ideal visibility detection scheme would allow unlimited data, extremely dynamic worlds and would have zero overdraw. The first 3d engine which implements these three demands still has to be written.

The Z buffer for example allows dynamical worlds and even crossing faces, but it suffers from immense overdraw. The BSP-tree on the other hand, if well implemented, has no overdraw at all but needs that much pre-processing that dynamical worlds are a definite nono.

It wasn't until recently i first heard of the octree, and I must admit i was struck by it's simplicity. I never actually implemented this structure and therefore I will present no pseudo code at all. This explanation is merely an attempt to make it more clear to people who have never heard of it. Besides, if you really understand the structure, then implementation is a piece of cake.


The Octree Structure


Our virtual world or level is actually nothing more then a soup of polygons. Some of you people might have thrown in a couple of curves and voxels but most of it will be polygons. Here it is:



Fig 1. Our little level.


In the picture I just built a simple level containing no more than 250 polys. Now imagine a cube surrounding the world like in the next image:



Fig. 2. Our little level surrounded by a cube.


Now it isn't hard to see that this cube can be divided into eight smaller cubes, hence the name octree. Take a look at this picture:



Fig 3. Our little level with the surrounding cube subdivided.


Call the larger cube the parent and the smaller cubes the children. On their turn subdivide each children into eight smaller cubes, and you will notice we are creating a tree where each node has eight children.

There is still one little problem left. When should we stop dividing cubes into smaller ones? There are two possible solutions. The first one is to stop when a cube has some size smaller then a fixed number. The second one is more common. You might have noticed that every child has less polygons then it's parent. The trick is to stop subdividing when the number of polygons in a cube is smaller then some fixed number.


Creating The Octree


Trees are recursion, recursion is trees. It is as simple as that. If you have a correct definition of you cubeNode it is very easy to create an octree recursively. First of all you check all polygons against the boundarys of the cube. This is very simple cause these boundaries are all axis aligned. This means that the cube has six plane equations, which are:

  • 1. X = Q.X
  • 2. Y = Q.Y
  • 3. Z = Q.Z

  • 4. X = Q.X + cubeSize
  • 5. Y = Q.Y + cubeSize
  • 6. Z = Q.Z + cubeSize

    Where Q is the position of one corner of the cube. This are very easy equations and the all parent polygons can very easily be checked against them.

    It could occur that a polygon crosses a cube boundary. Again two possible solution are at hand. First of all we could clip the polygon against the cube, which is simple, because of the axis aligned boundarys. On the other hand we could put the polygon in all cubes it is in. This means that some cubes can contain the same polygons. In order to prevent us from drawing one poly more than one time we should have a flag on each polygon which will be set if the poly is drawn for the first time.

    The implementation of an octree is very straight forward. I haven't done it myself yet, but I will soon. It is all matter of recursion. In order to construct a tree, the first thing you should think of is recursion. Whether we are talking about binary trees, quad trees or octrees, it doesnt matter, just build the darn thing recursively. So have a class definition of one cubeNode and put the creation of the tree in it's constructor. In this constructor you will call the constructor itself for smaller cubes.


  • The Purpose Of The Octree


    An octree is actually nothing more then a data structure. It can be used for very different things. It is not only handy for visibility detection but also for collision detection, realtime shadows and many more things. The most important thing to understand about octrees is that if a parent is not important then it's children aren't either. Let's makes this a little bit more clear with an example.

    We will do this in 2d, which therefore resembles a quadtree, but with some imagination it can very easily be extended to 3d. Here we test the cubes (squares) against the viewing frustrum. Take a look at the next picture:



    Fig 4. An octree from the top and a viewing frustrum.


    In this picture a colored square that has one color was dumped without checking it錕絪 children. As you can see some squares had to be checked all the way to the final node, but some large squares could be dumped at once. The colored squares are the ones that are outside the viewing frustrum and the greyscale ones are the one inside the viewing frustrum. As you can see this is actually a worst case scenario because the viewing frustrum crosses the middle of the surrounding square and therefore all the four children have to be checked.

    You could also apply the octree to many other things. Collision detection for example. Just check in which cube your bounding sphere or box is and you will only have to check against those faces. There are many more examples.


    Conclusion


    There is already a lot written about octrees. I tried to give my view on them in the hope somebody might read this. As you can see octrees are way easier to implement than BSP-trees (although some disagree) while offering a better structure. The main point about an octrees is that when a parent is discarded so are it's children. Actually that is all there is to it.

    Code clean, play Goldeneye and go vegetarian.

    Jaap Suter a.k.a .........

    璇戞枃錛?br>1銆佸紩璦錛?span class=English>Introduction錛?br>銆銆闅愰潰縐婚櫎鏄啓3D寮曟搸鏃跺欐渶澶х殑闂涔嬩竴銆?br>銆銆Hidden surface removal is among the biggest problems when writing a 3D engine.

    銆銆鍦ㄦ垜鍐?D寮曟搸鐨勫紑濮嬮樁孌靛氨寮濮嬪拰瀹冩枟浜夊茍涓斾竴鐩存病鏈夋弧鎰忕殑瑙e喅鏂規硶銆傜悊鎯崇殑鍙媯嫻嬫柟妗堝簲褰撳仛鍒板厑璁革紙浣跨敤錛夋棤闄愮殑鏁版嵁銆佸ぇ鍔ㄦ佺殑涓栫晫鍜岄浂閲嶇敾銆傜涓嫻佺殑3D寮曟搸涓鐩村湪榪芥眰瀹炵幇榪?涓姹傘?br>銆銆I struggled with it since the very beginning of writing 3D engines and still have no satisfactory solution to it. The ideal visibility detection scheme would allow unlimited data, extremely dynamic worlds and would have zero overdraw. The first 3d engine which implements these three demands still has to be written.

    銆銆Z buffer鍏佽鍔ㄦ佷笘鐣屼互鍙婂嵆浣挎槸浜ゅ弶鐨勯潰錛屼絾鏄緱蹇嶅彈澶ч噺鐨勯噸鐢匯傚彟涓鏂歸潰錛孊SP鏍戝鏋滆兘澶熻寰堝ソ鐨勫疄鐜幫紝鍙互閬垮厤閲嶇敾錛屼絾鏄畠闇瑕佸ぇ閲忕殑棰勫鐞嗚綆楄屼笖涓嶉傚悎鍔ㄦ佷笘鐣屻?br>銆銆The Z buffer for example allows dynamical worlds and even crossing faces, but it suffers from immense overdraw. The BSP-tree on the other hand, if well implemented, has no overdraw at all but needs that much pre-processing that dynamical worlds are a definite nono.

    銆銆鐩村埌鏈榪戞垜絎竴嬈″惉璇翠簡鍏弶鏍戯紙Octree錛夛紝鎴戝繀欏繪壙璁ゆ垜琚畠鐨勭畝鏄撴?#8220;鐙犵嫚鍦版墦浜嗕竴涓嬪効”銆傛垜浠庢潵娌℃湁鐪熸鍦板幓瀹炵幇榪欎釜緇撴瀯錛屽洜姝ゆ垜涓嶄細鍘誨疄鐜頒竴浜涗唬鐮併傝繖涓В閲婂彧鏄兂璁╀粠娌℃湁鍚榪囧叓鍙夋爲鐨勪漢鎰熷埌鏇存竻鏅版槗鎳傘傚鏋滀綘鐪熺殑浜嗚В浜嗚繖涓粨鏋勶紙Octree錛夛紝瀹炵幇瀹冨彧鏄竴涓皬鎰忔濄?br>銆銆It wasn't until recently i first heard of the octree, and I must admit i was struck by it's simplicity. I never actually implemented this structure and therefore I will present no pseudo code at all. This explanation is merely an attempt to make it more clear to people who have never heard of it. Besides, if you really understand the structure, then implementation is a piece of cake.

    2銆佸叓鍙夋爲鐨勭粨鏋?/strong>錛?span class=English>The Octree Structure錛?br>銆銆鎴戜滑鐨勫疄闄?#8216;涓栫晫’鎴栬呰鏄叧鍗″彧涓嶈繃鏄竴浜涘杈瑰艦銆備綘浠垨璁稿湪鍏朵腑鍔犲叆浜嗕竴浜涙洸闈紙Curves錛夊拰Voxels錛堝湴褰㈠疄鐜版柟娉曠殑涓縐嶏級錛屼絾鏄ぇ澶氭暟涔熼兘鏄杈瑰艦銆?br>銆銆Our virtual world or level is actually nothing more then a soup of polygons. Some of you people might have thrown in a couple of curves and voxels but most of it will be polygons. Here it is:

    鍥?

    銆銆鍥?錛氭垜浠璁$殑灝忓瀷鍏沖崱銆?br>銆銆Fig 1. Our little level.

    銆銆鍦ㄨ繖寮犲浘鐗囦腑鎴戝緩绔嬩簡涓涓笉瓚呰繃250涓杈瑰艦鐨?#8216;鍏沖崱’銆傜幇鍦ㄦ兂璞℃湁涓涓寘鍥翠簡榪欎釜涓栫晫鐨勭珛鏂逛綋錛屽儚涓嬩竴寮犲浘鐗囬偅鏍楓?br>銆銆In the picture I just built a simple level containing no more than 250 polys. Now imagine a cube surrounding the world like in the next image:

    鍥?

    銆銆鍥?錛氭垜浠璁$殑鍏沖崱琚竴涓珛鏂逛綋鎵鍖呭洿鐫銆?br>銆銆Fig. 2. Our little level surrounded by a cube.

    銆銆鐜板湪涓嶉毦鐪嬪嚭榪欎釜绔嬫柟浣撳彲浠ヨ鍏瓑鍒嗕負鍏釜灝忎簺鐨勭珛鏂逛綋錛屾墍浠ユ墠鍙叓鍙夋爲銆傜湅鐪嬭繖寮犲浘錛?br>銆銆Now it isn't hard to see that this cube can be divided into eight smaller cubes, hence the name octree. Take a look at this picture:

    鍥?

    銆銆鍥?錛氬鍥寸粫鐫鍏沖崱鐨勭珛鏂逛綋榪涜緇嗗垎銆?br>銆銆Fig 3. Our little level with the surrounding cube subdivided.

    銆銆澶х偣鍎跨殑榪欎釜绔嬫柟浣撹鍙仛‘鐖朵翰’灝忎簺鐨勭珛鏂逛綋鍙仛‘瀛╁瓙’銆傚鐞嗘瘡涓?#8216;瀛╁瓙’鐨勬椂鍊欙紝鍐嶄負鏇村皬鐨勫叓涓珛鏂逛綋錛屼綘浼氬彂鐜版垜浠湪鍒涘緩涓涓瘡涓妭鐐規湁鍏釜瀛愯妭鐐癸紙瀛╁瓙錛夌殑鏍戙?br>銆銆Call the larger cube the parent and the smaller cubes the children. On their turn subdivide each children into eight smaller cubes, and you will notice we are creating a tree where each node has eight children.

    銆銆榪樻湁涓涓皬闂銆備粈涔堟椂鍊欐垜浠緇撴潫緇嗗垎鐨勮繃紼嬪憿錛熸湁涓や釜鍙鐨勮В鍐蟲柟娉曘傜涓涓槸褰撲竴涓珛鏂逛綋鐨勫昂瀵稿凡緇忔瘮涓涓瀹氱殑鍥哄畾鍊煎皬鐨勬椂鍊欍傜浜屼釜鏇存櫘閫氥備綘鍙互娉ㄦ剰鍒版瘡涓?#8216;瀛╁瓙’閮芥瘮浠栫殑‘鐖朵翰’鏈夋洿灝戠殑澶氳竟褰€傝繖灝辨槸璇達細褰撲竴涓珛鏂逛綋鍖呭惈鐨勫杈瑰艦鏁伴噺姣斾竴涓瀹氱殑鍥哄畾鍊煎皯鐨勬椂鍊欏仠姝㈢粏鍒嗐?br>銆銆There is still one little problem left. When should we stop dividing cubes into smaller ones? There are two possible solutions. The first one is to stop when a cube has some size smaller then a fixed number. The second one is more common. You might have noticed that every child has less polygons then it's parent. The trick is to stop subdividing when the number of polygons in a cube is smaller then some fixed number.

    3銆佸垱寤哄叓鍙夋爲錛?span class=English>Creating The Octree錛?br>銆銆鏍戞槸閫掑綊鐨勶紝閫掑綊鐨勬槸鏍戙傚氨閭d箞綆鍗曘傚鏋滀綘姝g‘鐨勫畾涔変簡浣犵殑绔嬫柟浣撹妭鐐癸紝閭d箞閫掑綊鍦板垱寤轟竴涓叓鍙夋爲鏄緢瀹規槗鐨勩傞鍏堬紝媯鏌ユ墍鏈夌殑澶氳竟褰紙澶氳竟褰笂浣嶇疆鏈澶栭潰鐨勭偣浣滀負錛夌珛鏂逛綋鐨勮竟鐣屻傝繖寰堢畝鍗曞洜涓烘墍鏈夎竟鐣岄兘鏄拰鍧愭爣杞村鍏剁殑銆傝繖鎰忓懗鐫绔嬫柟浣撴湁鍏釜騫抽潰鏂圭▼錛屽垎鍒槸錛?br>銆銆Trees are recursion, recursion is trees. It is as simple as that. If you have a correct definition of you cubeNode it is very easy to create an octree recursively. First of all you check all polygons against the boundarys of the cube. This is very simple cause these boundaries are all axis aligned. This means that the cube has six plane equations, which are:
    • 1. X = Q.X
    • 2. Y = Q.Y
    • 3. Z = Q.Z

    • 4. X = Q.X + cubeSize
    • 5. Y = Q.Y + cubeSize
    • 6. Z = Q.Z + cubeSize
    銆銆鍦ㄨ繖閲孮鏄珛鏂逛綋涓涓《瑙掔殑浣嶇疆銆傝繖鏄釜寰堢畝鍗曠殑鏂圭▼錛岃屼笖鎵鏈夌殑鐖朵翰澶氳竟褰㈠彲浠ュ鏄撳湴鐢ㄨ繖浜涙柟紼嬫潵媯嫻嬨?br>銆銆WhereQ is the position of one corner of the cube. This are very easy equations and the all parent polygons can very easily be checked against them.

    銆銆涓涓杈瑰艦絀胯繃浜嗕竴涓珛鏂逛綋杈圭晫榪欐牱鐨勪簨鎯呮槸浼氬彂鐢熺殑銆傚啀涓嬈★紝鏈変袱涓В鍐蟲柟妗堝彲鐢ㄣ傞鍏堟垜浠彲浠ユ部鐫绔嬫柟浣撳壀鍒囪繖涓杈瑰艦錛岃繖涔熸槸寰堢畝鍗曠殑錛屽洜涓猴紙绔嬫柟浣撶殑錛夎竟鐣屾槸涓庡潗鏍囪醬瀵歸綈鐨勩傝繕鏈夛紝鎴戜滑鍙互鎶婁竴涓杈瑰艦鏀懼湪鎵鏈夊畠鎵鍦ㄧ殑绔嬫柟浣撻噷闈€傝繖灝辨剰鍛崇潃涓浜涚珛鏂逛綋鍙兘鍖呭惈鐫鍚屼竴涓杈瑰艦銆備負浜嗛槻姝㈤噸鐢諱竴涓杈瑰艦錛屾垜浠簲褰撳湪姣忎竴涓杈瑰艦涓婂仛涓涓爣璁幫紝褰撳杈瑰艦絎竴嬈¤鐢葷殑鏃跺欙紝璁劇疆榪欎釜鏍囪錛堝綋鐒剁敾涔嬪墠涔熻媯鏌ヨ繖涓爣璁板暒錛屼笉榪囪偗瀹氬獎鍝嶆晥鐜囥?br>銆銆It could occur that a polygon crosses a cube boundary. Again two possible solution are at hand. First of all we could clip the polygon against the cube, which is simple, because of the axis aligned boundarys. On the other hand we could put the polygon in all cubes it is in. This means that some cubes can contain the same polygons. In order to prevent us from drawing one poly more than one time we should have a flag on each polygon which will be set if the poly is drawn for the first time.

    銆銆瀹炵幇涓涓叓鍙夋爲鏄緢綆鍗曟槑浜嗙殑浜嬫儏錛屾垜榪樻病鏈夎嚜宸卞仛榪囷紝浣嗘槸鎴戜笉涔呬細鍋氱殑銆傚彧涓嶈繃鏄掑綊鑰屽凡銆備負浜嗘瀯閫犱竴涓爲錛岀涓浠朵綘璇ユ兂鐨勪簨鎯呭氨鏄掑綊銆備笉綆℃垜浠璁虹殑鏄簩鍙夈佸洓鍙夎繕鏄叓鍙夋爲錛岄兘娌℃湁鍖哄埆錛岄兘鏄掑綊鐨勬柟娉曘傛墍浠ュ畾涔変竴涓珛鏂逛綋鑺傜偣鐨勭被錛屽湪鏋勯犲嚱鏁伴噷闈㈠啓涓婂垱寤烘爲鐨勪唬鐮併傚湪榪欎釜鏋勯犲嚱鏁伴噷闈紝浣犱細璋冪敤鍒版洿灝忕珛鏂逛綋鐨勬瀯閫犲嚱鏁般?br>銆銆The implementation of an octree is very straight forward. I haven't done it myself yet, but I will soon. It is all matter of recursion. In order to construct a tree, the first thing you should think of is recursion. Whether we are talking about binary trees, quad trees or octrees, it doesnt matter, just build the darn thing recursively. So have a class definition of one cubeNode and put the creation of the tree in it's constructor. In this constructor you will call the constructor itself for smaller cubes.

    4銆佸叓鍙夋爲鐨勭敤閫?/strong>錛?span class=English>The Purpose Of The Octree錛?br>銆銆涓涓叓鍙夋爲瀹為檯涓婂氨鏄竴涓暟鎹粨鏋勩傚畠鍙互鐢ㄥ仛涓嶅悓鐨勪簨鎯呫備笉浠呬粎瀵逛簬‘鍙媯嫻?#8217;鏉ヨ寰堟柟渚匡紝榪樻湁瀹炴椂闃村獎浠ュ強鍏跺畠鏂歸潰銆傜悊瑙e叓鍙夋爲榪囩▼涓渶閲嶈鐨勪簨鎯呮槸錛氬鏋滀竴涓?#8216;鐖朵翰’鑺傜偣鏄?#8216;娌$敤’鐨勶紝閭d箞浠栫殑‘瀛╁瓙’鑺傜偣涔熷悓鏍楓傝鎴戜滑涓句釜渚嬪瓙璁╁畠鏇存竻妤氥?br>銆銆An octree is actually nothing more then a data structure. It can be used for very different things. It is not only handy for visibility detection but also for collision detection, realtime shadows and many more things. The most important thing to understand about octrees is that if a parent is not important then it's children aren't either. Let's makes this a little bit more clear with an example.

    銆銆鎴戜滑鐢?D鏉ヨ〃紺哄畠錛岃繖鏍峰氨寰堝儚涓涓洓鍙夋爲錛屼絾鏄兂璞′竴涓嬪畠涔熷彲浠ュ緢瀹規槗鐨勬墿灞曞埌3D涓娿傚湪榪欓噷鎴戜滑娌跨潃瑙嗛敟錛?span class=English>viewing frustrum錛夋嫻嬬珛鏂逛綋錛堟鏂瑰艦錛夈?br>銆銆We will do this in 2d, which therefore resembles a quadtree, but with some imagination it can very easily be extended to 3d. Here we test the cubes (squares) against the viewing frustrum. Take a look at the next picture:

    鍥?

    銆銆鍥?錛氶《閮ㄨ閿ュ唴鐨勫叓鍙夋爲銆?br>銆銆Fig 4. An octree from the top and a viewing frustrum.

    銆銆鍦ㄨ繖涓浘鐗囦腑錛屽僵鑹茬殑姝f柟褰㈡槸娌℃湁錛堟病蹇呰錛夋嫻嬪畠鐨?#8216;瀛╁瓙’鐨勩傚氨鍍忎綘鐪嬪埌鐨勯偅鏍蜂竴浜涙鏂瑰艦錛堢伆鑹茬殑涓浜涳級琚嫻嬬洿鍒版渶緇堣妭鐐癸紝浣嗘槸涓浜涘ぇ鐨勬鏂瑰艦鍙娑備簡涓縐嶉鑹層傞偅浜涘僵鑹茬殑姝f柟褰㈠氨鏄秴鍑轟簡瑙嗛敟鑼冨洿鐨勶紝鐏拌壊鐨勬槸鍦ㄨ閿ヨ寖鍥村唴鐨勩傚氨鍍忎綘鐪嬪埌鐨勯偅鏍鳳紝榪欑‘瀹炴槸鏈緋熺硶鐨勪竴縐嶆儏鍐碉紝鍥犱負瑙嗛敟絀胯繃浜嗗寘鍥存鏂瑰艦鐨勪腑澶紝鎵浠ユ墍鏈夌殑鍥涗釜‘瀛╁瓙’閮藉緱琚嫻嬨?br>銆銆In this picture a colored square that has one color was dumped without checking it鎶?children. As you can see some squares had to be checked all the way to the final node, but some large squares could be dumped at once. The colored squares are the ones that are outside the viewing frustrum and the greyscale ones are the one inside the viewing frustrum. As you can see this is actually a worst case scenario because the viewing frustrum crosses the middle of the surrounding square and therefore all the four children have to be checked.

    銆銆浣犲彲浠ュ簲鐢ㄥ叓鍙夋爲鍒板緢澶氬埆鐨勫湴鏂廣備緥濡傜鎾炴嫻嬨傚彧媯鏌ヤ綘鐨勭鎾炵悆鎴栬呯鎾炵洅瀛愭墍鍦ㄧ殑绔嬫柟浣擄紝鑰屼笖鍙渶瑕佹嫻嬮偅浜涢潰銆傝繕鏈夋洿澶氱殑渚嬪瓙銆?br>銆銆You could also apply the octree to many other things. Collision detection for example. Just check in which cube your bounding sphere or box is and you will only have to check against those faces. There are many more examples.

    5銆佺粨璁?/strong>錛?span class=English>Conclusion錛?br>銆銆鍏充簬鍏弶鏍戝凡緇忓啓浜嗗緢澶氫簡銆傛垜璁炬硶琛ㄨ堪鑷繁瀵瑰畠鐨勭湅娉曪紝騫朵笖甯屾湜鏈変漢浼氳鍒板畠銆傚氨鍍忎綘鐪嬪埌鐨勯偅鏍鳳紝褰撴彁渚涘ソ鐨勭粨鏋勭殑鏃跺欙紝鍏弶鏍戞瘮BSP鏍戞洿瀹規槗瀹炵幇錛堟湁浜烘寔寮傝錛夈備富瑕佺殑涓鐐規槸錛氬綋涓涓?#8216;鐖朵翰’鑺傜偣琚涪寮冪殑鏃跺欙紝浠栫殑‘瀛╁瓙’鑺傜偣涔熷悓鏍瘋涓㈠純銆傚疄闄呬笂榪欏氨鏄叏閮ㄣ?br>銆銆There is already a lot written about octrees. I tried to give my view on them in the hope somebody might read this. As you can see octrees are way easier to implement than BSP-trees (although some disagree) while offering a better structure. The main point about an octrees is that when a parent is discarded so are it's children. Actually that is all there is to it.
    銆銆Code clean, play Goldeneye and go vegetarian. Jaap Suter a.k.a .........



    ]]>
    [鍘焆鍥懼艦瀛﹀涔犵瑪璁?(鍏夌収鐫鑹叉ā鍨?http://m.shnenglu.com/winmain/archive/2010/02/23/108303.htmlCode KnightCode KnightTue, 23 Feb 2010 13:13:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/23/108303.htmlhttp://m.shnenglu.com/winmain/comments/108303.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/23/108303.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108303.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108303.html涓錛屽洓縐嶅厜鐓х潃鑹叉ā鍨?/span>

    1錛屽浐瀹氱潃鑹?span>(constant shading)

        鍥哄畾鐫鑹叉牴鏈笉鑰冭檻鍏夌収妯″瀷錛屽彧鏄牴鎹杈瑰艦棰滆壊鐨勭儲寮曟垨RGB鍊肩粯鍒跺畠銆?/span>

    PS:鍩烘湰宸茬粡琚父鎴忔窐姹幫紝澶畝鍗曠殑鐫鑹叉ā鍨?/span>

    2錛屾亽瀹氱潃鑹詫紙flat shding錛?/span>

        瀵逛簬姣忎釜澶氳竟褰㈠彧闇瑕佹牴鎹竴涓《鐐規墽琛屽厜鐓ц綆楋紝鐒跺悗鏍規嵁璁$畻緇撴灉瀵規暣涓杈瑰艦榪涜鐫鑹詫紝榪欏氨鏄亽瀹氱潃鑹詫紝涔熺О涓洪潰鐗囩潃鑹?span>(faceted shading)錛屽浜庣敱騫抽潰緇勬垚鐨勫杈瑰艦榪欑鏂規硶鏄彲琛岀殑錛堢珛鏂逛綋錛夛紝浣嗗浜庣敱鏇查潰緇勬垚鐨勫杈瑰艦榪欑鐫鑹叉柟寮忎細鍑虹幇闈炰綘鎯寵鐨勭粨鏋?span>.

    3錛?span>Gougraud鐫鑹?/span>

    銆銆瀵逛簬欏剁偣涔嬮棿鐨勫儚绱犲奸噰鐢ㄤ袱涓《鐐逛箣闂寸殑鎻掑艱綆楁潵紜畾錛岄《鐐逛箣闂寸殑棰滆壊榪囨浮鑷劧錛屾覆鏌撴晥鏋滀篃姣旇緝騫蟲粦,娌℃湁鎭掑畾鐫鑹查偅鏍風獊鍏銆?/span>

    4錛?span>Phong鐫鑹?/span>

    銆銆涓?span>Gougraud鐫鑹茬被浼鹼紝涓嶈繃浼樼偣鍦ㄤ簬榪樺姣忎釜鍍忕礌榪涜浜嗘硶綰跨殑鎻掑鹼紝瀵逛簬闀滈潰鍙嶅皠鏁堟灉姣旇緝濂姐?/span>



    ]]>
    OCTREE 鏁欑▼http://m.shnenglu.com/winmain/archive/2010/02/23/108300.htmlCode KnightCode KnightTue, 23 Feb 2010 13:08:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/23/108300.htmlhttp://m.shnenglu.com/winmain/comments/108300.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/23/108300.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108300.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108300.html
    瀵筄CTREE鐨勬弿榪?/strong>

    銆銆OCTREE 鏄3D絀洪棿榪涜鍒掑垎錛屼篃鍙互鍙┖闂村垎鍓層備粬鍏佽浣犲彧瀵逛綘鐨?D涓栫晫涓憚璞℃満鐓у皠鐨勫尯鍩熻繘琛屼綔鐢匯備粬涔熻兘鐢ㄤ簬鍐茬獊媯嫻嬨備笅闈㈣涓涓嬩負浠涔堣榪涜絀洪棿鍒嗗壊銆傚亣璁句綘寤虹珛浜嗕竴涓父鎴忎笘鐣岋紝榪欎釜涓栫晫鏈夎秴榪?00錛?00涓杈瑰艦瑕佺敾銆傚鏋滀綘寤虹珛涓涓驚鐜茍浼犻掕繖浜涘杈瑰艦錛岄偅閫熷害鏄緢鎱㈢殑銆傚嵆浣夸綘鏈変竴鍧楀緢濂界殑鏄劇ず鍗★紝浠栦篃浼氭湁寰堝ぇ鐨勯夯鐑︺備絾鏄帺浣犳父鎴忕殑鐜╁鐨勬樉紺哄崱涓嶄細瓚呰繃300$銆傛湁娌℃湁涓縐嶆柟娉曞彧娓叉煋鎽勮薄鏈虹湅瑙佺殑澶氳竟褰紵閭e氨鏄編涓界殑OCTREE銆備粬鍏佽浣犲揩閫熺殑鎵懼埌浣犺娓叉煋鐨勫杈瑰艦銆?br>

    OCTREE鏄庢牱宸ヤ綔鐨?/strong>

    銆銆OCTREE宸ヤ綔鍦ㄧ珛鏂逛綋涓傛渶鍒濓紝OCTREE浠庢牴鎺ョ偣寮濮嬶紝榪欎釜鏍規帴鐐瑰榻愪簬绔嬫柟浣撲腑鏁翠釜涓栫晫錛屾按騫蟲垨鍦烘櫙鐨刟xis涓績綰褲傚洜姝わ紝鎶婃垜浠殑鏁翠釜涓栫晫鎯寵薄鎴愪竴涓笉鍙鐨勭珛鏂逛綋銆?br>銆


    銆銆鐜板湪鏍規帴鐐瑰瓨鍌ㄤ簡涓栫晫涓殑鍏ㄩ儴欏剁偣銆傝繖鏄紝浠栬繕鏄笉鑳界粰鎴戜滑浠諱綍濂藉錛屽洜涓轟粬榪樹細鐢繪墍鏈夌殑涓滆タ銆傛垜浠兂鎶婅繖涓帴鐐瑰垎鎴?涓儴鍒嗐備竴嬈★紝鎴戜滑鍒掑垎鏃訛紝鏈?涓珛鏂逛綋鍖呭惈閭f渶鍒濈殑鏍規帴鐐圭殑绔嬫柟浣撱傞偅鎰忓懗鐫鏈?涓珛鏂逛綋鍦ㄤ笂闈紝4涓珛鏂逛綋鍦ㄤ笅闈€傝鐪嬩笅鍥撅細


    銆銆璁頒綇鍥句腑榛勮壊杞粨綰挎病鏈夈?br>銆銆鎴戜滑鍒氬垰鎶婅繖涓笘鐣屽垎鎴?涓儴鍒嗐傛兂璞′竴涓嬪鏋滄垜浠湁2錛?錛?涓儴鍒嗭紝鎴戜滑鐨勪笘鐣屽皢鏄庢牱錛熸垜浠殑鎽勮薄鏈哄湪涓栫晫鐨勪腑闂達紝鍚戠潃鍚庨潰闈犲彸鐨勮钀姐傚鏋滀綘鐪嬭繖浜涚嚎錛屼綘灝嗘敞鎰忓埌鍦∣CTREE涓?涓粨鐐逛腑鐨勭4涓傝繖浜涚粨鐐瑰寘鍚?涓悗闈㈢殑欏跺拰搴曠粨鐐廣傝繖鎰忓懗鐫鎴戜滑鍙敤鐢誨瓨鍌ㄥ湪榪欎簺緇撶偣涓殑欏剁偣銆?/font>


    銆銆鎴戜滑濡備綍媯嫻嬪嚭鎴戜滑瑕佺敾鐨勭粨鐐癸紵濡傛灉浣犲榪囩牬鐗囨嫞閫夛紙frustum culling),榪欏皢鏄緢綆鍗曠殑銆備綘鑳藉緱鍒拌繖浜涚牬鐗囩殑澶у皬騫舵嫻嬫瘡涓粨鐐癸紝鐪嬩粬鏄惁琚埅鏂垨鍦ㄤ綘鐨勮瑙夌牬鐗囦腑銆傛湁涓涓叧浜庣牬鐗囨嫞閫夌殑鏁欑▼鍦?a >http://www.gametutorials.com. 濡傛灉涓涓珛鏂逛綋鎴柇鐮寸墖錛屾垜浠氨灝嗙敾榪欎簺緇撶偣銆傚湪榪欎釜渚嬪瓙涓紝鎴戜滑鍒囩殑鏁伴噺鏄垜浠渶瑕佺敾鐨?0%銆傝浣忥紝榪欏彧鏄垜浠笘鐣屼腑鐨勪竴涓儴鍒嗐傞儴鍒嗚秺澶氾紝鎴戜滑灝卞皢瓚婄簿紜傚綋鐒訛紝鎴戜滑涓嶄細闇瑕佸お澶氱殑鐐廣備笅闈紝鎴戜滑鏉ョ湅涓涓嬩笅闈㈢殑鍥撅細


    銆銆鍦ㄤ笂闈㈣繖騫呭浘涓紝浣犲皢鍙戠幇璁稿鐨勪笉鍚屻傝繖涓緥瀛愪腑錛屼笉鏄湪鍘熷鐨?涓珛鏂逛綋鐨勬瘡涓涓粨鐐逛腑寤虹珛8涓柊鐨勭珛鏂逛綋銆傚師濮嬬殑8涓粨鐐圭殑欏跺拰搴曢潰娌℃湁緇嗗垎銆備綘鎬繪槸鎶婁竴涓粨鐐瑰垎鎴?涓垨鏇村鐨勭粨鐐癸紝浣嗘槸錛屽鏋滃湪榪欎釜闈㈡病鏈変笁瑙掑艦鍙互瀛樺偍錛屾垜浠皢蹇借榪欎釜緇撶偣騫朵笉緇欎粬鍒嗛厤鍐呭瓨銆傚鏋滄垜浠繘涓姝ョ殑緇嗗垎錛屾洿澶氱殑緇撶偣灝嗗艦鎴愬師濮嬬殑涓栫晫銆傚鏋滄垜浠彉鎹㈠埌鍙︿竴涓儴鍒嗭紝閭g珛鏂逛綋灝嗙浉浼肩殑鍙樻崲銆備負浜嗚鏄庤繖涓鐐癸紝璇風湅鍥撅細


    銆銆鍦ㄥ浘涓紝鏈変袱涓悆錛屼絾鏄柟鍚戠浉鍙嶃傛敞鎰忓乏杈圭殑閮ㄥ垎錛屼粬灝嗛偅涓栫晫鍒嗘垚2涓粨鐐癸紝涓嶆槸8涓傝繖鏄洜涓虹悆鍙2涓粨鐐廣傝鐪嬪彸杈圭殑鐞冩槸涓嶆槸鍜屽乏杈圭殑寰堢浉浼箋傝繖騫呭浘鍛婅瘔鎴戜滑錛氬彧鏄劇ず闇瑕佺殑閮ㄥ垎緇撶偣銆傚鏋滄病鏈変笁瑙掑艦鍗犵敤絀洪棿錛岀粨鐐瑰皢涓嶄細寤虹珛銆?br>

    浣曟椂鍋滄緇嗗垎

    銆銆鐜板湪錛屾垜浠槑鐧戒簡濡備綍緇嗗垎錛屼絾鏄垜浠篃闇瑕佺煡閬撴庢牱鍋滄緇嗗垎銆傛湁璁稿鐨勬柟娉曪細
    銆銆1銆傚鏋滃綋鏃剁殑涓夎褰㈡暟閲忓皯浜庢垜浠畾涔夌殑鏈澶х殑涓夎褰㈡暟閲忥紝鎴戜滑鍙互鍋滄緇嗗垎褰撳墠鐨勭粨鐐廣備婦涓緥瀛愶紝鎴戜滑瀹氫箟涓夎褰㈢殑鏈澶ф暟閲忎負100銆傝繖鎰忓懗鐫鎴戜滑鍦ㄧ粏鍒嗙粨鐐逛箣鍓嶏紝瑕佹嫻嬩竴涓嬪綋鍓嶄笁瑙掑艦鐨勬繪暟閲忔槸鍚﹀皬浜庢垨絳変簬鎴戜滑瀹氫箟鐨勬渶澶ф暟閲忥紝鐒跺悗鍐嶅仛鍐沖畾銆傚鏋滄暟閲忓皯浜庢垨絳変簬錛屾垜浠皢鍋滄緇嗗垎騫舵寚瀹氳繖浜涗笁瑙掑艦鍒伴偅涓粨鐐廣傝娉ㄦ剰鎴戜滑浠庝笉鎸囧畾浠諱綍涓夎褰㈠埌浠諱綍緇撶偣錛岄櫎闈炰粬鏄湯緇撶偣銆傚鏋滄垜浠垝鍒嗕竴涓粨鐐癸紝鎴戜滑涓嶈兘瀛樺偍涓夎褰㈠埌閭d釜緇撶偣錛屼絾鏄彲浠ュ瓨鍌ㄥ湪浠栫殑瀛愮粨鐐規垨浠栦滑鐨勫瓙緇撶偣涓紝鐢氳嚦鍒頒粬浠殑瀛愪腑錛岀瓑絳夈傚綋鎴戜滑澶嶄範浜嗘庢牱鐢?C鏍戝悗錛屽皢浼氭湁鏇村鐨勪簡瑙c?br>
    銆銆2銆傚彟涓涓柟娉曟槸鍦ㄥ仠姝㈢粏鍒嗘椂錛岀湅鎴戜滑鏄惁緇嗗垎鐨勬暟鐩槸鍚﹁秴榪囦簡緇嗗垎鐨勬爣鍑嗐備緥濡傦紝鎴戜滑鍙互鍏堝緩绔嬬粏鍒嗙殑鏍囧噯涓?0錛屽鏋滅粏鍒嗙殑鏁伴噺澶т簬榪欎釜鏍囧噯錛屾垜浠皢鍋滄騫舵寚瀹氳繖浜涘湪绔嬫柟浣撲腑榪欎釜闈㈢殑欏剁偣鍒伴偅涓粨鐐廣傚綋鎴戜滑璇?#8220;澶т簬榪欎釜鏍囧噯”灝辨剰鍛崇潃緇嗗垎鐨勬暟閲忔湁11涓?br>
    銆銆3銆傛渶鍚庣殑鏂規硶鏄湅緇撶偣鏁版槸鍚﹁秴榪囩粨鐐瑰彉閲忓畾涔夋椂鐨勫箋備緥濡傦紝鎴戜滑璁劇疆緇撶偣鍙橀噺鐨勫間負500銆傛瘡嬈★紝鎴戜滑寤虹珛涓涓粨鐐癸紝鐩稿簲鐨勭粨鐐規暟澧炲姞1銆傜劧鍚庡湪鎴戜滑姣忔寤虹珛鍙︿竴涓粨鐐規椂錛屾嫻嬩竴涓嬫垜浠綋鍓嶇殑緇撶偣鏁版槸鍚﹁秴榪囩粨鐐瑰彉閲忋傚鏋滅粨鐐規暟涓?01錛屾垜浠皢涓嶄細緇嗗垎榪欎釜緇撶偣錛屼絾鏄寚瀹氫粬鐨勫綋鍓嶉《鐐圭粰浠栥傛垜鑷繁鐢?1鍜?鐨勬柟娉曪紝浣嗘槸1鍜?涔熷緢濂斤紝鍥犱負浣犲彲浠ユ祴璇曚笉鍚岀殑緇嗗垎鐨勬爣鍑嗐?br>

    鎬庢牱鐢籓CTREE

    銆銆OCTREE寤虹珛鍚庯紝鎴戜滑灝卞彲浠ョ敾鎴戜滑闇瑕佺殑緇撶偣銆傞偅浜涚珛鏂逛綋涓嶆槸鍏ㄩ儴鍖呭惈鍦ㄦ垜浠殑瑙嗚涓殑錛屽彧鏈変竴閮ㄥ垎銆傝繖灝辨槸鎴戜滑涓轟粈涔堣璁$畻姣忎釜緇撶偣鐨勪笁瑙掑艦鐨勬暟閲忥紝濡傛灉鎴戜滑鍙渶瑕佷竴涓粨鐐逛腑鐨勪竴閮ㄥ垎錛岃繖鏍鋒垜浠氨涓嶉渶瑕佺敾鎴愬崈涓婁竾涓笁瑙掑艦銆傛垜浠粠鏍圭洰褰曞紑濮嬬敾OCTREE銆傚浜庢瘡涓粨鐐歸兘瀛樺偍鐫涓涓腑蹇冪偣銆傝繖鏄潪甯稿ソ鐨勶紝姣斿鍦ㄤ笅闈㈣繖涓嚱鏁頒腑錛?br>
    銆銆//榪欎釜鍑芥暟鍙栬蛋绔嬫柟浣擄紙X錛孻錛孼錛夌殑涓績鐐瑰拰浠栫殑澶у皬錛坵idth/2)
    銆銆bool CubeInFrustum(float x,float y,float z,float size);

    銆銆榪欎釜鍑芥暟榪斿洖true or false,鏄敱绔嬫柟浣撴槸鍚﹀湪鐮寸墖涓喅瀹氱殑銆傚鏋滅珛鏂逛綋鍦ㄧ牬鐗囦腑錛屾垜浠皢媯嫻嬫墍鏈変粬鐨勭粨鐐癸紝鐪嬩粬浠槸鍚﹀湪鐮寸墖涓紝鍚﹀垯鎴戜滑灝嗗拷綰︽爲涓殑鏁翠釜鍒嗘灊銆傚綋鎴戜滑寰楀埌浜嗙牬鐗囦腑鐨勭粨鐐癸紝浣嗘槸娌℃湁浠諱綍緇撶偣鍦ㄤ粬涓嬮潰銆傛垜浠兂鐢葷殑欏剁偣瀛樺偍鍦ㄦ湯緇撶偣涓傝浣忥紝鍙湁鏈粨鐐規湁欏剁偣瀛樺偍銆傜湅涓嬮潰鐨勫浘錛?/font>


    銆銆鏈夐槾褰辯殑绔嬫柟浣撴槸鍦ㄧ牬鐗囦腑銆傜櫧鑹茬殑绔嬫柟浣撲笉鏄湪鐮寸墖涓傝繖閲屾樉紺轟簡緇嗗垎鐨?灞傘?br>

    OCTREE 涓殑鍐茬獊

    銆銆OCTREE 涓嶆槸鐢ㄤ簬娓叉煋錛屼絾鏄敤浜庡啿紿佹嫻嬪緢濂姐傞殢鐫娓告垙鐨勫彂灞曪紝鍐茬獊媯嫻嬩篃鍦ㄦ敼鍙橈紝浣犲皢涓嶅緱涓嶅湪娓告垙涓栫晫涓繍鐢ㄨ嚜宸辯殑綆楀紡媯嫻嬩綘鐨勮鑹叉垨鐩爣鏄惁鍐茬獊銆備笅闈㈡槸涓浜涘啿紿佹嫻嬬殑渚嬪瓙錛?br>銆銆1銆備綘灝嗗緩绔嬩竴涓嚱鏁板厑璁鎬綘杞?D絀洪棿涓殑鐐瑰埌浣犵殑OCTREE騫惰繑鍥炲湪榪欎釜鐐瑰懆鍥寸殑欏剁偣銆備綘灝嗚漿閫掔殑閭d釜鐐規槸浣犵殑瑙掕壊鍜岀洰鏍囩殑涓績鐐廣傝繖铏界劧鍙互宸ヤ綔涓绔椂闂達紝浣嗗鏋滆繖涓偣闈犺繎涓涓珛鏂逛綋鐨勮竟鏃跺憿錛熶綘鐨勮鑹叉垨鐩爣鍙兘鍜屽彟涓涓珛鏂逛綋鐨勯《鐐圭浉鍐茬獊銆備負浜嗚В鍐寵繖涓棶棰橈紝浣犲皢鍋氫竴浜涗簨鎯呫備綘鍙互杞掕鑹?鐩爣鐨勫崐寰勬垨涓瀹氱殑絀洪棿錛岀劧鍚庢嫻嬪崐寰勬垨涓瀹氱殑絀洪棿鏄惁鍜屽懆鍥寸殑緇撶偣鐩稿啿紿併傝繖鐢變綘鐨勮鑹?鐩爣鐨勫艦鐘跺喅瀹氥備笅闈㈡槸涓浜涘吀鍨嬬殑鍑芥暟錛?br>
    銆銆//榪欎釜鍑芥暟鍙栬蛋瑙掕壊/鐩爣錛圶錛孻錛孼錛夌殑涓績鐐瑰茍榪斿洖闈犺繎浠栫殑欏剁偣
    銆銆CVector3 *GetVerticesFromPoint(float x,float y,float z);

    銆銆//榪欎釜鍑芥暟鍙栬蛋瑙掕壊/鐩爣錛圶錛孻錛孼錛夌殑涓績鐐瑰拰鍗婂緞錛岀劧鍚庤繑鍥炲拰浠栧啿紿佺殑緇撶偣涓殑欏剁偣
    銆銆CVector3 *GetVerticesFromPointAndRadius(float x,float y,float z,float radius);

    銆銆//榪欎釜鍑芥暟鍙栬蛋瑙掕壊/鐩爣錛圶錛孻錛孼錛夌殑涓績鐐瑰拰绔嬫柟浣撶殑澶у皬錛岀劧鍚庤繑鍥炲拰浠栧啿紿佺殑緇撶偣涓殑欏剁偣
    銆銆CVector3 *GetVerticesFromPointAndCube(float x,float y,float z,float size);

    銆銆鎴戠浉淇′綘鏈夋洿濂界殑鏂規硶蹇熺殑媯嫻嬶紝鍦ㄨ繖閲屽彧鏄粰浣犱竴鐐瑰熀紜銆?br>

    鎬葷粨

    銆銆榪欑瘒鏁欑▼鍙槸緇欎綘璁叉埅濡備綍寤虹珛鑷繁鐨凮CTREE銆傚叧浜庤繖綃囨枃绔犱腑鐨勪唬鐮佸湪www.gametutorials.com錛屾垜甯屾湜榪欑瘒鏂囩珷瀵逛綘鏈夌敤銆?br>

    涓枃璇戣咃細antking
    http://akinggame.gameres.com
    榪欑瘒鏂囩珷鐨勮嫳鏂囩増鍦?a >http://www.gametutorials.com/Tutorials/OpenGL/Octree.htm

    Ben Humphrey (DigiBen)
    Game Programmer
    DigiBen@GameTutorials.com
    Co-Web Host of www.GameTutorials.com



    ]]>
    total commader鎻掍歡緙栧啓http://m.shnenglu.com/winmain/archive/2010/02/19/108069.htmlCode KnightCode KnightFri, 19 Feb 2010 06:53:00 GMThttp://m.shnenglu.com/winmain/archive/2010/02/19/108069.htmlhttp://m.shnenglu.com/winmain/comments/108069.htmlhttp://m.shnenglu.com/winmain/archive/2010/02/19/108069.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/108069.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/108069.html      鏂扮殑涓騫達紝瑕佸紑濮嬪伐浣滀簡錛屼粖澶╃湅鐪嬭嚜宸辯殑鐢佃剳錛屾劅瑙夊ソ涔憋紝鎯蟲妸鎵鏈夌殑璧勬枡鍏ㄦ墧榪汿otal commander閲岋紝涔熸兂鍐欎竴浜涙彃浠舵潵鍋氫竴浜涢澶栫殑宸ヤ綔錛屾瘮濡傛妸鐢靛獎闊充箰鎵撲笂tag鎴栧啓涓婅瘎璁哄緟浠ュ悗鏂逛究鏌ョ湅絳夛紝鍏堝瓨涓綃囨枃绔狅紝浠ュ悗鏈夌┖鐨勬椂鍊欏姩鎵嬪仛榪欎簺浜嬫儏鐨勬椂鍊欎篃璁告湁鐢ㄣ?br>
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////鍗庝附鍒嗗壊綰?br>      搴攏evermind鐗堜富涔嬬害錛屽啓浜?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡
    寮鍙戠殑涓涓狦uild錛岀畝鍗曚粙緇嶄簡濡備綍涓篢C寮鍙戜竴涓?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡
    浠ュ強鎻掍歡鐨勫熀鏈伐浣滆繃紼嬶紝浠呬粎鏄竴涓叆闂ㄤ粙緇嶏紝璇︾粏鐨勭紪紼嬬粏鑺傞渶瑕佷粠緗戜笂涓嬭澆甯姪錛屼笅闈㈡枃绔犱腑閮界粰鍑轟簡涓嬭澆鍦板潃銆?br>
    棣栧厛澹版槑錛屾湰鏂囨挵鍐欒儗鏅槸TC 6.03a錛?.5浼氬姞鍏ユ柊鐨?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鍐呭錛屼絾浼拌鍚戜笅鍏煎搴旇鏄病鏈夐棶棰樼殑銆?br>浼楁墍鍛ㄧ煡錛孴C鐨?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐜板湪鍒嗕負3綾伙紝Lister鎻掍歡錛?wlx錛夈丗ileSystem鎻掍歡錛?wfx錛夊拰Packer鎻掍歡錛?wcx錛夛紙鍙﹀榪樻湁浼犺涓?.5鏂板姞鐨凜ontent鎻掍歡錛?wdx錛夛紝鐜板湪榪樹笉瑙佸簮灞辯湡闈㈢洰錛屽厛鎸変笅涓嶈〃錛夈傚敖綆℃墿灞曞悕絀夸笂浜嗕笉鍚岀殑椹敳錛屼絾鍏舵湰璐ㄩ兘鏄竴鏍風殑錛岄兘鏄疻indows鐨凞LL鍔ㄦ侀摼鎺ュ簱錛屾垜浠渶瑕佸仛鐨勪粎浠呮槸鎸夌収TC鐨勮鑼冿紝瀹炵幇鍏剁粰瀹氱殑DLL鎺ュ彛鍑芥暟錛屾渶鍚庢妸 dll鎵╁睍鍚嶆敼鎴愮浉搴旀墿灞曞悕灝變竾浜嬪ぇ鍚変簡錛堜嬌鐢ㄤ笉鍚岀殑鎵╁睍鍚嶏紝鍙笉榪囦嬌鍏跺鏄撳尯鍒嗚屽凡錛夈?br>
    1. 寮鍙戞柟娉曘佺幆澧冨拰宸ュ叿
    濡傚墠鎵榪幫紝TC鎻掍歡鏈川涓婇兘鏄疻indows鐨凞LL鍔ㄦ侀摼鎺ュ簱錛屽叾寮鍙戞柟娉曞拰鏅氱殑DLL紼嬪簭寮鍙戝茍娌℃湁浠涔堜笉鍚岋紝浠諱綍涓涓彲鐢ㄦ潵寮鍙慏LL鐨勭幆澧冨拰宸ュ叿閮藉彲浠ョ敤鏉ュ紑鍙慣C鎻掍歡銆?br>鍥犳錛屽啓TC鎻掍歡棣栧厛寰楃啛鎮塂LL鐨?strong style="BACKGROUND-COLOR: rgb(255,153,153); COLOR: black">緙栧啓錛屾洿楂樹竴鐐圭殑瑕佹眰鏄啛鎮変竴浜涘父鐢ㄧ殑Windows API錛屽浜庝竴涓▼搴忓憳鑰佹墜鏉ヨ搴旇鏄緢瀹規槗鐨勪簨鎯咃紝鑰岀敤浠涔堝紑鍙戠幆澧冨拰宸ュ叿閮芥槸嬈¤鐨勩備絾鏄浜庢柊鎵嬶紝絎旇呮帹鑽愪嬌鐢╒C鎴栬匘elphi鏉?strong style="BACKGROUND-COLOR: rgb(255,153,153); COLOR: black">緙栧啓錛屼竴鏂歸潰鐨勫師鍥犳槸TC浣滆呮彁渚涚殑鍑芥暟澶存枃浠跺0鏄庡彧鏈塁/C++鍜孭ascal錛屽彲浠ョ渷鍗存敼鍐欐垚鍒殑璇█鐨勯夯鐑︼紱鍙︿竴鏂歸潰鍘熷洜鏄疶C浣滆呯粰鐨勫府鍔┿佷緥瀛愶紝鐢氳嚦緗戜笂鍏紑婧愮爜鐨?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡澶ч兘鏄熀浜庢涓ょ鐜鐨勶紝鑰屾湁涓涓彲鍙傝冪殑婧愮爜渚嬪瓙鑳藉湪寰堝ぇ紼嬪害涓婃彁渚?strong style="BACKGROUND-COLOR: rgb(255,153,153); COLOR: black">緙栧啓甯姪銆傚彟澶栫敱浜嶵C浣滆呮彁渚涚殑渚嬪瓙錛圴C鐜涓嬶級宸茬粡鎼緩璧蜂簡 鎻掍歡鐨勬暣涓鏋訛紝鎴戜滑鐢氳嚦鍙互鐩存帴鍦ㄦ渚嬪瓙涓婁慨鏀瑰紑鍙戙?br>
    Lister鎻掍歡鐨勫畼鏂規簮鐮佷緥瀛愶細http://ghisler.fileburst.com/lsplugins/listplugsample.zip銆?br>FS鎻掍歡鐨勫畼鏂規簮鐮佷緥瀛愶細http://ghisler.fileburst.com/fsplugins/sampleplugin.zip銆?br>鍏跺畠絎?鏂?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐨勬簮鐮佷緥瀛愬彲浠ヤ粠浠ヤ笅鍚勪釜鎻掍歡绔欑偣鎵懼埌錛?br>http://www.ghisler.com/plugins.htm
    http://www.totalcmd.net
    http://clubtotal.free.fr

    2. Lister 鎻掍歡
    棣栧厛璇存槑涓涓婰ister鎻掍歡鐨勫伐浣滆繃紼嬶細榛樿蹇嵎閿儏鍐典笅錛屽綋鍦═C涓涓涓枃浠舵寜涓婩3鎴栬匔trl+Q鐨勬椂鍊欙紝TC浼氭鏌incmd.ini涓璠ListerPlugins]涓鑺傦紝浠ヤ笅鏄釜渚嬪瓙錛?br>[ListerPlugins]
    0=%COMMANDER_PATH%\plugins\Imagine\Imagine.wlx
    0_detect="MULTIMEDIA"
    1=%COMMANDER_PATH%\plugins\FlashView\FlashView.wlx
    1_detect="([0]="F" & [1]="W" & [2]="S")|([0]="C" & [1]="W" & [2]="S")"

    TC浼氶『搴忔鏌ヨ鑺備腑姣忎釜鎻掍歡瀵瑰簲鐨剎_detect瀛楁錛岃瀛楁瀹為檯涓婃槸涓涓昏緫鍒ゆ柇琛ㄨ揪寮忥紝濡傛灉姝よ〃杈懼紡緇撴灉涓虹湡錛孴C灝變細Load璇?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡騫惰皟鐢ㄥ叾ListLoad鍑芥暟錛屽惁鍒欐鏌ヤ笅涓涓?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡銆傚鏋?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡瀵瑰簲鐨剎_detect瀛楁鏍規湰灝變笉瀛樺湪錛孴C浼氳皟 鐢?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐨凩istGetDetectString鍑芥暟錛屽鏋滄鍑芥暟瀛樺湪錛孴C浼氬皢鍑芥暟鐨勮繑鍥炵粨鏋滀繚瀛樺湪x_detect瀛楁涓啀媯鏌ワ紝濡傛灉姝ゅ嚱鏁頒粛鐒朵笉瀛樺湪錛屽垯TC灝辯洿鎺ヨ皟鐢?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐨凩istLoad鍑芥暟銆傛渶鍚庯紝濡傛灉璋冪敤浜哃istLoad鍑芥暟錛岃繕瑕佸垽鏂 鍑芥暟鐨勮繑鍥炲鹼紝濡傛灉璇ュ兼槸涓涓猈indows鍙ユ焺錛屽垯鎻掍歡璋冪敤鎴愬姛錛涜嫢榪斿洖鍊間負0錛圢ULL錛夛紝鍒欒皟鐢ㄥけ璐ワ紝緇х畫媯鏌ヤ笅涓涓?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡銆?br>
    Lister鎻掍歡鐨勮緇嗘帴鍙e嚱鏁頒粙緇嶅彲浠ヤ粠緗戜笂涓嬪埌錛歨ttp://ghisler.fileburst.com/lsplugins/listplughelp1.2.zip銆?br>
    瀹為檯涓婏紝Lister鎻掍歡蹇呴渶鐨勫嚱鏁板彧鏈塋istLoad涓涓紝瀹冩槸鎻掍歡鐨勬牳蹇冨疄鐜板嚱鏁般?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡蹇呴』鍦ㄦ鍑芥暟涓鍏ユ枃浠跺唴瀹癸紝鍒涘緩涓涓獥鍙e茍鏄劇ず鏂囦歡鍐呭錛屾渶鍚庤繑鍥炶繖涓獥鍙g殑鍙ユ焺錛孡ister浼氳幏寰楀茍Subclass璇ュ彞鏌勶紝騫跺湪Lister鍐呮樉紺恒?br>
    鍏朵綑鐨勬帴鍙e嚱鏁伴兘鏄彲閫夊嚱鏁幫紝浣嗗叾涓湁涓や釜姣旇緝閲嶈鐨勫嚱鏁幫細ListGetDetectString鍜孡istCloseWindow錛岃繖涓や釜鍑芥暟涓嶭istLoad涓璧鋒瀯鎴愪簡鎻掍歡鐨勪富騫查儴鍒嗐?br>
    ListGetDetectString铏界劧鏄彲閫夊嚱鏁幫紝浣嗘槸鎴戝己鐑堝緩璁疄鐜拌繖涓嚱鏁幫紝榪欏Lister鐨勬晥鐜囨湁寰堝ぇ鐨勫獎鍝嶃備粠Lister宸ヤ綔榪囩▼鍙互鐪嬪嚭錛岃繖涓嚱鏁頒粎浠呮槸鍦?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡絎竴嬈¤璋冪敤鏃舵墠琚皟鐢紝鍔熻兘鏄繑鍥炰竴涓嫻嬪瓧絎︿覆浠ュ~鍐檟_detec t瀛楁錛屽湪姝や箣鍚庯紝Lister閮藉皢鍙鏌ユ瀛楁浠ュ喅瀹氭槸鍚﹁皟鐢?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡銆傚洜姝わ紝涓涓ソ鐨勬嫻嬪瓧絎︿覆鍙互璁㎜ister榪呴熷垽鏂?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鏄惁閫傜敤浜庢樉紺烘枃浠訛紝濡傛灉娌℃湁榪欎釜錛孡ister姣忔鏄劇ず鏂囦歡閮藉皢涓嶅緱涓嶆妸鎻掍歡涓涓釜閮絃oad榪涙潵銆佸垎閰嶇┖闂淬佽皟鐢↙istL oad錛岀洿鍒版壘鍒頒竴涓悎閫傜殑錛岃繖涓熷害鍙槸鍋忕浜哃ister蹇熸煡鐪嬬殑鏈剰銆備緥濡傦細媯嫻嬪瓧絎︿覆鏄?#8220;ext="HTM" | ext="HTML"”錛岃繖鏃禩C鍙渶瑕佹牴鎹枃浠舵墿灞曞悕鏄惁鏄痟tm鎴杊tml灝卞彲浠ョ洿鎺ュ垽鏂鎻掍歡鏄惁閫傚悎錛岃屾棤闇璇誨叆浠諱綍鏂囦歡錛岃繖灝辨槸涓轟粈涔堝湪鎻掍歡浼楀鐨勬椂鍊欙紝Lister浠嶇劧鑳藉緢蹇樉紺虹殑鍘熷洜銆傚綋鐒訛紝鍦ㄦ煇浜涙儏鍐典笅錛岀‘瀹為毦浠ョ粰鍑轟竴涓悎閫傜殑媯嫻嬪瓧絎︿覆錛岃繖灝辮姹侺istL oad鍑芥暟鍦ㄦ枃浠剁被鍨嬪垽鏂笂鐨勯熷害搴旇灝藉彲鑳藉揩銆?br>
    ListColseWindow鏄湪鐢ㄦ埛鍏抽棴Lister鎴栧湪Lister涓樉紺哄彟涓涓枃浠舵椂琚皟鐢紝濡傛灉姝ゅ嚱鏁頒笉瀛樺湪錛孡ister灝嗙洿鎺ヨ皟鐢―estroyWindow()鍏抽棴鎻掍歡紿楀彛銆傞氬父鎯呭喌涓嬶紝鎴戜滑闇瑕佸湪榪欓噷鍋氱獥鍙e叧闂椂鐨勫杽鍚庡伐浣滐紝鍖呮嫭閲婃斁 璧勬簮絳夌瓑銆?br>
    闄や互涓?涓嚱鏁板錛屽叾瀹冪殑鍑犱釜鍙夊嚱鏁伴兘娑夊強涓浜涘叿浣撶殑闄勫姞鍔熻兘錛屽彇鍐充簬鍏蜂綋闇姹傘?br>
    2. FileSystem鎻掍歡
    涓嶭ister鎻掍歡涓嶅悓錛屽綋鐢ㄦ埛瀹夎涓涓狥S鎻掍歡鏃訛紝璇?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡灝變細琚涓嬈oad榪涙潵錛屽茍璋冪敤FsGetDefRootName浠ヨ幏寰?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鍚嶇О錛屼篃鏄FS鏍圭洰褰曠殑鍚嶅瓧錛屽鏋滆繖涓嚱鏁頒笉瀛樺湪錛孴C浼氱洿鎺ヤ嬌鐢╳fx鏂囦歡鐨勫悕瀛楀仛鎻掍歡鍚嶇О錛堝幓鎺夋枃浠舵墿灞曞悕錛?錛岃鍚嶇О浼氫繚瀛樺湪wincmd.ini鏂囦歡[FileSystemPlugins]涓鑺傦紝涓嬮潰鏄釜渚嬪瓙錛?br>[FileSystemPlugins]
    Linux-drives=%COMMANDER_PATH%\plugins\ex2fs\ex2fs.wfx
    Calendar=%COMMANDER_PATH%\plugins\calendar\calendar.wfx
    Shared files=%COMMANDER_PATH%\plugins\netmon\NetMon.wfx
    榪欐牱錛屽綋鐢ㄦ埛榪涘叆緗戜笂閭誨眳鏃訛紝TC涓嶉渶瑕丩oad鎻掍歡灝卞彲浠ユ妸鎵鏈?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鍒楀嚭鏉ワ紝鎻掍歡鍙湁鍦ㄧ敤鎴瘋瘯鍥捐繘鍏S鎻掍歡鐩綍鏃舵墠鐪熸琚獿oad榪涙潵銆?br>
    澶ц嚧緇撴瀯涓婏紝FS鎻掍歡闇瑕佹彁渚涚殑鎺ュ彛鍑芥暟涓庝竴涓湡姝f枃浠剁郴緇熺殑鍩烘湰鍑芥暟鏈変簺綾諱技銆傚叾蹇呴渶鐨勫嚱鏁版湁4涓細FsInit銆丗sFindFirst銆丗sFindNext鍜?FsFindClose錛屾槸涓嶆槸鐪嬩簡寰堢溂鐔燂紝灝卞拰騫蟲椂鍒椾婦涓涓洰褰曚笅鎵鏈夋枃浠舵墍鐢ㄧ殑鍑芥暟 緇撴瀯涓鏍楓傞【鍚嶆濅箟錛孎sInit鏄敤浜?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鍒濆鍖栫殑鍑芥暟錛屽悓鏃禩C浼氫紶緇?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡3涓猅C鎻愪緵緇橣S鎻掍歡璋冪敤鐨刢allback鍑芥暟鍦板潃錛堜笅闈細浠嬬粛錛夛紱FsFindFirst鍜孎sFindNext鐢ㄤ簬鍒椾婦涓涓洰褰曚笅鎵鏈夌殑鏂囦歡錛汧sFindClose鐢?浜庣粓姝sFindFirst/FsFindNext鐨勬枃浠跺垪涓俱傛湁浜嗚繖4涓嚱鏁幫紝灝辨瀯鎴愪簡鏈灝忕殑FS鎻掍歡錛屽氨鍙互嫻忚FS鎻掍歡鐨勫悇涓洰褰曚簡銆?br>
    鏈変簡鏂囦歡鐩綍緇撴瀯鍚庯紝灝卞埌浜嗘牴鎹渶瑕佹彁渚涘悇縐嶆枃浠跺姛鑳界殑鏃跺欎簡錛屽寘鎷垹闄ゆ枃浠禙sDeleteFile錛涘垹闄ょ洰褰旻sRemoveDir錛涘緩绔嬬洰褰?FsMkDir錛涙墽琛屾枃浠禙sExecuteFile錛涜緗枃浠跺睘鎬sSetAttr錛涜緗枃浠舵椂闂碏s SetTime錛涙嫹璐濇枃浠禙sGetFile/FsPutFile/FsRenMovFile銆傚ぇ鑷翠笂閮藉拰鏅氭枃浠舵搷浣滃姛鑳藉樊涓嶅錛岄渶瑕佽鏄庣殑鏄嫹璐濇枃浠訛紝鐢變簬FS鎻掍歡鐨勭壒孌婃э紝鎷瘋礉鏂囦歡鍒嗘垚浜?縐嶆儏鍐碉細FsGetFile鏄粠FS涓線鏈湴紜洏鎷瘋礉錛汧sPutFile鏄粠鏈湴紜洏寰FS鎷瘋礉錛汧sRenMovFile鏄?鍦‵S鍐呴儴鎷瘋礉銆佺Щ鍔ㄦ垨閲嶅懡鍚嶆枃浠躲?br>
    姝ゅ錛屾牴鎹瓼S鎻掍歡鐨勯渶瑕侊紝TC榪樻彁渚涗簡3涓猚allback鍑芥暟浠ヤ緵鍏惰皟鐢細
    1) ProgressProc錛岀敤浜庢樉紺轟竴涓繘搴︽潯錛屼緥濡傛嫹璐濇枃浠舵椂鐨勮繘搴︽潯銆?
    2) LogProc錛岀敤浜庢樉紺篎TP宸ュ叿鏍忥紝鎻掍歡鍙互鍦ㄥ伐鍏鋒爮涓樉紺簂og淇℃伅錛屽茍鍐欏叆log鏂囦歡銆傚鏋滄樉紺轟簡FTP宸ュ叿鏍忥紝鐐瑰嚮“鏂紑榪炴帴”鎸夐挳鏃惰繕灝嗚皟鐢?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐨凢sDisconnect鍑芥暟銆?br>3) RequestProc錛岀敤浜庢樉紺轟竴涓緭鍏ュ璇濇錛屼緥濡傝姹傜敤鎴瘋緭鍏ョ敤鎴峰悕鍜屽瘑鐮佺瓑絳夈?br>
    鏈鍚庯紝FS鎻掍歡榪樺彲浠ュ疄鐜頒竴涓嚱鏁癋sStatusInfo錛屽鏋滆繖涓嚱鏁拌瀹炵幇錛孴C鍦ㄨ皟鐢?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐨勪換浣曞嚱鏁幫紙闄や簡FsInit鍜孎sDisconnect錛変箣鍓嶅拰涔嬪悗閮藉皢璋冪敤姝ゅ嚱鏁幫紝浠ユ柟渚?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡閲婃斁璧勬簮絳夌瓑鎿嶄綔銆?br>
    FS鎻掍歡鐨勮緇嗘帴鍙e嚱鏁頒粙緇嶅彲浠ヤ粠緗戜笂涓嬭澆錛歨ttp://ghisler.fileburst.com/fsplugins/fspluginhelp1.3.zip銆?br>
    2. FileSystem鎻掍歡
    涓嶭ister鎻掍歡涓嶅悓錛屽綋鐢ㄦ埛瀹夎涓涓狥S鎻掍歡鏃訛紝璇?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡灝變細琚涓嬈oad榪涙潵錛屽茍璋冪敤FsGetDefRootName浠ヨ幏寰?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鍚嶇О錛屼篃鏄FS鏍圭洰褰曠殑鍚嶅瓧錛屽鏋滆繖涓嚱鏁頒笉瀛樺湪錛孴C浼氱洿鎺ヤ嬌鐢╳fx鏂囦歡鐨勫悕瀛楀仛鎻掍歡鍚嶇О錛堝幓鎺夋枃浠舵墿灞曞悕錛?錛岃鍚嶇О浼氫繚瀛樺湪wincmd.ini鏂囦歡[FileSystemPlugins]涓鑺傦紝涓嬮潰鏄釜渚嬪瓙錛?br>[FileSystemPlugins]
    Linux-drives=%COMMANDER_PATH%\plugins\ex2fs\ex2fs.wfx
    Calendar=%COMMANDER_PATH%\plugins\calendar\calendar.wfx
    Shared files=%COMMANDER_PATH%\plugins\netmon\NetMon.wfx
    榪欐牱錛屽綋鐢ㄦ埛榪涘叆緗戜笂閭誨眳鏃訛紝TC涓嶉渶瑕丩oad鎻掍歡灝卞彲浠ユ妸鎵鏈?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鍒楀嚭鏉ワ紝鎻掍歡鍙湁鍦ㄧ敤鎴瘋瘯鍥捐繘鍏S鎻掍歡鐩綍鏃舵墠鐪熸琚獿oad榪涙潵銆?br>
    澶ц嚧緇撴瀯涓婏紝FS鎻掍歡闇瑕佹彁渚涚殑鎺ュ彛鍑芥暟涓庝竴涓湡姝f枃浠剁郴緇熺殑鍩烘湰鍑芥暟鏈変簺綾諱技銆傚叾蹇呴渶鐨勫嚱鏁版湁4涓細FsInit銆丗sFindFirst銆丗sFindNext鍜?FsFindClose錛屾槸涓嶆槸鐪嬩簡寰堢溂鐔燂紝灝卞拰騫蟲椂鍒椾婦涓涓洰褰曚笅鎵鏈夋枃浠舵墍鐢ㄧ殑鍑芥暟 緇撴瀯涓鏍楓傞【鍚嶆濅箟錛孎sInit鏄敤浜?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鍒濆鍖栫殑鍑芥暟錛屽悓鏃禩C浼氫紶緇?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡3涓猅C鎻愪緵緇橣S鎻掍歡璋冪敤鐨刢allback鍑芥暟鍦板潃錛堜笅闈細浠嬬粛錛夛紱FsFindFirst鍜孎sFindNext鐢ㄤ簬鍒椾婦涓涓洰褰曚笅鎵鏈夌殑鏂囦歡錛汧sFindClose鐢?浜庣粓姝sFindFirst/FsFindNext鐨勬枃浠跺垪涓俱傛湁浜嗚繖4涓嚱鏁幫紝灝辨瀯鎴愪簡鏈灝忕殑FS鎻掍歡錛屽氨鍙互嫻忚FS鎻掍歡鐨勫悇涓洰褰曚簡銆?br>
    鏈変簡鏂囦歡鐩綍緇撴瀯鍚庯紝灝卞埌浜嗘牴鎹渶瑕佹彁渚涘悇縐嶆枃浠跺姛鑳界殑鏃跺欎簡錛屽寘鎷垹闄ゆ枃浠禙sDeleteFile錛涘垹闄ょ洰褰旻sRemoveDir錛涘緩绔嬬洰褰?FsMkDir錛涙墽琛屾枃浠禙sExecuteFile錛涜緗枃浠跺睘鎬sSetAttr錛涜緗枃浠舵椂闂碏s SetTime錛涙嫹璐濇枃浠禙sGetFile/FsPutFile/FsRenMovFile銆傚ぇ鑷翠笂閮藉拰鏅氭枃浠舵搷浣滃姛鑳藉樊涓嶅錛岄渶瑕佽鏄庣殑鏄嫹璐濇枃浠訛紝鐢變簬FS鎻掍歡鐨勭壒孌婃э紝鎷瘋礉鏂囦歡鍒嗘垚浜?縐嶆儏鍐碉細FsGetFile鏄粠FS涓線鏈湴紜洏鎷瘋礉錛汧sPutFile鏄粠鏈湴紜洏寰FS鎷瘋礉錛汧sRenMovFile鏄?鍦‵S鍐呴儴鎷瘋礉銆佺Щ鍔ㄦ垨閲嶅懡鍚嶆枃浠躲?br>
    姝ゅ錛屾牴鎹瓼S鎻掍歡鐨勯渶瑕侊紝TC榪樻彁渚涗簡3涓猚allback鍑芥暟浠ヤ緵鍏惰皟鐢細
    1) ProgressProc錛岀敤浜庢樉紺轟竴涓繘搴︽潯錛屼緥濡傛嫹璐濇枃浠舵椂鐨勮繘搴︽潯銆?
    2) LogProc錛岀敤浜庢樉紺篎TP宸ュ叿鏍忥紝鎻掍歡鍙互鍦ㄥ伐鍏鋒爮涓樉紺簂og淇℃伅錛屽茍鍐欏叆log鏂囦歡銆傚鏋滄樉紺轟簡FTP宸ュ叿鏍忥紝鐐瑰嚮“鏂紑榪炴帴”鎸夐挳鏃惰繕灝嗚皟鐢?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐨凢sDisconnect鍑芥暟銆?br>3) RequestProc錛岀敤浜庢樉紺轟竴涓緭鍏ュ璇濇錛屼緥濡傝姹傜敤鎴瘋緭鍏ョ敤鎴峰悕鍜屽瘑鐮佺瓑絳夈?br>
    鏈鍚庯紝FS鎻掍歡榪樺彲浠ュ疄鐜頒竴涓嚱鏁癋sStatusInfo錛屽鏋滆繖涓嚱鏁拌瀹炵幇錛孴C鍦ㄨ皟鐢?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡鐨勪換浣曞嚱鏁幫紙闄や簡FsInit鍜孎sDisconnect錛変箣鍓嶅拰涔嬪悗閮藉皢璋冪敤姝ゅ嚱鏁幫紝浠ユ柟渚?strong style="BACKGROUND-COLOR: rgb(153,255,153); COLOR: black">鎻掍歡閲婃斁璧勬簮絳夌瓑鎿嶄綔銆?br>
    FS鎻掍歡鐨勮緇嗘帴鍙e嚱鏁頒粙緇嶅彲浠ヤ粠緗戜笂涓嬭澆錛歨ttp://ghisler.fileburst.com/fsplugins/fspluginhelp1.3.zip銆?

    ]]>鍦板艦鏄劇ず浜?/title><link>http://m.shnenglu.com/winmain/archive/2010/02/05/107307.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Fri, 05 Feb 2010 13:27:00 GMT</pubDate><guid>http://m.shnenglu.com/winmain/archive/2010/02/05/107307.html</guid><wfw:comment>http://m.shnenglu.com/winmain/comments/107307.html</wfw:comment><comments>http://m.shnenglu.com/winmain/archive/2010/02/05/107307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/winmain/comments/commentRss/107307.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/winmain/services/trackbacks/107307.html</trackback:ping><description><![CDATA[  <img border=0 src="http://m.shnenglu.com/images/cppblog_com/winmain/tlscene.jpg"> <img src ="http://m.shnenglu.com/winmain/aggbug/107307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/winmain/" target="_blank">Code Knight</a> 2010-02-05 21:27 <a href="http://m.shnenglu.com/winmain/archive/2010/02/05/107307.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>QT灝忚涔嬪湪VS2005涓嬌鐢≦Thttp://m.shnenglu.com/winmain/archive/2010/01/31/106885.htmlCode KnightCode KnightSun, 31 Jan 2010 06:44:00 GMThttp://m.shnenglu.com/winmain/archive/2010/01/31/106885.htmlhttp://m.shnenglu.com/winmain/comments/106885.htmlhttp://m.shnenglu.com/winmain/archive/2010/01/31/106885.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/106885.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/106885.html    濡備綍鍦╓indows騫沖彴涓嬩嬌鐢≦T寮鍙戯紵
        涓錛屼笅杞絊DK鍖?br>       璇峰幓瀹樼綉(QT琚玁OKIA鏀惰喘錛岃矊浼間嬌鐢ㄥ崗璁洿瀹芥澗浜嗭級涓嬭澆win鐗堟湰鐨凲TSDK鍖呫傦紙鍦板潃濡備笉鐭ヨ鐧懼害GOOGLE涔嬶級
        浜岋紝璁劇疆寮鍙戠幆澧冪浉鍏沖彉閲?br>       緋葷粺鐜彉錛歅ATH涓嬪姞鍏ワ細(yourqtinstallpath)\bin
                     娣誨姞鏂扮殑鐜鍙橀噺,鍚嶅瓧涓?QMAKESPEC",鍊間負"win32-msvc2005".
           VS2005鐜錛歩nclude鍜宭ib鍒嗗埆鍖呭惈qt鐨刬nclude鐩綍鍜宷t鐨刲ib鐩綍
        涓? 緙栬瘧浣犳墍闇瑕佺殑QT Lib
          閫氳繃"寮濮?鑿滃崟 -> "Microsoft Visual Studio 2005" -> "Visual Studio Tools", 榪愯鍛戒護琛岋紙鍕夸嬌鐢╟md錛屾壘涓嶅埌nmake)
          (yourqtinstallpath)>configure -no-stl -no-dsp -vcproj
          寰匭Make瀹屾垚 緇х畫綆鍗曠殑鏁插叆nmake鍗沖彲錛堢瓑寰呯紪璇戝惂錛?br>    鍥?鍒涘緩QT宸ョ▼ helloworld
           鏈変笁縐嶅姙娉曟妸QT浠g爜鐢熸垚涓篤S宸ョ▼
           1錛屼嬌鐢╭make,濡備唬鐮佸湪C鐩樹笅
           C:\> qmake -project -t vcapp -o projectname.pro
           C:\> qmake
           2錛岀紪鍐檖ro宸ョ▼鏂囦歡銆傚鏋滄槸鍟嗕笟鐗堢殑灝變笉鐢ㄤ簡銆傚叿浣撳彲浠ュ弬鑰冨府鍔╂枃妗make銆傛柊寤鴻浜嬫湰鏂囦歡錛屾枃浠跺悕淇敼涓篽ello.pro錛屾枃浠跺悕娌℃湁 鐗規畩瑕佹眰鍝堬紱杈撳叆

            SOURCES +=main.cpp
            CONFIG +=qt

            ok 淇濆瓨銆?/p>

            鎵撳紑鍛戒護琛岋紝鍒囨崲鐩綍鍒癶ello.cpp鎵鍦ㄧ洰褰曘傜敓鎴怣akefile鏂囦歡錛涜緭鍏ワ細

        qmake -o Makefile hello.pro 錛?

        鎺ヤ笅鏉ョ敓鎴愰」鐩枃浠?vcproj鏂囦歡銆?

        qmake -tp vc -o hello.vcproj hello.pro

       3錛岀洿鎺ヤ嬌鐢?span class=ColorResultsClass highlight="true" realoffset="1237" alpha-value="20">Qt Visual Studio Integration v1.2.2 for.VS.2003.2005鎻掍歡(璇﹁http://blog.csdn.net/znf19850924/archive/2008/01/16/2047373.aspx)

        闇瑕侀厤緗?span class=ColorResultsClass highlight="true" realoffset="1384" alpha-value="20">濡備笅錛?/strong>
             "Tools" -> "Options" -> "Qt" -> "Builds", 娣誨姞鎴戜滑鍒氭墠緙栬瘧鐨?span class=ColorResultsClass highlight="true" realoffset="1405" alpha-value="20">Qt浠g爜,鍚嶅瓧涓?Qt 4.3.2", 璺緞涓?yourqtinstallpath)

         鍚姩涓涓柊鐨勫伐紼?
             閫夋嫨"Qt projects" -> "Qt Application"綾誨瀷,杈撳叆宸ョ▼鍚嶅瓧,鍗曞嚮OK.

         鍙屽嚮宸ョ▼鏂囦歡閲岄潰鐨?test.ui",椹笂鍑虹幇浜嗘墍瑙佸強鎵寰楃殑紿椾綋緙栬緫鍣?鍦ㄤ笂闈㈡坊鍔犱竴涓寜閽?

         鍙屽嚮鎸夐挳,浜х敓鐩稿簲鐨勬秷鎭搷搴斿嚱鏁?

         娣誨姞澶存枃浠?
             #include <QMessageBox>

             鍦ㄥ嚱鏁皏oid Test::on_pushButton_clicked()浣撳唴娣誨姞濡備笅浠g爜:
             QMessageBox box(this);
             box.setText("Haha, hit me.");
             box.exec();

        
           PS:鍙﹀鍙互鐩存帴浣跨敤QTSDK鑷甫瀹夎鐨凲TCreate鏉ヨ繘琛孮T宸ョ▼錛屽湪瀹夎濂絊DK鍚庝笉闇瑕佽繘琛屼換浣曢厤緗氨鑳藉榪愯DEMO騫剁湅鍒版晥鏋滐紝鍙兘鑷韓宸茬粡閰嶇疆濂斤紝浣嗘槸濡備綍寮曞叆鍒癡S涓紝鏆傛椂榪樹笉鐭ラ亾錛屾病鏈夌爺絀躲?br>

    ]]>
    絎竴涓満鏅?/title><link>http://m.shnenglu.com/winmain/archive/2010/01/15/105785.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Fri, 15 Jan 2010 15:51:00 GMT</pubDate><guid>http://m.shnenglu.com/winmain/archive/2010/01/15/105785.html</guid><wfw:comment>http://m.shnenglu.com/winmain/comments/105785.html</wfw:comment><comments>http://m.shnenglu.com/winmain/archive/2010/01/15/105785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/winmain/comments/commentRss/105785.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/winmain/services/trackbacks/105785.html</trackback:ping><description><![CDATA[<p>           騫詫紝鏁翠簡鍗婁釜鏈堟葷畻鍑轟簡澶╅緳鐨勭涓涓満鏅細灝戞灄銆傚ぉ涓嬫鍔熷嚭灝戞灄... <br></p> <p><img src="http://m.shnenglu.com/images/cppblog_com/winmain/tianlong1.JPG" border=0><br></p> <p><img src="http://m.shnenglu.com/images/cppblog_com/winmain/tianlong2.JPG" border=0><br></p> <p><br>綰圭悊濂藉儚榪樻湁浜涢棶棰?...<br><br></p> <img src ="http://m.shnenglu.com/winmain/aggbug/105785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/winmain/" target="_blank">Code Knight</a> 2010-01-15 23:51 <a href="http://m.shnenglu.com/winmain/archive/2010/01/15/105785.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OGRE璐磋姳鍒嗙被http://m.shnenglu.com/winmain/archive/2010/01/14/105618.htmlCode KnightCode KnightWed, 13 Jan 2010 16:03:00 GMThttp://m.shnenglu.com/winmain/archive/2010/01/14/105618.htmlhttp://m.shnenglu.com/winmain/comments/105618.htmlhttp://m.shnenglu.com/winmain/archive/2010/01/14/105618.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/105618.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/105618.html娉曠嚎璐磋姳錛屾牴鎹墍鍦ㄤ綅緗殑娉曠嚎鑷姩璋冩暣璐磋姳鏈濆悜錛堜笉瑕佹眰绱ц創錛?/p>

    妯″瀷璐磋姳錛屾牴鎹創鑺辨墍鍦ㄧ殑緗戞牸鑷姩鐢熸垚妯″瀷錛堜竴鑸創鍥撅級

    鎶曞獎璐磋姳錛屽埄鐢ㄦ姇褰辯汗鐞嗙殑鏂瑰紡瀹炵幇鐨勮創鑺憋紙frustum錛?/p>

    緗戞牸璐磋姳錛屽垱寤烘寚瀹氬ぇ灝忕殑緗戞牸璐磋姳錛岀劧鍚庤嚜鍔ㄨ皟鏁寸綉鏍肩殑浣嶇疆錛坢esh錛岃創鍥撅級




    ]]>
    璐?/title><link>http://m.shnenglu.com/winmain/archive/2009/12/29/104407.html</link><dc:creator>Code Knight</dc:creator><author>Code Knight</author><pubDate>Tue, 29 Dec 2009 13:54:00 GMT</pubDate><guid>http://m.shnenglu.com/winmain/archive/2009/12/29/104407.html</guid><wfw:comment>http://m.shnenglu.com/winmain/comments/104407.html</wfw:comment><comments>http://m.shnenglu.com/winmain/archive/2009/12/29/104407.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.shnenglu.com/winmain/comments/commentRss/104407.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/winmain/services/trackbacks/104407.html</trackback:ping><description><![CDATA[<img src="http://m.shnenglu.com/images/cppblog_com/winmain/screenshot_2.png" border="0"><img src="http://m.shnenglu.com/images/cppblog_com/winmain/screenshot_1.png" border="0"><br> <img src ="http://m.shnenglu.com/winmain/aggbug/104407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/winmain/" target="_blank">Code Knight</a> 2009-12-29 21:54 <a href="http://m.shnenglu.com/winmain/archive/2009/12/29/104407.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OGRE灝忚http://m.shnenglu.com/winmain/archive/2009/12/28/104319.htmlCode KnightCode KnightMon, 28 Dec 2009 15:15:00 GMThttp://m.shnenglu.com/winmain/archive/2009/12/28/104319.htmlhttp://m.shnenglu.com/winmain/comments/104319.htmlhttp://m.shnenglu.com/winmain/archive/2009/12/28/104319.html#Feedback0http://m.shnenglu.com/winmain/comments/commentRss/104319.htmlhttp://m.shnenglu.com/winmain/services/trackbacks/104319.html2,node鐨勯粯璁osition鏄師鐐?br>3,鏉愯川鑴氭湰涓畾涔夌殑紼嬪簭孌典腑鐨剆ource鏂囦歡鍚嶅悗緙蹇呴』涓庡畾涔夌殑shader鏂囦歡綾誨瀷鍖歸厤銆?br>濡傦細
    vertex_program Ogre/CelShadingVP1 hlsl
    {
        source Example_CelShading1.hlsl
        entry_point main_vp
        target vs_2_0
    }
    娉ㄦ剰target鏄痟lsl涓嫭鍗?cg涓槸profile,涓斿弬鏁頒笉鍚?br>4錛孭lugin_CgProgramManager_d.dll 鎻掍歡涓瀹氳鏈塩g.dll閰嶅悎
    5錛孫GRE涓嶆敮鎸佺殑涓枃璺緞鐢ㄤ笅闈㈣В鍐籌細
    setlocale(LC_ALL, "chinese-simplified");
    璁板緱璇誨彇瀹岃祫婧愯榪樺師
    6錛?nbsp;   Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups()涓瀹氳鍦╮endersystem鍒濆鍖栧畬姣曟墠鑳借皟鐢ㄣ備篃灝辨槸鍦╮oot鐨刢reateRenderWindow 涔嬪悗
    7錛屾兂瑕佷綘鐨凮IS涓殑mouse浣昸eboard鍝嶅簲浣犲緱璁板緱鍦╢rameStarted 涓瘡嬈″幓capture;
    璁板緱鍦?nbsp;          
    mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject(OIS::OISKeyboard, true));
    mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject(OIS::OISMouse, true));
    涔嬪悗
    mMouse->setEventCallback(this);
    mKeyboard->setEventCallback(this);






    ]]>
    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲高清不卡在线观看| 欧美国产综合视频| 久久久成人精品| 午夜激情综合网| 亚洲影院一区| 亚洲综合丁香| 久久精品视频导航| 蜜臀99久久精品久久久久久软件 | 亚洲男人的天堂在线| 一本大道久久a久久精二百| 一区二区三区欧美在线| 亚洲欧美第一页| 久久青青草综合| 欧美大片免费看| 国产精品久久久91| 狠狠色综合色区| 日韩一二三在线视频播| 欧美在线首页| 欧美成人四级电影| 日韩写真视频在线观看| 亚洲欧美在线一区二区| 老司机精品导航| 欧美视频在线观看一区| 海角社区69精品视频| 99精品视频免费| 欧美精品国产一区| 欧美香蕉大胸在线视频观看| 国内精品久久久久影院色| 亚洲乱码精品一二三四区日韩在线 | 欧美精品国产| 国产日韩在线一区| 日韩午夜av电影| 久久久久久久久久久成人| 亚洲国产精品一区二区久| 亚洲视频在线观看网站| 久久婷婷国产综合精品青草 | 欧美日韩美女在线| 国产日韩欧美综合| 一区二区三欧美| 免费看黄裸体一级大秀欧美| 在线一区二区三区四区五区| 蜜臀av在线播放一区二区三区| 国产精品影片在线观看| 一区二区高清在线| 欧美国产视频一区二区| 久久成人人人人精品欧| 国产精品系列在线| 亚洲少妇在线| 激情五月婷婷综合| 精品电影在线观看| 欧美亚洲在线视频| 国产精品99久久久久久人| 欧美激情第8页| 91久久精品日日躁夜夜躁欧美| 欧美日韩一区自拍| 日韩亚洲精品在线| 亚洲成色www8888| 久久精品综合网| 国产综合第一页| 久久精品欧美| 欧美一区二区啪啪| 国产综合欧美| 久久亚洲一区二区三区四区| 午夜精品影院| 国产午夜精品理论片a级探花| 亚洲在线观看免费视频| 99精品国产一区二区青青牛奶| 欧美**人妖| 亚洲免费av片| 亚洲毛片视频| 欧美午夜精品电影| 欧美在线视频观看| 久久精品女人的天堂av| 影音先锋亚洲一区| 欧美激情久久久久久| 欧美激情中文字幕一区二区| 99精品欧美一区二区三区| 99国产精品99久久久久久粉嫩| 欧美四级在线| 欧美一区二区三区喷汁尤物| 欧美在线观看网址综合| 亚洲国产综合视频在线观看| 亚洲日本理论电影| 国产精品日韩欧美一区二区三区| 欧美一区二区在线免费播放| 久久精品国产亚洲精品| 亚洲激情一区二区| 夜夜嗨av色综合久久久综合网| 国产精品免费观看在线| 久久中文久久字幕| 欧美风情在线观看| 亚洲综合国产激情另类一区| 香蕉久久夜色精品国产| 91久久在线观看| 亚洲曰本av电影| 亚洲福利国产| 亚洲伊人久久综合| 亚洲国产婷婷综合在线精品| 亚洲午夜免费视频| 亚洲欧洲日本在线| 亚洲欧美在线高清| 一区二区三区四区在线| 欧美影院久久久| 亚洲精品欧美日韩| 午夜精品偷拍| av不卡在线观看| 久久成人这里只有精品| 亚洲视频在线播放| 老**午夜毛片一区二区三区| 亚洲欧美日韩一区二区三区在线| 一区二区三区www| 久久人人爽国产| 亚洲国产清纯| 午夜精品福利电影| 一区二区三区三区在线| 久久精品国产久精国产爱| 亚洲先锋成人| 模特精品在线| 久久性天堂网| 国产精品自拍在线| 日韩午夜视频在线观看| 亚洲激情在线播放| 久久久久久久久久久久久久一区 | 久久国产一区二区三区| 在线综合亚洲| 欧美国产日韩一区二区| 欧美va天堂在线| 好吊色欧美一区二区三区四区 | 巨乳诱惑日韩免费av| 国产精品久久久久影院色老大| 亚洲国产成人tv| 亚洲国产日韩综合一区| 久久久久国产免费免费| 久久精品国产999大香线蕉| 国产精品电影网站| 一区二区精品在线| 亚洲无限乱码一二三四麻| 欧美好吊妞视频| 亚洲国产成人av| 亚洲精品视频在线看| 欧美国产日韩在线观看| 亚洲福利久久| 亚洲人成网站777色婷婷| 免费的成人av| 亚洲欧洲精品天堂一级 | 欧美日韩免费看| 亚洲精品中文字| 在线一区二区日韩| 国产精品红桃| 亚洲一区三区电影在线观看| 欧美一级专区| 狠狠做深爱婷婷久久综合一区| 欧美主播一区二区三区| 久久综合伊人77777| 亚洲二区视频| 欧美日韩黄色一区二区| 亚洲一区二区动漫| 久久久精品国产免大香伊| 在线成人免费观看| 欧美精品日韩一区| 亚洲在线不卡| 欧美电影打屁股sp| 亚洲午夜av电影| 国产午夜精品久久久久久免费视| 久久av一区二区三区亚洲| 欧美成人69av| 在线一区二区三区做爰视频网站| 国产精品视频你懂的| 久久亚洲精品视频| 99av国产精品欲麻豆| 一区二区三区视频在线看| 99热这里只有精品8| 亚洲午夜三级在线| 国内激情久久| 欧美日韩美女一区二区| 欧美一区二区在线看| 亚洲国产另类久久精品| 亚洲综合社区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美日韩国产欧美日美国产精品| 亚洲性夜色噜噜噜7777| 免费欧美在线| 亚洲欧美伊人| 亚洲人线精品午夜| 国产欧美日本一区视频| 欧美成人一品| 午夜精品视频一区| 99国产一区二区三精品乱码| 另类国产ts人妖高潮视频| 亚洲视频视频在线| 亚洲欧洲偷拍精品| 国产一区在线免费观看| 欧美日韩精品一区二区三区| 久久久国产一区二区三区| 国产精品99久久久久久久久久久久| 欧美成人免费大片| 久久久久久久综合| 欧美尤物巨大精品爽| 亚洲天堂网在线观看| 亚洲精品国产日韩|