锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 銆銆濡備笅鏄渶鏂板叕甯冪殑涓孌?#8220;CryEngine 3”寮曟搸鍒朵綔FPS娓告垙鍦板浘瑙嗛錛屼粠鍒朵綔鍒版紨紺轟粎闀?鍒嗛挓錛岀湅浜嗚浜虹灎鐩粨鑸岋紝鍞忓槝涓嶅凡銆?/p>
--------------------------------------
榪欑瘒鏂囩珷綰睘鏄幓騫寸湅閮庢暀鎺堢殑璁插駭鍚庣殑涓鏃跺啿鍔紝闄嗙畫鍐欎簡寰堜箙銆備絾寰堝瑙傜偣鐜板湪鐪嬫潵鍊煎緱鍟嗘Ψ錛屽彲鑳芥槸褰撴椂澶縺鍔ㄤ簡錛屽氨欏虹潃閮庢暀鎺堢殑鐞嗚寰涓嬪垎鏋愪簡涓涓嬨備慨鏀圭殑宸ヤ綔閲忓お澶т篃娌℃椂闂村氨鏀懼純浜嗭紝鍘熸牱璐村嚭鏉ヤ緵澶у鍙傝冦?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>鐧懼害鐧劇
-----------------------------------------------
鏂規硶濡備笅錛堝紩鐢級錛歨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>
閫氳繃璺熻釜璋冭瘯錛屽彂鐜頒簡闂鎵鍦紝鍘熸潵緗瓉紲擱灝辨槸浠栵細 const FontGlyph *Font::getGlyphData (utf32 codepoint) { } 鍘熸潵CEGUI鏍規嵁Unicode瀛楃鐨勭紪鐮侀『搴忥紝涓烘瘡256涓瓧絎﹀垎閰嶄竴寮犵汗鐞嗭紙渚嬪緙栫爜0-255瀛樻斁鍦ㄧ汗鐞嗕竴錛岀紪鐮?68-1023 瀛樻斁鍦ㄧ汗鐞嗗洓錛夈傝嫳鏂囧緢瀹規槗鎼炲畾浜嗭紝閭d箞鍑犱釜瀛楃涓寮犵汗鐞嗗氨澶熶簡錛屽彲涓枃灝卞緱闈犺繍姘斾簡錛屾湁鏃舵樉紺哄嚑涓瓧灝辮鐢熸垚鍑犲紶綰圭悊錛岃繕瑕佸皢姣忓紶綰圭悊鐢ㄤ笉闇瑕佺殑鐩擱偦瀛楀~婊★紝鍔蟲皯浼よ儲錛?/p>
鍙戠幇浜嗛棶棰橈紝鎴戜究鎸夌収鍗冮噷椹倽鐨勬濇兂瀵瑰嚱鏁拌繘琛屼簡鏀歸狅紝灝嗕嬌鐢ㄧ殑鏂囧瓧鏀懼叆涓寮犵汗鐞嗕腑錛屽洜涓虹汗鐞嗘渶澶ф壙杞?56涓瓧錛屾墍浠ワ紝褰撴眽瀛楄秴榪?56涓椂錛屽垯灝嗕笉甯哥敤鐨勫幓鎺夛紝灝嗘柊鐨勫瓧絎﹀啓鍏ャ?/p>
鍚庢潵鎴戝彂鐜版眽瀛楃殑寮曠敤娌℃湁澶鐨勮寰嬶紝甯哥敤鐨勪竴鍗冨姹夊瓧鍑虹幇鐨勬鐜囨病鏈夐偅涔堟偓孌婏紙搴熻瘽錛岃涓嶆庝箞鏄父鐢ㄥ憿!錛夛紝娌℃湁鍔炴硶寰堝ソ鍦版寜鐓т嬌鐢ㄧ殑棰戠巼灝嗘眽瀛楅檺鍒跺湪256涓瓧浠ュ唴錛屽啓榪涚汗鐞嗭紝灝辯儲鎬т竴鏃︽弧浜嗗氨灝嗗瓧鍏ㄩ儴閲婃斁鎺夛紝閲嶆柊鍐欏叆銆傦紙涔熼渶鏈夋垜娌℃壘鍒幫紝榪樿楂樻墜鎸囨暀錛?/p>
浠g爜濡備笅錛?/p>
const FontGlyph *Font::getGlyphData (utf32 codepoint) { } void FreeTypeFont::rasterizeHZ (utf32 codepoint) { }
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>
寮曟搸涓?/span>2D錛?/span>3Dloader鎻愪緵浜嗕竴浜涘叕鐢ㄧ殑宸ュ叿綾伙紝濡?/span>class TreeRef錛屼互鍐呰仈鍑芥暟鐨勬ц川涓?/span>loader鎻愪緵浜嗕綅緗紝鏃嬭漿錛屽昂瀵革紝鏂瑰悜絳夌殑“get”鏁板榪愮畻銆傝?/span>TreeIterator2D錛?span>TreeIterator3D鍒欎負loader鎻愪緵浜嗘爲鎸囬拡鐨勬搷浣溿?/span>
涓錛氭竻闄ゅ湴褰㈠垎綰х儲寮曠紦鍐插強鍦板艦鍒嗛〉錛屾牴鎹湴褰俊鎭暟鎹祦鍔犺澆鍦板艦淇℃伅閰嶇疆鏂囦歡錛?/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
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>
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: 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 ......... |
![]() |
||
| 鍥? |
![]() |
||
| 鍥? |
![]() |
||
| 鍥? |
![]() |
||
| 鍥? |
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>
|
|
銆銆鐜板湪鏍規帴鐐瑰瓨鍌ㄤ簡涓栫晫涓殑鍏ㄩ儴欏剁偣銆傝繖鏄紝浠栬繕鏄笉鑳界粰鎴戜滑浠諱綍濂藉錛屽洜涓轟粬榪樹細鐢繪墍鏈夌殑涓滆タ銆傛垜浠兂鎶婅繖涓帴鐐瑰垎鎴?涓儴鍒嗐備竴嬈★紝鎴戜滑鍒掑垎鏃訛紝鏈?涓珛鏂逛綋鍖呭惈閭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
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();
綰圭悊濂藉儚榪樻湁浜涢棶棰?...
妯″瀷璐磋姳錛屾牴鎹創鑺辨墍鍦ㄧ殑緗戞牸鑷姩鐢熸垚妯″瀷錛堜竴鑸創鍥撅級
鎶曞獎璐磋姳錛屽埄鐢ㄦ姇褰辯汗鐞嗙殑鏂瑰紡瀹炵幇鐨勮創鑺憋紙frustum錛?/p>
緗戞牸璐磋姳錛屽垱寤烘寚瀹氬ぇ灝忕殑緗戞牸璐磋姳錛岀劧鍚庤嚜鍔ㄨ皟鏁寸綉鏍肩殑浣嶇疆錛坢esh錛岃創鍥撅級
