锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产日韩三区,国产主播精品在线,国产精品久久久久久av福利软件 http://m.shnenglu.com/yuanyajie/category/3706.html璁板綍鎵鎬濇墍鎯籌紝鏀惰棌鎵瑙佹墍闂伙拷? zh-cnMon, 19 May 2008 13:01:23 GMTMon, 19 May 2008 13:01:23 GMT60Ogre3D宓屽叆Qt妗嗘灦 涔嬨灝忕粨http://m.shnenglu.com/yuanyajie/archive/2007/05/21/24528.html娓呮簮娓告皯娓呮簮娓告皯Mon, 21 May 2007 03:57:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/05/21/24528.htmlhttp://m.shnenglu.com/yuanyajie/comments/24528.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/05/21/24528.html#Feedback10http://m.shnenglu.com/yuanyajie/comments/commentRss/24528.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/24528.html闃呰鍏ㄦ枃

娓呮簮娓告皯 2007-05-21 11:57 鍙戣〃璇勮
]]>
Ogre3D宓屽叆Qt妗嗘灦 涔嬨縐鍥?/title><link>http://m.shnenglu.com/yuanyajie/archive/2007/05/21/24506.html</link><dc:creator>娓呮簮娓告皯</dc:creator><author>娓呮簮娓告皯</author><pubDate>Sun, 20 May 2007 17:26:00 GMT</pubDate><guid>http://m.shnenglu.com/yuanyajie/archive/2007/05/21/24506.html</guid><wfw:comment>http://m.shnenglu.com/yuanyajie/comments/24506.html</wfw:comment><comments>http://m.shnenglu.com/yuanyajie/archive/2007/05/21/24506.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.shnenglu.com/yuanyajie/comments/commentRss/24506.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/yuanyajie/services/trackbacks/24506.html</trackback:ping><description><![CDATA[<p>鐜錛歐indowsXp Pro SP2, VS2003.NET, Ogre1.4.1(Eihort), Qt 4.2.2 寮婧愮増<br>鍙傝冿細ShowMesh,MAGE,涓ゆ宸ュ叿婧愮爜<br>鍏堟妸鍥劇鍑烘潵錛屾湁鏃墮棿鏂囧瓧鎬葷粨涓涓嬶紝闅懼害铏界劧涓嶉珮錛屼絾涔熸姌鑵句笉灝戞椂闂?涔熺畻榪戞潵瀛︿範Qt涓嶰gre鐨勪竴涓皬緇撱?br><br><img height=480 alt="" src="http://m.shnenglu.com/images/cppblog_com/yuanyajie/2865/r_ShowOgreEmbedInQt.jpg" width=612 border=0><br></p> <img src ="http://m.shnenglu.com/yuanyajie/aggbug/24506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/yuanyajie/" target="_blank">娓呮簮娓告皯</a> 2007-05-21 01:26 <a href="http://m.shnenglu.com/yuanyajie/archive/2007/05/21/24506.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆奝ro Ogre 3D Programming銆嬭涔︾瑪璁?涔?絎崄涓绔?鍔ㄦ侀槾褰?/title><link>http://m.shnenglu.com/yuanyajie/archive/2007/03/21/20302.html</link><dc:creator>娓呮簮娓告皯</dc:creator><author>娓呮簮娓告皯</author><pubDate>Wed, 21 Mar 2007 09:07:00 GMT</pubDate><guid>http://m.shnenglu.com/yuanyajie/archive/2007/03/21/20302.html</guid><wfw:comment>http://m.shnenglu.com/yuanyajie/comments/20302.html</wfw:comment><comments>http://m.shnenglu.com/yuanyajie/archive/2007/03/21/20302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/yuanyajie/comments/commentRss/20302.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/yuanyajie/services/trackbacks/20302.html</trackback:ping><description><![CDATA[ <p>娓呮簮娓告皯銆銆gameogre@gmail.com<br /><br /><font color="#0000ff">闃村獎鎶鏈?/font><br />Ogre鏀寔涓ょ涓繪祦鐨勫姩鎬侀槾褰辨妧鏈紝妯℃澘(stencil)闃村獎涓庣汗鐞?texture)闃村獎,姣忎竴縐嶉兘鏈変袱涓彉浣擄細modulative 涓巃dditive銆傝繖鍥涚鎶鏈畬鍏ㄥ吋瀹瑰浐瀹氬嚱鏁板浘褰㈡祦姘寸嚎錛屽洜姝や笉闇瑕佸彲緙栫▼GPU鏀寔銆傜劧鑰岋紝鍙埄鐢℅PU紼嬪簭榪涜鍔犻熴傚湪鍦烘櫙涓彧鏈変嬌鐢ㄤ竴縐嶉槾褰辨妧鏈紝搴旇鍦ㄥ満鏅覆鏌撹繖鍓嶈繘琛岄槾褰辨妧鏈浉鍏寵緗紙鏈濂芥槸鍦ㄥ垱寤哄満鏅鐞嗗櫒涔嬮棿錛夈傞氳繃璋冪敤SceneManager::setShadowTechnique()鏉ヨ緗妧鏈紝鍙傛暟鎸囧畾鎶鏈殑鍏蜂綋綾誨瀷銆傞槾褰辨妧鏈己鐪佹儏鍐典笅琚叧闂傚浜庣墿浣擄紝鎶曞皠涓庢帴鏀墮槾褰卞彲浠ュ湪鏉愯川涓帶鍒訛紝涔熷彲浠ユ帶鍒剁墿浣撹嚜宸卞鑷繁鎶曞皠銆傜敱浜庢ā鏉塊槾褰辯畻娉曠殑鏈川鐗瑰緛錛岄忔槑鍗婇忔槑鐨勭墿浣撹涔堝叏閮ㄦ姇灝勫疄蹇冮槾褰辮涔堟牴鏈笉鎶曞獎褰憋紝涓嶅彲鑳藉緱鍒板崐閫忔槑鐨勯槾褰便傝屼嬌鐢ㄧ汗鐞嗛槾褰辨妧鏈垯鍙互銆傜伅涓嶈兘鐢ㄦ潵鎶曞皠闃村獎銆?br /><font color="#0000ff">妯℃澘闃村獎綆楁硶<br /></font>妯℃澘闃村獎綆楁硶鍘熺悊涓婃潵璁叉瘮杈冪畝鍗曪細浠庡厜婧愮殑瑙掑害鐪嬩竴涓彲浠ユ姇灝勯槾褰辯殑鐗╀綋錛屽彲浠ョ湅鍒扮墿浣撴渶澶栬疆寤撶殑<br />褰㈢姸錛屾妸榪欎釜杞粨娌垮厜鐨勬柟鍚戝歡浼革紝褰㈡垚涓涓┖闂翠綋錛屽氨鏄墍璋撶殑闃村獎閿?shadow volume),寰堟樉鐒訛紝濡傛灉涓<br />涓墿浣撹榪欎釜闃村獎閿ュ寘鍥達紝閭d箞榪欎釜鐗╀綋灝卞浜庡墠闈㈤偅涓墿浣撴墍鎶曞皠鐨勯槾褰變腑浜嗐傛棦鐒墮槾褰遍敟鏄氳繃寤朵幾鐨勬柟寮忔潵澧為暱鐨勶紝閭d箞鍙互鍦ㄥ歡浼告柟鍚戝閿ヤ綋鐨勫歡浼歌寖鍥翠綔鍑烘帶鍒躲傚湪寤朵幾鏂瑰悜涓婏紝鏈変竴绔笉鑳藉歡浼革紝鍙﹀涓绔殑寤朵幾鑼冨洿鎺у埗鎸夌収涓嬮潰涓や釜瑙勫垯銆傜涓錛屽鏋滀嬌鐢ㄥ彲緙栫▼鍥懼艦紜歡錛岄《鐐圭▼搴忓彲浠ュ欏剁偣榪涜鏃犻檺寤朵幾銆傜浜岋紝濡傛灉浣跨敤鍥哄畾鍑芥暟鍥懼艦嫻佹按綰匡紝寤朵幾鐨勮寖鍥寸敱鍏夌嚎琛板噺璁劇疆(鐐瑰厜婧愬拰鑱氬厜鐏級鎴栦嬌鐢?br />SceneManager::setShadowDirectionalLightExtrusionDistance()鏉ユ帶鍒躲傚湪涓嶄嬌鐢ㄥ姞閫熷浘褰㈢‖浠剁殑鎯呭喌涓嬶紝搴旇灝介噺閬垮厤鐗╀綋紱誨厜婧愯繃榪戯紝榪欐牱浼氫駭鐢熻繃浜庡鐨勯槾褰遍敟錛屽鑷翠笉姝g‘鐨勯槾褰辨晥鏋溿傛牴鎹畻娉曞師鐞嗭紝浜х敓鐨勯槾褰辮竟鐣岄潪甯告槑鏄撅細涓涓儚绱犺涔堝湪闃村獎涓紝瑕佷箞涓嶅湪銆傝繖甯︽潵鐨勫ソ澶勬槸錛屽嵆浣塊槾褰遍敟鐨勫歡浼歌窛紱誨緢澶э紝涔熶笉浼氬獎鍝嶇簿搴︺傚彲浠ヨ榪欑鎶鏈駭鐢熺殑闃村獎鏄竴縐嶁滅‖闃村獎"銆傜汗鐞嗛槾褰辨妧鏈彲浠モ濊蔣鍖栤滈槾褰便備嬌鐢ㄦā鏉塊槾褰辨妧鏈渶瑕佽竟鍒楄〃(edge lists),鏍囧噯鐨勮漿鎹㈠伐鍏峰湪浜х敓浜岃繘鍒秏esh鏂囦歡鏃朵細鍒涘緩杈瑰垪琛紝濡傛灉娌℃湁錛屽湪紼嬪簭涓篃鍙互鐢∕esh::buildEdgeList()鏉ヤ駭鐢熴傚洜涓烘湁鏃跺欙紝鎴戜滑浼氫唬鐮佺殑鏂瑰紡鏉ョ敓鎴恗esh,濡傛灉榪欐椂鎴戜滑鎯充嬌鐢ㄦā鏉塊槾褰辨妧鏈紝閭d箞灝辮紜繚浜х敓鍑鴻竟鍒楄〃鏁版嵁銆傚鏋滆竟鍒楄〃鏁版嵁涓嶅瓨鍦紝閭d箞ogre浼氳涓轟綘涓嶅笇鏈涜繖涓墿浣撴姇灝勯槾褰便?br /><font color="#0000ff">妯℃澘闃村獎浼樺寲<br /></font>Ogre鑳借繘琛屼竴浜涗竴鑸殑浼樺寲銆備緥濡傚彲浣跨敤紜歡鍔犻燂紝鍙兘閫氳繃鍏夌殑鏂瑰悜涓庤寖鍥存潵媯嫻嬪畠鏄惁浼氬騫蟲埅澶翠綋<br />(frustum)浜х敓褰卞搷錛屼粠闈㈤伩鍏嶄簡璁$畻閭d簺涓嶅繀瑕佺殑闃村獎鍑犱綍浣撱俹gre鏀寔鍙岄潰妯℃澘錛宻tencil-wrapping鎵╁睍錛?br />榪欎簺閮借兘闃繪涓嶅繀瑕佺殑鍘熷瀷瀹夎(primitive setup)涓庨┍鍔ㄨ繃杞?driver overhead)銆俹gre浣跨敤鐩稿寤変環鐨刏-pass綆楁硶浠f浛Z-Fail綆楁硶錛堝綋Z錛岶ail綆楁硶涓嶅繀瑕佹椂錛屽亣濡傜浉鏈哄浜庝竴涓槾褰遍敟涓紝浣跨敤Z-pass綆楁硶浼氭湁闂錛岃繖縐嶆儏鍐典笅搴旇浣跨敤Z-fail綆楁硶錛夈?br />闃村獎閿ヤ笉鍙楀皝闂嚑浣曠殑褰卞搷銆傚湪涓嬪浘涓紝<br /><img src="http://m.shnenglu.com/images/cppblog_com/yuanyajie/2865/r_shadowVolumeJPG.JPG" /><br />鍗叺鎶曞皠鍒板湴鏉夸笂錛屾姇灝勭殑鑼冨洿鍐呮湁涓皝闂殑綆卞瓙錛堟渚嬩腑璁懼畾綆卞瓙涓嶆姇灝勯槾褰憋級銆傛牴鎹幇瀹炰笘鐣岀殑緇忛獙錛岀瀛愪笂浼氭湁鍗叺鎶曞皠鐨勯槾褰憋紝濡傚浘涓墍紺恒備絾鍏夌嚎緇忚繃綆卞瓙闃繪尅鍚庡簲璇ヤ笉鍐嶅墠榪涳紝涔熷氨鏄闃村獎閿ョ粡榪囩瀛愰樆鎸″悗涓嶅簲璇ュ歡浼鎬簡錛屼簬鏄瀛愬悗闈㈢殑鍦版澘涓婁笉搴旇鍐嶅嚭鐜板崼鍏電殑闃村獎錛堢湡瀹炰笘鐣屼腑鍑虹幇綆卞瓙鐨勯槾褰憋紝浣嗘槸姝や緥璁懼畾綆卞瓙涓嶄駭鐢熼槾褰?銆傚浘涓殑鍦版澘涓婂嚭鐜頒簡鍗叺鎶曞皠鐨勯槾褰憋紝榪欒鏄庝簡闃村獎涓嶄細鍙楀埌寤朵幾鏂瑰悜涓婄墿浣撶殑褰卞搷銆?br />鍦ㄥ睆騫曚笂鐪嬩笉鍒扮殑鐗╀綋涔熷彲浠ユ妸闃村獎鎶曞獎鍒板彲瑙嗙殑騫蟲埅澶翠綋(view frustum)涓傝櫧鐒剁湅涓嶅埌錛屼絾鏄繖浜涚墿浣?br />涔熷繀欏誨緱琚覆鏌擄紝娓叉煋浠栦滑綰補鏄負浜嗗緱鍒頒駭鐢熼槾褰辯殑鐩稿叧鏁版嵁銆傚湪涓嶄嬌鐢ㄧ‖浠跺姞閫熺殑鎯呭喌涓嬶紝灝介噺閬垮厤鐗╀綋紱誨厜婧愯繃榪戙?br /><font color="#0000ff">綰圭悊闃村獎</font><br />綰圭悊闃村獎綆楁硶鐨勫熀鏈師鐞嗘槸錛氶鍏堜粠鍏夋簮鐨勮搴﹁瀵熷満鏅紝鎶婅瀵熷埌緇撴灉娓叉煋鍒頒竴涓汗鐞嗭紝綰圭悊涓彧淇濆瓨<br />娣卞害鍊鹼紙娣卞害緙撳啿涓殑鍊鹼級銆傝繖鏍峰仛鐨勬剰涔夋槸錛屽湪綰圭悊涓繚瀛樹簡鍦烘櫙涓殑鐗╀綋涓庡厜婧愪箣闂寸殑鏈鐭窛紱匯傜劧鍚庝粠鐩告満鐨勮搴﹁繘琛屾甯告覆鏌撳満鏅紝璁$畻姣忎釜鍍忕礌涓庡厜婧愮殑璺濈,騫朵笌綰圭悊瀵瑰簲鐨勫艱繘琛屾瘮杈冿紝濡傛灉澶т簬錛岄偅涔堣鏄庡畠涓嶆槸鍏夌嚎鏂瑰悜涓婄鍏夋簮鐨勬渶榪戠殑錛屼細鏈夐槾褰變駭鐢?font color="#008000">銆?*鍙互鏈夌偣鐤戞儜錛屾瘡涓渶瑕佹祴璇曠殑鍍忕礌濡備綍涓庣汗鐞嗕腑鐨勫儚绱犱竴涓瀵瑰簲鍛紵榪樻槸鎸夌収鐢熸垚綰圭悊鍥劇殑鍘熺悊錛岄渶瑕佹妸嫻嬭瘯欏剁偣鐨勪綅緗潗鏍囷紝杞崲鍒板厜婧愪負瑙嗙偣鐨勭┖闂達紝涔熷氨鏄浠庡厜婧愮殑瑙掑害錛岀湅鐪嬮《鐐瑰簲璇ュ湪鍝噷銆傝繖鏍峰氨鍙互涓涓瀵瑰簲姣旇緝浜嗐傚綋鐒惰繖浠呬粎鏄負浜嗘瘮杈冪殑鐩殑錛岀湡姝f覆鏌撴椂欏剁偣榪樻槸瑕佸厛杞崲鍒拌絀洪棿涓?浠庣浉鏈鴻搴︾湅)*/</font>銆?br />綰圭悊闃村獎閫熷害涓婅姣旀ā鏉塊槾褰辯畻娉曞揩錛屼絾鍥犱負闃村獎琚覆鏌撳埌綰圭悊涓紝鑰岀汗鐞嗗叿鏈夌‘瀹氱殑瑙f瀽搴︼紝鍥犳褰撻槾褰辮鎵╁睍錛屾媺浼告椂錛屾晥鏋滀細杈冨樊錛屽浜х敓閿嬌杈圭瓑銆?br />鍥犱負浣跨敤浜嗙汗鐞嗗唴瀛橈紝鍥犳瀹冪殑灝哄鍐沖畾浜嗙汗鐞嗛槾褰辨暟鐨勪笂闄愩俹gre涓彲浠ョ鐞嗕竴甯т腑鍙互浣跨敤鐨勯槾褰辯汗鐞嗘暟錛歋ceneManager::setShadowTextureCount()銆傛瘡涓厜婧愰兘闇瑕佷竴涓汗鐞嗐傚亣濡傛寚瀹氱殑綰圭悊鏁板皯浜庡厜婧愭暟錛宱gre閲囩敤鈥濆厛鏉ュ厛鏈嶅姟鈥滅殑鍘熷垯鍒嗛厤綰圭悊銆傚亣濡備笉鑳藉鍔犵汗鐞嗗昂瀵告潵鎻愰珮瑙嗚鏁堟灉錛屾渶濂藉噺灝忔姇灝勯槾褰辯殑璺濈銆傞槾褰變笉浼氱獊鐒剁粓緇擄紝ogre浼氭貳鍖栫汗鐞嗛槾褰辯殑杈圭紭闃繪鏈夐槾褰變笌鏃犻槾褰變箣闂村墽鐑堣繃娓°傚彲浠ユ帶鍒舵貳鍖栧崐寰勩?br /><font color="#0000ff">Modulative闃村獎娣峰悎<br /></font>姝e父鍦烘櫙娓叉煋鐨勯鑹蹭笌闃村獎鐨勯鑹茬浉涔樻潵鍒涘緩鏆楃殑銆佽〃紺洪槾褰辯殑棰滆壊銆傝繖縐嶆柟娉曟湁浠庡凡緇忔覆鏌撶殑鍦烘櫙涓濆噺鍘燴滃厜鐓у獎鍝嶇殑鏁堟灉銆傞槾褰卞尯鍩熶竴寰嬪彉鏆楋紝涓庤繘鍏ラ槾褰卞尯鐨勫厜綰挎暟鏃犲叧銆傚綋鏈夊涓厜婧愪駭鐢熺殑闃村獎鍖?br />閲嶅彔鏃訛紝闃村獎浼氶潪甯告殫錛岃瑙夋晥鏋滃緢宸?br /><font color="#0000ff">Additive Shadow Masking<br /></font>Modulative鐨勬柟娉曟槸閫氳繃褰卞搷闃村獎鍖哄疄鐜扮殑銆傝孉dditive鏂規硶鏄彧瀵瑰浜庡厜鐓т腑鐨勫尯鍩熸湁褰卞搷錛屽闃村獎鍖烘病<br />鏈夊獎鍝嶃傝繖鏍烽槾褰卞尯浼氬彈鍒板埆鐨勫厜婧愮殑褰卞搷鑰屽彉寰楃◢浜紝鑰岀浉浜掗噸鍙犵殑闃村獎鍖轟篃涓嶄細鏇存殫銆?br />ogre浼氭妸涓涓氶亾鍒嗕負涓変釜閫氶亾.<br />Ambietn,搴旂敤鐜鍏夊埌鍦烘櫙涓紝鍦ㄨ繖涓氶亾娌℃湁綰圭悊琚覆鏌撱?br />聽Diffuse and specular, 榪欎釜閫氶亾瀵規瘡涓伅閮芥覆鏌撲竴嬈★紝褰撳墠鐏駭鐢熺殑闃村獎鍖哄煙涓嶅彈褰卞搷銆傚叾浣欑殑鍖哄煙涓庡満鏅繘琛屾販鍚堛傚悓鏍蜂篃涓嶄嬌鐢ㄤ換浣曡創鑺辯汗鐞嗐?br />Decal銆傜汗鐞嗚搴旂敤鍒板墠闈㈢瘡縐殑棰滆壊涓娿?/p> <p> <br />聽</p> <img src ="http://m.shnenglu.com/yuanyajie/aggbug/20302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/yuanyajie/" target="_blank">娓呮簮娓告皯</a> 2007-03-21 17:07 <a href="http://m.shnenglu.com/yuanyajie/archive/2007/03/21/20302.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆奝ro Ogre 3D Programming銆嬭涔︾瑪璁?涔?絎崄绔?甯冨憡鏉夸笌綺掑瓙銆絎簩閮ㄥ垎 http://m.shnenglu.com/yuanyajie/archive/2007/03/20/20227.html娓呮簮娓告皯娓呮簮娓告皯Tue, 20 Mar 2007 10:04:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/20/20227.htmlhttp://m.shnenglu.com/yuanyajie/comments/20227.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/20/20227.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/20227.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/20227.htmlgameogre@gmail.com

綺掑瓙緋葷粺
ogre涓殑綺掑瓙緋葷粺鏃㈠彲鐢ㄨ剼鏈弿榪幫紝涔熷彲鐢ㄤ唬鐮佸畬鎴愩傜敤綺掑瓙鑴氭湰瀹氫箟鐨勭矑瀛愮郴緇熷疄闄呬笂鏄釜妯℃澘錛屽洜姝ゅ畠瀹氫箟鐨勭矑瀛愮郴緇熷彲鍦ㄧ▼搴忎腑鏂逛究鍦伴噸鐢ㄣ?br />綺掑瓙緋葷粺涓庡満鏅?/font>
綺掑瓙緋葷粺浼氳鎸傚埌鍦烘櫙緇撶偣涓婏紝鍥犳錛岀粨鐐圭殑騫崇Щ錛岀緝鏀撅紝鏃嬭漿浼氬叧鑱斿埌綺掑瓙緋葷粺錛屽獎鍝嶇矑瀛愬弽灝勭殑鍚戙?br />綺掑瓙浼氳鍙戝皠鍒頒笘鐣岀┖闂翠腑錛岃繖鎰忓懗鐫褰撳満鏅Щ鍔ㄦ椂錛屽畠浼氱壍榪炲埌鍙戝皠鍣紝浣嗗凡緇忓彂灝勫嚭鍘葷殑綺掑瓙涓嶅彈褰卞搷銆傚亣濡傞渶瑕佽繖浜涚矑瀛愬彈緇撶偣鐨勫獎鍝嶏紝鍙互鎶婄矑瀛愬彂灝勫埌鏈湴絀洪棿(local space)涓傜矑瀛愮郴緇熶笉鑳芥棤闄愬埗鐨勫彂灝勭矑瀛愶紝瀹冩湁涓涓檺棰濓紙quota)銆備竴鏃﹀埌杈鵑檺棰濓紝綺掑瓙緋葷粺涓嶄細鍐嶅彂灝勭矑瀛愶紝鐩村埌宸茬粡瀛樺湪鐨勭矑瀛愭秷浜°傜己鐪佺殑闄愰鏄?0銆?br />綺掑瓙緋葷粺綰︽潫(Bounds)
綺掑瓙緋葷粺鐨勫姩鎬佺壒寰佹剰鍛崇潃瀹冧滑鐨勭粦瀹氱洅蹇呴』瑙勫緥鍦拌閲嶆柊璁$畻銆傜己鐪佹儏鍐典笅錛宱gre浼氬湪10縐掍箣鍚庯紝鍋滄
鏇存柊緇戝畾鐩掋傚彲浠ョ敤ParticleSystem::setBoundsAutoUpdated(聽 bool聽 autoUpdate,聽 Real聽 stopIn = 0.0f )鏉ユ敼鍙樼己鐪佽涓恒俿topIn榪欎釜鍙傛暟鍛婅瘔ogre澶氶暱鏃墮棿鍚庡仠姝㈡洿鏂般傚亣濡傛湁涓矑瀛愮郴緇燂紝鍙互鐭ラ亾瀹冪殑澧為暱涓嶄細瓚呰繃鏌愪釜鑼冨洿錛屽彲浠ヤ簨鍏堢敤ParticleSystem::setBounds()璁劇疆緇戝畾鐩掑昂瀵搞傝繖鏍峰仛鏁堢巼寰堥珮錛屽鏋滄棤娉曚簨鍏堢‘瀹氱矑瀛愮郴緇熺殑澧為暱鎯呭喌錛屽彲鍏堢敤setBounds()璁懼畾涓涓垵濮嬪昂瀵革紝鑰岀敤setBoundsAutoUpdated()璁╁畠鍦ㄤ竴孌墊椂闂翠箣鍚庢洿鏂般?br />綺掑瓙緋葷粺鏇存柊
瀵逛簬綺掑瓙緋葷粺鐨勬洿鏂幫紝ogre閲囩敤閫傚害鍚彂寮忕殑絳栫暐銆備婦渚嬫潵璇達紝褰撶矑瀛愮郴緇熶笉鍦ㄨ閿ヤ綋涔嬪唴錛宱gre浠嶄細瀵圭矑瀛愮郴緇熻繘琛屾洿鏂幫紝榪欐槸鑰冭檻鍒頒笉涔呬箣鍚庯紝綺掑瓙緋葷粺鏈夊彲鑳戒細閲嶆柊榪涘叆瑙嗛敟浣撲箣鍐呫傝繖灝遍伩鍏嶄簡榪欑鎯呭喌涓嬬殑瑙嗚涓婄殑涓嶅拰璋愩備絾鏄嚭浜庢ц兘涓婄殑鑰冭檻錛屽綋綺掑瓙緋葷粺閫鍑鴻閿ヤ綋涓孌墊椂闂翠箣鍚庯紝綺掑瓙紜疄浼氬仠姝㈡洿鏂般傝繖鍙堜細紕板埌涓婇潰鐨勯棶棰橈細琚喕緇撶殑綺掑瓙緋葷粺紿佺劧閲嶆柊榪涘叆瑙嗛敟浣撶殑鎯呭喌銆俹gre鎻愪緵浜嗕竴涓墍璋撶殑
"fast-forward"鏈哄埗錛屽厑璁哥矑瀛愮郴緇熷湪琚喕緇撲箣鍚庯紝蹇熻秴瓚婂綋鍓嶇姸鎬併傝繖縐嶇壒鎬т篃鍙互鐢ㄥ湪鍒氬垱寤虹殑綺掑瓙緋葷粺錛屼嬌瀹冧滑鐘舵佹彁鍓嶄竴孌墊椂闂達紝浣跨敤鐨勬柟娉曟槸ParticleSystem::fastForward ();
綺掑瓙緋葷粺鎺掑簭
鍙互鎸囩ずogre鏍規嵁涓庣浉鏈轟箣闂寸殑璺濈錛屽綺掑瓙榪涜鎺掑簭銆傝櫧鐒惰繖浼氬獎鍝嶆ц兘錛屼絾鏈夋椂涓嶅緱涓嶇敤銆傚湪鐑熺殑
渚嬪瓙涓紝涓嶄嬌鐢ㄦ帓搴忕殑緇撴灉鏄紝浠庣儫鐨勯《閮ㄤ緷鐒舵竻鏅板湴鐪嬪埌鐏嫍錛岃屼嬌鐢ㄤ簡鎺掑簭涔嬪悗鐏嫍琚儫闆炬ā緋婃帀浜嗐傛樉鐒跺悗鑰呮洿鍔犵湡瀹炪?br />鍙戝皠鍣?br />鐐瑰彂灝勫櫒浠庣┖闂翠腑鍗曚竴鐐瑰彂灝勭矑瀛愩俠ox鍙戝皠鍣ㄥ彲浠ヤ粠瑙勫垯鍥涙柟浣撶殑浠諱綍浣嶇疆鍙戝皠綺掑瓙銆俢ylinder瀹氫箟浜嗕竴涓渾鏌變綋銆俥llipsoid瀹氫箟浜嗕竴涓き鐞冧綋銆俬ollow elipsoid鍙槸妞悆浣撶殑澶栧3銆俽ing鍙嚭騫抽潰鍦嗙幆鐨勮竟鍙戝皠銆傝鍙戝皠綺掑瓙鐨勯熷害錛屾柟鍚戜篃鍙互閰嶇疆銆傜矑瀛愮郴緇熶細琚寕鍒板満鏅粨鐐逛笂錛屽洜姝ゅ彂灝勫櫒涓庣埗緇撶偣鏈変竴涓浉瀵圭殑浣嶇疆銆傜矑瀛愰氬父涓嶄細娌跨洿綰垮彂灝勶紝瀹冧滑鍦ㄥ彂灝勫櫒鏂瑰悜鐨勪竴涓敟鍐呭彂灝勶紝鏈変竴涓猘ngle鍙傛暟鏉ュ畾涔夈傚亣濡傚笇鏈涙部鐩寸嚎鍙戝皠錛宎ngle搴旇璁句負0,鍋囧甯屾湜鍏ㄦ柟鍚戝彂灝勶紝angle璁句負180, 90琛ㄧず浼氬湪鏂瑰悜鍚戦噺鐨勫崐鐞冨唴闅忔満鍙戝皠銆?br />鍙戝皠鐜囩敤銆綺掑瓙鏁?縐掋琛ㄧず銆傚彂灝勫櫒鍙互鎸夋煇涓彂灝勭巼鍙戝皠錛屼篃鍙互浣跨敤涓涓寖鍥村唴鐨勯殢鏈哄箋傜矑瀛愬彲
浠ユ湁鍥哄畾鐨勭敓鍛芥湡錛屼篃鍙互浠庝竴涓寖鍥撮殢鏈烘寚瀹氥傞鑹蹭篃涓鏍鳳紝鍥哄畾鍊鹼紝闅忔満鍊奸兘鍙互銆備篃鍙互鍦ㄨ繍鍔ㄦ椂錛屼互鎻掍歡鐨勫艦寮忔彁渚涘畾鍒跺彂灝勫櫒錛岃繖鏄墿灞昽gre綺掑瓙緋葷粺鏈綆鍗曠殑鏂規硶銆?br />褰卞搷鍣?br />綺掑瓙涓鏃﹁鍙戝皠鍒頒笘鐣屼腑錛屽獎鍝嶅櫒鍙鐢ㄦ潵褰卞搷綺掑瓙鐨勮繍鍔ㄨ礬寰勪笌鐢熷懡鏈熴?br />LinearForce:鍔犱竴涓姏鍒扮矑瀛愪笂錛屽姏鏄竴涓悜閲忥紝鏈夋柟鍚戜笌澶у皬錛堟ā錛夈?br />ColourFader:鐢ㄤ簬鏀瑰彉綺掑瓙棰滆壊銆傝〃紺烘瘡縐掑噺灝戠殑鍊鹼紝鏄竴涓粷瀵瑰箋?br />ColorFader2:涓嶤olourFader鐩鎬技錛屼絾鏄矑瀛愮敓鍛藉埌鍒拌揪鍏剁敓鍛芥湡鐨勬煇涓樁孌墊椂錛屽彲浠ヨ漿鎹㈠埌鍙︿竴涓お鑹插嚱鏁般?br />ColourInterpolator:涓庝笂闈袱涓浉浼鹼紝浣嗘槸瀹冩渶澶氬彲浠ユ湁6涓樁孌碉紝鍒嗗埆瀵規瘡涓樁孌電殑鏃墮棿涓庨鑹茶繘琛屽畾涔夛紝鐒跺悗涓嶅悓闃舵涔嬮棿榪涜鎻掑鹼紝榪欎笌鍏抽敭甯у姩鐢葷殑鎬濇兂鏈夌偣鍍忋?br />Scaler:鐢ㄦ潵緙╂斁綺掑瓙灝哄錛屼互鏃墮棿涓哄嚱鏁版潵瀹氫箟涓涓緝鏀懼洜瀛愩?br />Rotator:閫氳繃涓緇勯殢鏈烘暟閲忥紝鎴栨槸闅忔満閫熺巼鏉ユ棆杞矑瀛愮殑綰圭悊錛岃繖浜涜瀹氫箟鍦ㄦ煇涓寖鍥翠箣鍐呫?br />colourImage:浠庡浘鍍忎腑鏀誨彇棰滆壊,鏂瑰悜浠庡乏鍒板彸錛岄傚悎涓緇寸汗鐞?銆?br />

]]>
銆奝ro Ogre 3D Programming銆嬭涔︾瑪璁?涔?絎崄绔?甯冨憡鏉夸笌綺掑瓙銆絎竴閮ㄥ垎 http://m.shnenglu.com/yuanyajie/archive/2007/03/20/20216.html娓呮簮娓告皯娓呮簮娓告皯Tue, 20 Mar 2007 07:31:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/20/20216.htmlhttp://m.shnenglu.com/yuanyajie/comments/20216.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/20/20216.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/20216.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/20216.html娓呮簮娓告皯銆gameogre@gmail.com

甯冨憡鏉?Billboard)
Ogre涓殑甯冨憡鏉跨畝鍗曠殑鏉ヨ灝辨槸鍦烘櫙涓殑涓涓洓杈瑰艦錛屼絾瀹冪殑鏈濆悜涓庣浉鏈烘湁鍏熾傞氬父甯冨憡鏉塊殢鐫鐩告満鐨勮鏂瑰悜鏃嬭漿浠ヤ究涓庣浉鏈虹殑瑙嗙嚎鏂瑰悜瀵歸綈銆傛妸甯冨憡鏉挎斁鍦ㄥ満鏅殑浠諱綍鍦版柟錛屽畠灝嗕細鏈濆悜鐩告満銆備負浜嗘晥鐜囪冭檻錛屽竷鍛婃澘涓庣浉鏈虹殑瑙嗙嚎鏂瑰悜瀵歸綈錛岃屼笉鏄笌浠庡竷鍛婃澘鍒扮浉鏈虹殑鍚戦噺瀵歸綈銆傚ぇ閮ㄥ垎鎯呭喌涓嬩袱鑰呮病鏈夋槑鏄劇殑鍖哄埆銆傚鏋滄兂浣跨敤鍚庝竴縐嶇殑瀵歸綈褰㈠紡錛屼篃鍙互鍔炲埌錛屼絾鍦ㄦц兘浼氭湁鎵闄嶄綆銆?br />甯冨憡鏉塊泦(Billboard Sets)
甯冨憡鏉夸笉鑳界嫭绔嬪瓨鍦紝浠栦滑涔熶笉鑳借嚜鎴戞覆鏌撱備粬浠繀欏誨睘浜庢煇涓竷鍛婃澘闆嗐傚竷鍛婃澘闆嗗彲璁や負鏄竴緇勫竷鍛婃澘
鐨勭鐞嗗櫒錛屽竷鍛婃澘闆嗗唴鐨勬墍鏈夊竷鍛婃澘鏈夌浉鍚岀殑灝哄錛屼嬌鐢ㄧ浉鍚岀殑鏉愯川銆傜浉鍚岀殑灝哄錛岀浉鍚岀殑綰圭悊浼氬甫鏉ヨ綆椾笌娓叉煋鏁堢巼鐨勬彁鍗囥傚彲浠ュ湪涓涓竷鍛婃澘闆嗗唴鍗曠嫭鏀瑰彉鏌愪釜鍏憡鏉跨殑灝哄錛屼絾榪欐牱鍋氫細瀵艱嚧鎬ц兘涓嬮檷ogre
璁や負涓涓竷鍛婃澘闆嗘槸涓涓搷浣滅殑鍗曚綅錛屽畠浠涔堥兘涓嶆覆鏌擄紝瑕佷箞鍏ㄩ儴榪涜娓叉煋錛屾崲鍙ヨ瘽璇達紝瀹冧滑浠ュ悓鏍風殑
鏂瑰紡榪涜鍓旈櫎澶勭悊錛屼篃鍙互瀵歸泦鍚堢殑涓綋榪涜鍗曠嫭鍓旈櫎錛屼絾鏈濂戒笉瑕佽繖涔堝仛錛屽悓鏍瘋繖涔熸槸鍑轟簬鏁堢巼鐨勮檻銆傚湪澶ц寖鍥寸殑搴旂敤甯冨憡鏉塊泦鏉ユā鎷熻崏鐨勪緥瀛愪腑錛屽氨鏈夊彲鑳藉嚭鐜板湪甯冨憡鏉塊泦鍐呯殑璁稿甯冨憡鏉胯惤鍦ㄨ瑙掍箣澶栫殑鎯呭喌錛屽湪榪欑鎯呭喌涓嬩篃璁鎬細鎯沖埌鐢ㄥ崟鐙墧闄ょ殑鏂瑰紡錛屼絾榪欐牱鍋氬悓鏍蜂笉鍙伩鍏嶅湴浼氬獎鍝嶆ц兘銆傛洿濂界殑鍋氭硶鏄嬌鐢ㄥ涓竷鍛婃澘闆嗚屼笉鏄湪涓涓法澶х殑甯冨憡鏉塊泦榪涜鍗曠嫭鍓旈櫎銆傚竷鍛婃澘闆嗗唴鐨勫竷鍛婃澘鏄浉瀵逛簬甯冨憡鏉塊泦attached鍒扮殑鍦烘櫙緇撶偣榪涜瀹氫綅鐨勩傛棦鐒訛紝甯冨憡鏉塊泦鍐呯殑甯冨憡鏉夸嬌鐢ㄧ浉鍚岀殑鏉愯川錛岄偅涔堝畠浠細鍦ㄥ悓涓batch榪涜娓叉煋銆?br />甯冨憡鏉垮垱寤?br />甯冨憡鏉垮彲浠ョ敤涓庢湰甯冨憡鏉塊泦鐨勪腑蹇冪殑鍋忕Щ涓庡昂瀵革紙瀹斤紝楂橈級鏉ユ弿榪般傚畠鐨勬柟鍚戞槸瀹冨埌鐩告満鍚戦噺鐨勫嚱鏁般傜己鐪侊紝鍒涘緩鐨勫竷鍛婃澘鏄墍璋撶殑point甯冨憡鏉褲傝繖縐嶅竷鍛婃澘鎬繪槸瀹屽叏鍦伴潰瀵圭浉鏈鴻屼笖鍨傜洿銆傚竷鍛婃澘鐨勫師鐐圭己鐪佷綅緗槸瀹冪殑涓績錛屽彲浠ュ湪涔濅釜瑙勮寖鐨勪綅緗寖鍥村唴鏀瑰彉鍘熺偣浣嶇疆銆傜浜岀綾誨瀷鐨勫竷鍛婃澘鏄痮riented甯冨憡鏉匡紝瀹冨嵆鍙互娌垮悇鑷殑Y杞存棆杞紝涔熷彲娌垮叡鍚岀殑杞達紙閫氬父鏄痀杞達級鏃嬭漿銆傜涓夌鏄痯erpendicular甯冨憡鏉匡紝瀹冧笌鏂瑰悜鍚戦噺錛堝竷鍛婃澘涓庣浉鏈轟箣闂寸殑鍚戦噺錛夊瀭鐩淬傝繖涓柟鍚戝悜閲忓彲浠ユ槸鍏變韓鐨勫悜閲忥紙閫氬父鏄痁杞達級錛屼篃鍙互鏄悇鑷殑Z杞淬傝繖縐嶇被鍨嬬殑甯冨憡鏉夸篃闇瑕佷竴涓笂鏂瑰悜杈呭姪瀹氫綅銆?br />point甯冨憡鏉跨浉瀵逛簬鍏朵粬綾誨瀷鐨勫竷鍛婃澘鏈変竴浜涗紭鐐廣備竴鑸紝ogre涓烘瘡涓竷鍛婃澘浜х敓涓涓猶uad(鍥涗釜欏剁偣錛屾瘡涓?br />欏剁偣閮芥湁浣嶇疆錛岀汗鐞嗗潗鏍囷級錛屽茍鎶婄敓鎴愮殑鍑犱綍浣撻佸叆GPU榪涜娓叉煋銆傚浜巔oint 甯冨憡鏉匡紝鍙互搴熼櫎鍏朵腑鐨勪笁涓紝璁〨PU鎸戦夛紝浠ュ強鍐沖畾濡備綍榪涜鍩轟簬鐐圭粯鍒剁汗鐞嗗睘鎬х殑娓叉煋銆傝繘琛岀‖浠剁偣娓叉煋鏈変竴浜涢檺鍒訛細鍙敮鎸?br />point甯冨憡鏉匡紝鍏朵腑鍙檺浜庝互涓績涓哄師鐐圭殑閭d竴綾匯傚昂瀵鎬笌澶栬鍦ㄦ潗璐ㄤ腑瀹氫箟錛屼笉鍦ㄥ竷鍛婃澘闆嗭紝灝哄鏄湁闄?br />鐨勶紝涓嶅彲鑳戒笌杞歡鍒涘緩鐨勪竴鏍峰ぇ銆備笉鏀寔鍗曠嫭鐨勫竷鍛婃澘鏃嬭漿涓庢敼鍙樺ぇ灝忥紝浣嗗彲浠ュ綰圭悊鍗曞厓鏃嬭漿銆?br />甯冨憡鏉挎睜
鍒涘緩甯冨憡鏉挎椂闇瑕佸憡璇夊竷鍛婃澘闆嗕腑甯冨憡鏉跨殑鏁伴噺銆傚竷鍛婃澘琚垎鍒斁鍦╝ctive涓巉ree鍒楄〃涓紝榪欎嬌寰楀畾浣嶉潪甯稿揩銆傚綋鍒涘緩鐨勫竷鍛婃澘鐨勬暟閲忚秴榪囦簡甯冨憡鏉挎睜鐨勫昂瀵革紝姹犵殑灝哄浼氬鍔犱竴鍊嶃傛渶濂戒簨鍏堢‘瀹氭睜鐨勫ぇ灝忥紝閬垮厤鍦ㄤ嬌鐢ㄤ腑浣挎睜鐨勫ぇ灝忎笉鍚堢悊鍦板闀褲?br />甯冨憡鏉跨汗鐞嗗潗鏍?/font>
鏀寔闈炲叏鑼冨洿鐨勭汗鐞嗗潗鏍囧垎閰嶃備婦涓緥瀛愶紝鍋囧浣犳湁涓汗鐞嗭紝瀹冨寘鍚嚑涓瓙綰圭悊銆傛瘡涓汗鐞嗛兘鍖呭惈涓涓?br />鑻辨枃瀛楁瘝銆傝繖鏃訛紝浣犳兂鍒涘緩鍑犱釜鍏憡鏉匡紝姣忎釜鍏憡鏉夸笂鏄劇ず涓嶅悓鐨勫瓧姣嶏紝褰撶劧瀹冧滑閮芥潵鑷悓涓涓汗鐞嗐?br />鍙互鍏堝垱寤轟竴涓寘鍚汗鐞嗗潗鏍囩殑鏁扮粍錛岀劧鍚庢妸榪欎釜鏁扮粍鎻愪緵緇欏竷鍛婃澘闆嗐傚綋鍒╃敤甯冨憡鏉塊泦鍒涘緩甯冨憡鏉挎椂錛?br />鍙互緇欒繖涓竷鍛婃澘涓涓瓨鏀劇汗鐞嗗潗鏍囩殑鏁扮粍鐨勭儲寮曘傚浘鐗囦笌浠g爜濡備笅錛?br />
// create a new billboard set with a pool of 4 billboards
BillboardSet* bbset = sceneMgr->createBillboardSet("BBSet", 4);
// create a texture coordinate array to address the texture
FloatRect texCoordArray[] = {
FloatRect(0.0, 0.0, 0.5, 0.5), // address the "A"
FloatRect(0.5, 0.0, 1.0, 0.5), // address the "B"
FloatRect(0.0, 0.5, 0.5, 1.0), // address the "C"
FloatRect(0.5, 0.5, 1.0, 1.0), // address the "D"
};
// provide this array to the billboard set
bbset->setTextureCoords(texCoordArray, 4);
// now create a billboard to display the "D"; this
// is the fourth entry in the array, index=3
Billboard* bb = bbset->createBillboard(Vector3(0, 0, 0));
bb->setTexcoordIndex(3);
涔熷彲浠ョ洿鎺ュ綰圭悊鍧愭爣榪涜璧嬪?br />FloatRect coords(0.5, 0.5, 1.0, 1.0);
bb->setTexcoordRect(coords);
甯冨憡鏉夸嬌鐢ㄧ殑鏉愯川鑴氭湰涓庡彲浠ュ寘鎷甯告潗璐ㄨ剼鏈腑鐨勬墍鏈変笢瑗匡紝鑰屼笖鍙互浣跨敤甯冨憡鏉夸笌鐐圭汗鐞嗙壒鏈夌殑涓浜?br />鎸囦護涓庡弬鏁般?br />甯冨憡鏉塊摼涓庝笣甯﹁窡韙紙Ribbon Trails錛?br />甯冨憡鏉塊摼涓緇勫墠鍚庣浉鑱旂粨鐨勪竴緇勫竷鍛婃澘錛堝彲浠ヨ仈鎯斥滆侀拱鎶撳皬楦♀濈殑娓告垙涓皬楦′滑鐨勭粍緇囩粨鏋勶級銆俹gre
鎻愪緵浜嗕竴涓猺ibbon-trail寮曠敤綾伙紝瀹冧嬌鐢ㄤ簡甯冨憡鏉塊摼錛屽彲浠ヨ拷閫愬満鏅腑鐨勭粨鐐癸紝騫剁暀涓嬩竴鏉″熬宸淬傚竷鍛婃澘閾懼彲浠ュ垎澶氫釜鑺傦紝鍥犳鍙互寰堝ソ鏉ユā鎷熺伅鐨勬晥鏋溿銆傚竷鍛婃澘閾劇殑緙虹偣鏄繀欏繪墜鍔ㄦ洿鏂般傚彲浠ヤ負甯冨憡鏉塊摼鐨勬瘡涓妭鐨勫熬閮ㄦ坊鍔犻」錛屾瘡涓妭鏈夋渶澶х殑闀垮害錛屽亣濡傝秴榪囦簡閭d釜闀垮害錛屽熬閮ㄩ」琚Щ闄わ紝閲嶆柊鍋氫負鑺傜殑澶淬?br />ribbon trail鏈夌被浼肩殑琛屼負錛屼粠灝鵑儴縐婚櫎欏逛綔涓哄ご鏉ュ闀匡紝浠庡ご鍒板熬棰滆壊閫愭笎瑜寲銆傚浘鐗囦笌浠g爜濡備笅錛?br />

void setupTrailLights(void)
{
NameValuePairList pairList;
pairList["numberOfChains"] = "2";
pairList["maxElements"] = "80";
RibbonTrail* trail = static_cast<RibbonTrail*>(
mSceneMgr->createMovableObject("1", "RibbonTrail", &pairList));
trail->setMaterialName("Examples/LightRibbonTrail");
trail->setTrailLength(400);
mSceneMgr->getRootSceneNode()->
createChildSceneNode()->attachObject(trail);
// Create nodes for trail to follow
SceneNode* animNode = mSceneMgr->getRootSceneNode()->
createChildSceneNode();
animNode->setPosition(50,30,0);
Animation* anim = mSceneMgr->createAnimation("an1", 14);
anim->setInterpolationMode(Animation::IM_SPLINE);
NodeAnimationTrack* track = anim->createNodeTrack(1, animNode);
TransformKeyFrame* kf = track->createNodeKeyFrame(0);
kf->setTranslate(Vector3(50,30,0));
kf = track->createNodeKeyFrame(2);
kf->setTranslate(Vector3(100, -30, 0));
kf = track->createNodeKeyFrame(4);
kf->setTranslate(Vector3(120, -100, 150));
kf = track->createNodeKeyFrame(6);
kf->setTranslate(Vector3(30, -100, 50));
kf = track->createNodeKeyFrame(8);
kf->setTranslate(Vector3(-50, 30, -50));
kf = track->createNodeKeyFrame(10);
kf->setTranslate(Vector3(-150, -20, -100));
kf = track->createNodeKeyFrame(12);
kf->setTranslate(Vector3(-50, -30, 0));
kf = track->createNodeKeyFrame(14);
kf->setTranslate(Vector3(50,30,0));
AnimationState* animState = mSceneMgr->createAnimationState("an1");
animState->setEnabled(true);
mAnimStateList.push_back(animState);
trail->setInitialColour(0, 1.0, 0.8, 0);
trail->setColourChange(0, 0.5, 0.5, 0.5, 0.5);
trail->setInitialWidth(0, 5);
trail->addNode(animNode);
// Add light
Light* l2 = mSceneMgr->createLight("l2");
l2->setDiffuseColour(trail->getInitialColour(0));
animNode->attachObject(l2);
// Add billboard
BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
bbs->createBillboard(Vector3::ZERO, trail->getInitialColour(0));
bbs->setMaterialName("Examples/Flare");
animNode->attachObject(bbs);

}
棣栧厛錛孯ibbonTrail鍒涘緩浜嗕袱涓摼錛屾瘡涓渶澶氬寘鎷?0涓厓绱狅紝灝懼反闀?00涓笘鐣屽崟浣嶃傚垱寤轟簡涓涓粨鐐筧nimNoade銆備負榪欎釜緇撶偣鍒涘緩浜嗕竴涓姩鐢?浣垮緱榪欎釜緇撶偣鍙互鏍規嵁鍏抽敭甯х殑璁捐鍦ㄥ満鏅腑涓嶆柇鍙樺寲浣嶇疆銆傚茍鎶婁竴涓猂ibbonTrail涓庤繖涓粨鐐硅仈緇撹搗鏉ワ紝浜庢槸RibbonTrail鍙笌animNode涓璧瘋繍鍔ㄣ傚張鍒涘緩浜嗕竴涓伅錛屽茍鑱旂粨鍒拌繖涓粨鐐癸紝鐏殢緇撶偣涔熶竴璧瘋繍鍔紝浜庢槸鎬墿澶翠細鏈夋槑鏆楀彉鍖栥傛渶鍚庣敤涓涓竷鍛婃澘鏉ュ艦璞¤〃紺哄垰鍒涘緩鐨勭伅錛屽洜涓虹伅鍦ㄥ満鏅腑鏄笉鍙鐨勩傚洜涓虹伅琚寕鍒癮nimNode緇撶偣涓婏紝鎵浠ュ竷鍛婃澘bbs涔熸寕鍒板悓鏍風殑緇撶偣涓娿傚綋鐒跺埆蹇樹簡浣跨敤浜嗗姩鐢葷姸鎬佹潵鎺ㄨ繘鍔ㄧ敾銆?/p>

]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎節绔?鍔ㄧ敾 絎竴閮ㄥ垎 http://m.shnenglu.com/yuanyajie/archive/2007/03/16/19974.html娓呮簮娓告皯娓呮簮娓告皯Fri, 16 Mar 2007 09:33:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/16/19974.htmlhttp://m.shnenglu.com/yuanyajie/comments/19974.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/16/19974.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19974.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19974.htmlgameogre@gmail.com
姒傝堪
鍔ㄧ敾錛屾葷殑鏉ヨ錛屽湪璁$畻鏈哄彂灞曠殑鍚勪釜闃舵錛屼笌鑹烘湳瀹朵滑蹇熸祻瑙堜竴緋誨垪褰兼紼嶅井涓嶅悓鐨勫浘鐗囦粠鑰屼駭鐢熻繍鍔ㄧ殑騫昏鐨勮涓烘病鏈変粈涔堜笉鍚屻?872騫達紝Eadweard Muybridge緇欏璺戠殑椹媿浜嗕竴緇勮繛緇殑鐓х墖錛屼粠鑰岃瘉鏄庝簡椹湪濂旇窇鏃朵細鍥涜剼鍚屾椂紱誨湴銆傝繖鏄竴緋誨垪鐨勫浘鐗囨祦鍙互浜х敓榪愬姩騫昏鐨勬渶鏃╃殑鏂囨。鍖栫殑璁板綍銆?br />鐜板湪鍦∣gre涓紝涓嶅繀灝忛澶т綔鍦拌閰嶄竴浜涜澶囨潵鍒涢犺繖縐嶈繍鍔ㄥ夠瑙変簡銆傚彧闇瑕佹瘡甯у皯閲忓湴縐誨姩鎴栧彉褰㈠満鏅腑鐨勬暟鎹紝騫昏灝變駭鐢熶簡銆傚畠紜疄鍙槸騫昏銆俹gre涓嶈窡韙璞$殑閫熷害錛屽姞閫熷害錛屾垨鏄鑹茬殑鑳寵唺鏄湪鎶搗
鎴栨槸鍙夌潃鑵般俹gre閫愬撫鏉ュ鐞嗕綅緗笌鏈濆悜銆俹gre鑳戒負浣犲仛鐨勬槸甯綘閲嶆柊鎾斁榪欎簺鍔ㄧ敾銆傝繖浜涘姩鐢誨彲浠ユ槸鐢ㄧ綰垮伐鍏峰埗浣滅殑錛屾垨鏄繍琛屾椂浜х敓鐨勶紝鎴栦粎鏄負浜嗗疄鐜扮浉鏈烘極娓歌屽~鍏呬簡涓緋誨垪浣嶇疆鐨勬洸綰褲?br />鍦烘櫙鐨勬瘡甯ч兘浼氳閲嶇敾錛屼袱甯т箣闂存病鏈変粈涔堜細琚繚瀛樹笅鏉ャ俹gre涓殑鍔ㄧ敾浠呬粎鏄牴鎹叧浜庝換鎰忓彉閲忥紙閫氬父
鏄椂闂達級鐨勫嚱鏁幫紝鏉ュ畾浣嶄笌瀹氬悜瑙掕壊銆傛瘡涓甯э紝鍦╫gre鍔ㄧ敾緋葷粺鐨勬帶鍒朵箣涓嬶紝鍦烘櫙涓殑瀹炰綋涓庡姩鐢昏紼嶇◢
縐誨姩鎴栦駭鐢熷彉褰紝鐒跺悗鍦烘櫙琚噸鐢匯傝繖縐嶄駭鐢熷姩鐢葷殑鏂瑰紡錛屼笌鍗庣撼鍏勫紵鐨勫姩鐢誨洟闃熷仛鍗¢氬姩鐢繪病浠涔堝悓銆?br />涓琛岀敾24涓崱閫氬厰錛屽郊姝ょ◢寰笉鍚岋紝鐒跺悗鍦?縐掗挓鐨勬椂闂磋繛緇挱鏀俱?br />Ogre涓殑鍔ㄧ敾綾誨瀷
鏍規嵁鎺у埗鐗╀綋鐨勪笉鍚屾柟寮忓垎涓轟袱縐嶏細鍩轟簬鍏抽敭甯х殑鍔ㄧ敾錛屾帶鍒跺櫒銆?br />鎶借薄鍦版潵鐪嬶紝ogre涓殑鍔ㄧ敾鏄浉鍏硉racks鐨勯泦鍚堛倀rack鏄綔涓烘椂闂村嚱鏁板瓨鍌ㄧ殑涓緇勬暟鎹箋備竴瀵光渢rack鍊尖濅笌"鏃墮棿鐐光滐紝鏋勬垚浜嗗叧閿撫(keyframe)錛屾洿濂界殑涓縐嶈娉曟槸錛屽湪鏃墮棿杞寸嚎涓婂瀵硅薄鍏ㄩ儴鎴栭儴鍒嗙殑浣嶇疆錛屾湞鍚戯紝緙╂斁錛岃繘琛岄噰鏍楓傛牴鎹姩鐢葷殑綾誨瀷錛宱gre鏀寔濂藉嚑縐嶅叧閿撫銆?鍏抽敭甯р濊繖涓悕縐版潵婧愪簬鎵嬪伐鍒朵綔鍔ㄧ敾鐨勬椂浠o紙鍍忎笂闈㈡彁鍒扮殑鍒朵綔鍗¢氬厰鍔ㄧ敾錛夛紝棣栧腑鑹烘湳瀹朵細緇欎粬鐨勪笅綰ф彁渚涗竴緇勫叧閿殑甯с傝繖浜涘撫緇欏嚭浜嗗満鏅腑瑙掕壊鐨勪綅緗紝鐒跺悗涓嬬駭鑹烘湳瀹朵滑鏍規嵁榪欎簺鐢誨嚭甯т箣闂磋鑹茬殑浣嶇疆銆傚湪ogre涓紝浣犲氨鏄甯壓鏈錛岄渶瑕佹彁渚涜繖浜涘叧閿撫錛宱gre鏄綘鐨勪笅綰э紝瀹冨府浣犲畬鎴愬撫涔嬮棿鐨勮繃娓°?br />ogre涓敮鎸佺殑track鏈変笅闈㈣繖鍑犵綾誨瀷錛堜竴涓猼rack涓殑鎵鏈夊叧閿撫蹇呴』鏈変竴鑷寸殑綾誨瀷錛?
NumericAnimaitonTrack(NumericKeyFrame):
鍏抽敭甯у寘鍚竴涓狝nyNumeric綾誨瀷鐨勬爣閲忓箋侫ny鏄痮gre涓畾涔夌殑緇撴瀯錛屽拰COM涓殑variant銆綾誨瀷涓鏍鳳紝鍏佽鏁版嵁綾誨瀷鐨勫鎬佸寲銆侫nyNumeric闄愬畾浜嗗彲鑳界殑鏁版嵁綾誨瀷鍙兘鏄暟瀛楃殑(瀹炴暟錛屾暣鏁?銆?br />NodeAnimationTrack(TransformKeyFrame):
鍏抽敭甯у寘鍚袱涓?緇村悜閲忥紝涓涓洓鍏冩暟錛屽垎鍒〃紺虹粨鐐圭殑浣嶇疆錛岀緝鏀句笌鏈濆悜銆?br />VertexAnimationTrack(VertexMorphKeyFrame,VertexPoseKeyFrame):
鍏抽敭甯у寘鍚垨鏄紩鐢ㄥ湪涓涓壒瀹氭椂闂寸偣涓婏紙鍦╬ose 鍔ㄧ敾涓級欏剁偣浣嶇疆鍜屾販鍚堟潈閲?VertexPoseKeyFrame)銆?br />鍔ㄧ敾鐘舵?br />紼嬪簭涓巓gre涓殑鍔ㄧ敾涓昏鐨勪氦浜掓槸閫氳繃鍔ㄧ敾鐘舵佹潵瀹屾垚鐨?animation state)銆傚湪寤烘ā宸ュ叿涓紝鍙互涓洪楠兼垨欏剁偣緗戞牸娌挎椂闂磋醬綰垮畾涔夊涓姩鐢伙紝瀵煎嚭鏃舵瘡涓姩鐢婚兘鍙互瀹氫箟涓涓悕瀛楋紝閫氳繃榪欎釜鍚嶅瓧鏉ュ畾浣岴ntity涓悓鐨勫姩鐢匯傞氳繃鍔ㄧ敾鐘舵佸彲浠ヨ闂姩鐢葷殑璁稿灞炴э細闀垮害錛屽綋鍓嶄綅緗?鍔ㄧ敾鍚嶏紝鏄惁寰幆錛屾湁鍚︽湁鏁堬紝鏉冮噸錛堢敤浜庢販鍚堝姩鐢伙級銆傛潈閲嶆牴鎹販鍚堝姩鐢葷殑綾誨瀷榪涜涓嶅悓鐨勫鐞嗐?br />娣峰悎鏉冨鉤鍧囷細
鍛婅瘔ogre鍋氳繖縐嶆販鍚堟椂錛屾墍鏈夋潈閲嶄箣鍜屼負1銆傚鏋滀笉鏄?錛宱gre浼氳繘琛屾瑙勫寲澶勭悊錛屼嬌寰楀畠浠殑鎬誨拰涓?銆傝繖縐嶆柟寮忓彧瀵歸楠煎姩鐢繪湁鏁堬紝瀹冧篃鏄粯璁ょ殑娣峰悎鏂瑰紡銆?br />娣峰悎鏉冪瘡縐細
ogre鍙槸綆鍗曞湴鎶婃墍鏈夊紩鐢ㄦ潈閲嶇殑鏁堟灉榪涜绱姞錛屼笉浼氬啀騫寵 銆傝繖縐嶆柟寮忓彧瀵歸《鐐瑰姩鐢繪湁鏁堬紙pose, morph),鐢ㄥ埌楠ㄩ鍔ㄧ敾鏃朵篃鍙互銆?br />鍔ㄧ敾鐘舵佷篃鏄篃緇欏姩鐢燴滃姞鏃墮棿鈥濇帹鍔ㄥ畠鍚戝墠鍙樺寲鐨勫湴鏂廣傚熀鏈笂鎬繪槸緇欎竴涓椂闂村閲忥紝鎰忓懗鐫浠庝笂嬈¤皟鐢ㄥ埌鐜板湪澧為暱浜嗙殑鏃墮棿銆傛湰璐ㄤ笂錛屽姞涓涓椂闂村閲忎笌鐩存帴璁懼畾鏃墮棿浣嶇疆娌℃湁浠涔堜笉鍚屻?br />楠ㄩ鍔ㄧ敾
楠ㄩ鍔ㄧ敾鏄渶甯哥敤鐨勫姩鐢葷被鍨嬨傜綉鏍?mesh)涓殑欏剁偣琚粦瀹氬埌楠ㄩ涓婏紝濡傚悓鎴戜滑韜綋鐨勮倢鑲夌粦瀹氬埌楠ㄤ笂銆?br />涓嶅悓鐨勬槸錛岃綆楁満鍔ㄧ敾涓殑鈥滈澶粹濅笉鏄湡瀹炲瓨鍦ㄧ殑銆傚畠浠敤涓浜涳紙鏃犲搴斿疄浣擄級鍙樻崲鏉ヨ〃紺洪澶寸殑浣嶇疆錛屾湞鍚戜笌緙╂斁錛岀粡甯告槸鐢ㄧ煩闃墊潵琛ㄧず銆傞楠煎姩鐢葷殑鍏抽敭甯э紝浠呮槸鐩稿浜庨楠兼仮澶嶄綅緗殑鍋忕Щ銆傚畠浠緇勫悎璧鋒潵褰㈡垚浜嗘部鐫鏃墮棿杞寸嚎涓婃煇涓緇欏畾鐐圭殑楠ㄩ銆?br />Ogre涓殑楠ㄩ鏄湁灞傛鍏崇郴鐨勶紝濡傝剼楠ㄤ笌鑳鐩歌繛錛岃儷楠ㄥ張涓庤啙鐩栭鐩歌繛銆傚湪榪欑灞傛鍏崇郴涓嬶紝闄や簡root澶栵紝姣忎釜楠ㄥご閮芥湁鐖朵翰銆備絾騫朵笉闄愪簬鍙湁涓涓猺oot,榪欑灞傛鍏崇郴浠呬粎鏄敤鏉ヤ紶閫掕漿鎹?鑷笂鑰屼笅)銆傛敼鍙樹竴鏍歸澶翠細褰卞搷瀹冩墍鏈夊瀛愮殑浣嶇疆銆傚弽鍚戠殑榪愬姩ogre涓嶆敮鎸侊細褰撲竴涓澶磋繍鍔ㄦ椂錛屽畠涓嶄細褰卞搷鐖惰緢銆?br />欏剁偣緇戝畾
欏剁偣琚粦瀹氬埌楠ㄩ鏃朵細鎸囧畾涓涓潈閲嶏紝鏉冮噸璇存槑浜嗛澶磋繍鍔ㄥ欏剁偣鐨勫獎鍝嶆晥鏋溿傚吀鍨嬬殑鏄妸涓涓《鐐圭粦
瀹氬埌澶氫釜楠ㄥご錛岃祴浜庝笉鍚岀殑鏉冮噸銆俹gre浠呮敮鎸佹瘡欏剁偣鍥涗釜楠ㄥご錛屼絾姣忎釜楠ㄥご鍙互涓庝換鎰忓涓《鐐瑰叧鑱斻?br />欏剁偣鍔ㄧ敾
涓庨氳繃璁$畻鍔ㄧ敾楠ㄩ錛屽啀鏍規嵁楠ㄩ浣嶇疆璁$畻欏剁偣浣嶇疆鐨勫姩鐢繪柟寮忎笉鍚屻傞《鐐瑰姩鐢葷洿鎺ュ欏剁偣榪涜鍔ㄧ敾鎿嶄綔銆傚畠鏄祫婧愬瘑闆嗗瀷鐨勮В鍐蟲柟妗堬紝瀵逛簬姣忎釜鍔ㄧ敾浣嶇疆閮借杞佸畬鏁寸殑欏剁偣鏁版嵁鐨勬嫹璐濄傛湁鏃惰繖縐嶆柟寮忔槸緇翠竴鐨勫姙娉曪紝渚嬪瀹炵幇閫肩湡鐨勯潰閮ㄨ〃鎯呭姩鐢匯?br />欏剁偣鍔ㄧ敾鍦ㄥ姩鐢籺rack榪欎釜灞傛涓婅綆$悊銆佹搷綰點傝繖鎰忓懗鐫鎴戜滑鍙互瀵硅鑹茬殑澶達紝鑴擱儴鍒嗕嬌鐢ㄥ鏉傜殑pose鍔ㄧ敾錛岃岃鑹茬殑鍓╀綑閮ㄥ垎浣跨敤鐩稿綆鍗曠殑morph鍔ㄧ敾銆備絾鏄笉鑳藉鐩稿悓鐨勯《鐐逛嬌鐢ㄤ笉鍚岀殑鍔ㄧ敾綾誨瀷銆傞《鐐瑰姩鐢誨湪寮曠敤涓緇勯《鐐歸泦鏃訛紝瑕佷箞鍏ㄩ儴寮曠敤錛岃涔堜竴涓篃涓嶅紩鐢ㄣ傝繖鎰忓懗鐫錛屽湪緗戞牸綰у埆涓婃潵鐪嬶紝鎵鏈夌殑鍏變韓鍑犱綍(shared geometry)鏋勬垚浜嗛《鐐瑰姩鐢葷殑欏剁偣鏁版嵁銆傚湪瀛愮綉鏍肩駭鍒笂鏉ョ湅錛屾墍鏈夊瓙緗戞牸鐨勯《鐐規瀯鎴愪簡欏剁偣鍔ㄧ敾鐨勯《鐐規暟鎹備婦渚嬫潵璁詫紝涓涓瓙緗戞牸鐨勬煇浜涢《鐐瑰弬涓巑orph鍔ㄧ敾錛岃屽墿浣欓《鐐瑰弬涓巔ose鍔ㄧ敾錛岃繖縐嶆儏鍐墊槸涓嶅厑璁哥殑銆?br />鍙樺艦鍔ㄧ敾(Morph Animation)
鍙樺艦鍔ㄧ敾鏄袱縐嶉《鐐瑰姩鐢繪妧鏈腑鏈綆鍗曟渶鐩磋鐨勪竴縐嶃傚疄闄呯殑欏剁偣浣嶇疆鍋氫負"蹇収"琚繚瀛樸傝繖涓庡墠闈㈣鍒?br />鐨勫崱閫氬厰鍔ㄧ敾鐨勮繃紼嬫槸涓鏍風殑銆傝繖縐嶆柟娉曟瘮杈冩秷鑰楄祫婧愶紝浣嗘槸璁$畻鏁堢巼鏈楂樸傚叧閿箣闂存暟鎹氳繃鎻掑煎緱銆?br />涓昏鐨勭己鐐規槸涓嶈兘娣峰悎澶氫釜鍙樺艦鍔ㄧ敾錛屽洜涓轟粬浠繚瀛樼殑鏄《鐐圭殑緇濆浣嶇疆銆傚綋鐒訛紝濡傛灉鏈変袱涓姩鐢伙紝瀹冧滑
褰卞搷鐨勯《鐐規病鏈変氦闆嗭紝閭d箞紜疄鍙互瀵硅繖涓や釜鍔ㄧ敾榪涜娣峰悎銆?br />濮垮娍鍔ㄧ敾(Pose Animation)
妯″瀷鐨勫悇縐嶅Э鍔胯淇濆瓨鍦ㄥ姩鐢籺racks涓傝繖浜涘Э鍔垮彲浠ヨ娣峰悎鏉ュ垱寤烘洿澶嶆潅鐨勫姩鐢匯傞《鐐圭殑浣嶇疆鏄浉瀵逛簬
澶嶅師浣嶇疆鐨勫亸縐婚噺錛岃屼笉鏄《鐐圭殑緇濆浣嶇疆銆傝屼笖鍙湁鍙樺寲鐨勬暟鎹墠琚繚瀛樸傚洜姝わ紝瀹冧笉浠呮洿鐏墊椿錛岃屼笖
瀵硅祫婧愪嬌鐢ㄤ篃鏇撮珮鏁堛?br />pose鍔ㄧ敾鐨勫叧閿撫寮曠敤涓涓垨澶氫釜pose tracks錛屾瘡涓紩鐢ㄥ濮垮娍鏈変竴涓獎鍝嶆潈閲嶃傛潈閲嶅喅瀹氫簡褰損ose琚販鍚堟椂姣忎釜欏剁偣鍋忕Щ瀵規渶緇堢殑欏剁偣浣嶇疆浜х敓澶氬ぇ鐨勫獎鍝嶃備笉蹇呭湪姣忎竴甯ч兘寮曠敤涓涓猵ose銆傚湪瀹炶返涓紝pose娣峰悎浼氱鍒頒竴浜涢檺鍒訛細姣忎釜闄勫姞鐨刾ose闇瑕佹洿澶氱殑澶勭悊鏃墮棿銆?br />娣峰悎鍔ㄧ敾
涓嶈兘娣峰悎pose涓巑orph鍔ㄧ敾鍒頒竴璧鳳紝涔熶笉鑳芥販鍚堝涓猰orph鍔ㄧ敾銆?br />褰撴販鍚堥楠煎姩鐢諱笌欏剁偣鍔ㄧ敾鏃訛紝ogre灝嗛鍏堣綆?娣峰悎欏剁偣鍔ㄧ敾錛岀劧鍚庡簲鐢ㄩ楠煎彉褰㈠埌娣峰悎欏剁偣涓娿?br />瑙勮寖鐨刾ose涓庨楠煎姩鐢繪販鍚堢殑紼嬪簭,浼氭販鍚堝叏韜綋鐨勯楠煎姩鐢諱笌澶嶆潅鐨勯潰閮ㄨ〃鎯呫備緥濡傦紝鍙互瀵硅鑹茬殑闈㈤儴欏剁偣浣跨敤pose鍔ㄧ敾錛岃岃鑹茬殑鍓╀綑閮ㄥ垎(鍖呮嫭澶?浣跨敤鐩稿綆鍗曠殑楠ㄩ鍔ㄧ敾銆?br />娣峰悎涓や釜楠ㄩ鍔ㄧ敾瀵逛簬鍔ㄧ敾涔嬮棿鐨勫垏鎹㈡槸鏈鏈夌敤鐨勩備緥濡傝鑹插彲鑳藉湪寰幆鍦版墽琛?璺戞"榪欎釜鍔ㄧ敾錛屼竴浼氬効
浠栧彲鑳借鍋滀笅鏉ワ紙鎵ц"idle"鍔ㄧ敾錛夛紝閭d箞榪欐椂闇瑕佸涓や釜鍔ㄧ敾榪涜娣峰悎銆?br />Morph涓庨楠煎姩鐢葷殑娣峰悎錛屽浜庣粰楠ㄩ鍔ㄧ敾鐨勮鑹插鍔?澶栫毊"緗戞牸鍙樺艦鏄緢鍚堥傜殑銆備緥濡?灝嗕竴涓。鏈嶅姩鐢諱笌瑙掕壊瀹為檯鐨勯楠艱繍鍔ㄥ姩鐢繪販鍚堬紝榪欐牱灝遍伩鍏嶄簡瀵硅。鏈嶈繘琛屽疄鏃舵ā鎷熺殑楂橀浠d環銆?br />紜歡vs杞歡
搴旂敤紜歡鍔犻熸椂鏈搴旇璁頒綇鐨勬槸錛氱‖浠跺姩鐢葷綉鏍兼暟鎹笉鑳借CPU浣跨敤銆傝繖鐩稿綋閲嶈錛佸亣濡備綘渚濊禆緗戞牸鏁版嵁
榪涜鍒殑璁$畻(浣撶Н闃村獎璁$畻錛岀墿鐞嗘ā鎷燂級錛屼竴鏃﹂《鐐瑰彉褰㈣綆楄縐誨埌GPU涓紝欏剁偣灝辨案榪滄秷澶變簡錛屼笉鍦ㄤ唬鐮佷腑浣跨敤浜嗭紝鍋囧闇瑕佸彉褰箣鍚庣殑欏剁偣鏁版嵁錛岄偅涔堜綘榪樺緱鐢–PU榪涜涓嶨PU鍚屾牱鐨勮綆楋紒榪欑‘瀹炰篃鍙互鍋氬埌,鍛婅瘔ogre鍋氬惂錛氥Entity::addSoftwareAnimationRequest()銆?br />紜歡鍔犻熺殑楠ㄩ鍔ㄧ敾涓庨《鐐瑰姩鐢繪販鍚堬紝浼氬湪欏剁偣紼嬪簭涓墽琛屾販鍚堛傚亣濡備綘鍒氭墠榪樻病鏈夋敞鎰忓埌涓婇潰鏇劇粡鎻愬埌
榪囩殑鎵ц欏哄簭鐨勮瘽錛岀幇鍦ㄥ張鏈夋満浼氳浣犳剰璇嗗埌榪欑偣錛氬厛欏剁偣錛岀劧鍚庨楠箋傝繖鍚屾牱涔熸剰鍛崇潃錛屾墍鏈夌殑鍔ㄧ敾鎶鏈兘搴旇鏄熀浜庣‖浠跺姞閫熺殑錛屼笉鑳借紜歡鍔犻熺殑楠ㄩ鍔ㄧ敾涓庡熀浜庤蔣浠剁殑欏剁偣鍔ㄧ敾娣峰悎銆?br />浣跨敤GPU鍔犻?font color="#ff1493">楠ㄩ鍔ㄧ敾
鏃訛紝搴旇鑰冭檻鍒幫細楠ㄩ鍔ㄧ敾綆楁硶鐨勬湰璐ㄤ笂瑕佹眰錛屽湪璁$畻姣忎釜欏剁偣鏃訛紝楠ㄦ灦涓墍鏈夐澶寸殑鏁版嵁蹇呴』閮借鎻愪緵銆傝佹棫鐨勭‖浠朵粎浠呮敮鎸?4銆bones鎴栨洿灝戠殑skinning閫氶亾銆傝繖鏃跺簲鎶妋esh鍒嗕負鍑犳錛屽湪澶氫釜閫氶亾涓璼kin瀹冧滑銆俹gre鍙細鎶妔ubmesh寮曠敤鍒扮殑bones鍙戦佸埌skinning shader,鑰屼笉鏄楠間腑鎵鏈夌殑bones,榪欎嬌寰楀涓猻kinnig pass鎴愪負鍙兘銆?br />鍦–PU涓morph鍔ㄧ敾欏剁偣榪涜鎻掑肩殑涓昏浼樼偣鏄埄鐢ㄤ簡GPU騫惰璁$畻鐨勬湰璐ㄣ俶orph璁$畻璧鋒潵涔熶笉澶嶆潅錛?br />涓昏鐨勮緭鍏ユ槸涓や釜欏剁偣浣嶇疆涓庝竴涓彃鍊煎洜瀛愶紝欏剁偣紼嬪簭浜х敓鎻掑煎悗鐨勯《鐐逛綅緗仛涓鴻緭鍑恒?br />pose鍔ㄧ敾涓巑orph綾諱技錛岃屼笖鏈変笌楠ㄩ鍔ㄧ敾綾諱技鐨勯檺鍒訛細瀹冩彁渚涚粰紼嬪簭鐨刾ose鏁扮洰濡備綍榪涜浼犻掋?br />鏍囩鐐?br />鏍囩鏈韓涓嶆槸鍔ㄧ敾鐨勪竴閮ㄥ垎錛屼絾瀹冧滑甯歌鐢ㄤ簬鑱旂粨浠繪剰瀵硅薄錛堜緥濡傛鍣級鍒板瓨鍦ㄧ殑鍔ㄧ敾妯″瀷涓娿傛爣絳劇偣
鐨勬蹇墊瘮杈冪畝鍗曪細瀹冩槸楠ㄦ灦涓竴鍧楃壒孌婄殑楠ㄥご錛屽畠鑳藉湪榪愯鏃訛紝鎺у埗緇戝畾瀵硅薄鐨勪綅緗笌鏈濆悜銆備笉蹇呬簨鍏?br />鍒涘緩鏍囩鐐癸紝鍙互鍦ㄨ繍鍔ㄦ湡attched涓涓彲縐誨姩瀵硅薄鍒伴鏋朵腑涓涓懡鍚嶇殑楠ㄥご涓娿侲ntity鏈夎繖鏍蜂竴涓柟娉曪細
attachObjectToBone();涓鏃︾墿浣撹緇戝埌楠ㄥご涓婏紝瀹冨氨浼氶殢鐫鏍囩鐐圭Щ鍔ㄣ傞渶瑕佺煡閬撶殑鏄紝瀵硅薄騫朵笉鏄湡姝?br />鍦拌attched鍒版爣絳劇偣涓娿傚畠琚玜ttched鍒扮敤閭d釜楠ㄩ鐨凟ntity涓娿?br />鍔ㄧ敾涓庢帶鍒跺櫒
涓よ呴兘鏄熀浜庝竴涓竴緇寸殑鍙橀噺鏉ユ帶鍒跺璞$殑鐘舵侊紝鎶婂彉閲忚緭鍏ヤ竴涓嚱鏁頒駭鐢熻緭鍑恒傚浜庡姩鐢繪潵璇達紝杈撳叆鍙橀噺鏄椂闂達紝鑰屽浜庢帶鍒跺櫒鏉ヨ錛岃緭鍏ュ彉閲忔槸浠諱綍浣犳兂瑕佺殑涓滆タ銆?br />鍔ㄧ敾鐨勭壒鐐癸細
閫氳繃鎻掑煎嚱鏁拌綆楃粰瀹氭椂闂寸偣涓妕rack鍊兼潵浜х敓杈撳嚭錛屼粠鑰屾敼鍙橀《鐐逛綅緗?br />鍔ㄧ敾琚涓烘槸涓皝闂殑緋葷粺錛氫綘璁劇疆杈撳叆鍊鹼紝ogre 浣跨敤瀹冩潵鏇存柊鐩稿叧瀵硅薄鐨勫睘鎬с?br />鎻掑煎嚱鏁拌緝涓哄浐瀹氾細瑕佷箞綰垮鹼紝瑕佷箞涓夋鏍鋒潯鎻掑箋?br />鍔ㄧ敾鏈塷gre鎻愪緵鐨勮澶氬伐鍏風殑鏀寔銆?br />鎺у埗鍣ㄧ殑鐗圭偣錛?br />瀵逛簬杈撳嚭鐨勮綆楁洿涓虹伒媧伙紝宸ヤ綔鍑芥暟闇瑕佹彁渚涳紝鍥犳鏈夋洿澶氶夋嫨銆?br />鎺у埗鍣ㄥ彲浠ュ艦鎴愪竴涓摼錛屼竴涓緭鍑哄彲浣滀負鍙︿竴涓緭鍏ャ?br />鎺у埗鍣ㄨ嚜宸變笉縐誨姩浠諱綍涓滆タ錛屽浜庤緭鍑哄彲浠ヤ笉鍋氫換浣曚簨鎯呫俹gre鐢ㄦ帶鍒跺櫒鏉ラ┍鍔ㄧ汗鐞嗗姩鐢匯?br />鎺у埗鍣ㄨ嚜鍔ㄩ愬撫鏇存柊錛岀劧鑰屽繀欏繪墜宸ユ坊鍔犱唬鐮佷嬌姣忓撫鐨勫姩鐢誨悜鍓嶅彉鍖栥?img src ="http://m.shnenglu.com/yuanyajie/aggbug/19974.html" width = "1" height = "1" />

娓呮簮娓告皯 2007-03-16 17:33 鍙戣〃璇勮
]]>銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎叓绔?娓叉煋瀵硅薄http://m.shnenglu.com/yuanyajie/archive/2007/03/15/19910.html娓呮簮娓告皯娓呮簮娓告皯Thu, 15 Mar 2007 09:25:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/15/19910.htmlhttp://m.shnenglu.com/yuanyajie/comments/19910.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/15/19910.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19910.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19910.html娓呮簮娓告皯銆gameogre@gmail.com

OGRE娓叉煋瀵硅薄
Ogre涓殑render target 鍙槸鍏變韓AGP鍐呭瓨鎴栨樉瀛樼殑鏌愪釜鍖哄煙鐨勬娊璞★紝榪欎釜鍖哄煙涓繚瀛樼潃鍏ㄩ儴鎴栭儴鍒嗗満鏅?D娓叉煋緇撴灉銆傛渶鏅氱殑render target鏄富娓叉煋紿楀彛錛岃繖鏄簲鐢ㄧ▼搴忕殑涓葷獥鍙c備嬌鐢ㄨ繖涓猺ender target涓嶉渶瑕佸仛澶鍙﹀鐨勫姫鍔涳紝ogre鍙互甯垜浠垱寤哄畠銆傝繕鍙互鎶婂満鏅腑鐨勫叏閮ㄦ垨閮ㄥ垎錛堢敋鑷蟲槸鍦烘櫙涓笉鍙鐨勯儴鍒嗭級娓叉煋鍒頒竴涓汗鐞嗭紝榪欎釜綰圭悊鍙互琚満鏅腑鐨勫叾浠栧杈瑰艦浣跨敤銆傜洰鏍囩‖浠剁紦鍐插湪ogre涓娊璞′負render target,瀹冪殑鐗╃悊鏄劇ず鍙互涓轟富娓叉煋紿楀彛錛屼篃鍙互鏄壇紿楀彛錛屼篃鍙互鏄潪鍙鐨勶細綰圭悊銆?br />娓叉煋瀵硅薄涔熸槸浜嬩歡婧愶紝鍋囧紼嬪簭娉ㄥ唽浜嗚繖浜嬩歡錛宱gre浼氬湪pre- 鍜?postrender鏃墮氱煡紼嬪簭錛岃繖緇欑▼搴忔敼鍙樿緗紝鍋氬嚭鍝嶅簲鐨勬満浼氥傜敋鑷沖湪瑙嗗彛(viewport)綰у埆涓妏re-,post- 娓叉煋鏃朵篃鏈変笂榪伴氱煡鏈哄埗銆俹gre鎻愪緵浜嗚綆楁覆鏌撶姸鎬佷俊鎭殑鍔熻兘,濡傚闀挎椂闂存覆鏌撲竴甯э紝娓叉煋瀵硅薄涓婃湁澶氬皯涓夎褰㈢瓑銆?br />娓叉煋紿楀彛
紿楀彛鏄敱娓叉煋緋葷粺鐨勫叿浣撳疄鐜板垱寤轟笌緇存姢鐨勶紙D3D9涓嬫槸涓爣鍑嗙殑Win32 Window)銆侽gre鍏佽瀵規覆鏌撶獥鍙h繘琛屽緢灝戠殑閰嶇疆錛岄檺浜庡昂瀵革紝鏍囬鏍忔枃瀛楃瓑銆傚亣濡傚笇鏈涘紑鍙戠殑紼嬪簭鏈夎彍鍗曪紝宸ュ叿鏍忕瓑錛屾妸ogre鐨勬覆鏌撹緭鍑哄埌
紿楀彛鐨勫鎴峰尯錛岃繖鏄彲鑳界殑銆俹gre鍙互鎻愪緵浣犵郴緇熺浉鍏崇殑紿楀彛鍙ユ焺緇欐覆鏌撶獥鍙o紝涔熷厑璁鎬綘鎻愪緵鍙ユ焺緇欑埗紿楀彛銆傜涓涓垱寤虹殑ogre娓叉煋紿楀彛縐頒負涓葷獥鍙c傚彟澶栧垱寤虹殑鏄壇紿楀彛銆傜獥鍙d笉鍍忎富紿楀彛閭d箞閲嶈銆傚亣濡傚湪紼嬪簭涓湁涓変釜紿楀彛錛岄偅涔堜負浜嗘紜殑榪涜璧勬簮娓呯悊錛屽繀欏誨湪閿姣佷富紿楀彛鍓嶆妸鍙﹀涓や釜鍓獥鍙i攢姣併?br />瑙嗗彛
娓叉煋紿楀彛鍖呭惈涓涓垨澶氫釜瑙嗗彛銆傝鍙f槸涓涓暱鏂瑰艦鍖哄煙錛屽満鏅鐞嗗櫒鎶婁粠涓涓浉鏈轟腑鐪嬪埌鐨勫満鏅彲瑙佸唴瀹?br />鐨勯忚鍥炬覆鏌撳埌榪欎釜鍖哄煙涓傝鍙e垱寤烘椂浼氬紩鐢ㄤ竴涓浉鏈猴紝浣嗚繖涓嶆槸瑙嗗彛鐨勯潤鎬佸睘鎬э紝鍙互闅忔椂鏀瑰彉鐢ㄤ簬
娓叉煋瑙嗗彛鐨勭浉鏈恒傛瘡涓鍙f嫢鏈変竴涓獄搴忔暟錛寊搴忛珮鐨勪綅浜嶼搴忎綆涔嬩笂銆倆搴?錛屾繪槸琚竴涓兘瑕嗙洊鏁翠釜娓叉煋瀵硅薄鐨勮鍙f墍鎷ユ湁銆傜己鐪侊紝ogre浼氭竻鐞嗚鍙g殑棰滆壊涓庢繁搴︾紦鍐層傜劧鑰岋紝鍙互鍏抽棴榪欎簺緙撳啿娓呯悊銆傝鍙f槸娓叉煋瀵硅薄錛堜篃灝辨槸鐗瑰畾鐨勬覆鏌撶郴緇燂紝濡侽penGL)涓庣浉鏈猴紙涔熷氨鏄壒瀹氬満鏅鐞嗗櫒涓庡畠鐨勫唴瀹癸級涔嬮棿鐨勫敮涓浜や簰鐐廣傝鍙d笉蹇呭崰鐢ㄦ暣涓覆鏌撳璞$殑琛ㄩ潰銆?D娓叉煋鐩告満涓嶆槸鐪熸鐨勭浉鏈猴紝鎵鏈夌殑鍑犱綍LoD璁$畻鏄互鐩告満鐨勪綅緗畻鐨勶紝鍥犳涓嶈兘綆鍗曠殑鏀瑰彉鐩告満鐨勭劍鐐瑰睘鎬ф潵杈懼埌鈥滄洿榪戔濈殑娓叉煋鏁堟灉銆?br />娓叉煋鍒扮汗鐞?br />浣跨敤姝ラ鏄細鍒涘緩涓涓汗鐞嗘覆鏌撳璞★紝閰嶇疆瀹冪殑娓叉煋灞炴э紝鍔犵汗鐞嗗埌娓叉煋瀵硅薄鍒楄〃錛岃緗汗鐞嗗埌琚嬌鐢ㄧ殑鏉愯川銆傜汗鐞嗗璞″厛浜庡叾浠栨覆鏌撳璞$被鍨嬫洿鏂幫紝榪欏氨淇濊瘉浜嗕嬌鐢ㄤ簡娓叉煋綰圭悊鐨勫璞℃紜湴琚覆鏌撱傛覆鏌撶汗鐞嗗彲浠ュ儚鍏朵粬鏅氱汗鐞嗕竴鏍瘋澶勭悊銆傚浜庨偅浜涗笉闇瑕佹瘡甯ч兘鏇存柊鐨勬覆鏌撶汗鐞嗭紝鍙互鍏抽棴鑷姩閫愬撫鏇存柊鑰岄噰鐢ㄦ墜鍔ㄦ洿鏂般備粠搴曞眰鐪嬶紝綰圭悊瀵硅薄灝辨槸涓鍧楃‖浠剁紦鍐層備負浜嗘ц兘鑰冭檻錛岃涓哄畠浠槸鍙啓涓庨潤鎬佺殑銆傛覆鏌撳埌綰圭悊浼氭覆鏌撳満鏅腑鐨勫嚑浣曪紝闇瑕佷竴浜涙椂闂存墽琛岋紝浼氶檷浣庡簲鐢ㄧ▼搴忓撫鐜囥備絾鏄緢澶氭湁鐢ㄧ殑鎶鏈幇鍦ㄧ涓嶅紑娓叉煋鍒扮汗鐞嗙殑浣跨敤銆傚疄鏃墮槾褰憋紝瀹炴椂鍙嶅皠絳夈俹gre鏀寔娓叉煋鍒板涓汗鐞嗭紝鍞竴鐨勯檺鍒舵槸瀹冧滑灝卞叿鏈夌浉鍚岀殑瀵搞?br />娓叉煋瀵硅薄綾?br />RenderTarget鏄疪enderWindow,MultiRenderTarget,涓嶳enderTexture鐨勫熀綾匯?br />RenderWindow閫氳繃瀛愮被鍖栨潵瀹炵幇錛欴3D9RenderWindow,GLXWindow絳夈傚湪windows鎿嶄綔緋葷粺涓紝鐢變簬鍙互浣跨敤Direct3D 9鎴栨槸OpenGL,浜庢槸鍙互鍒嗗埆浣跨敤D3D9RenderWindow錛學in32Window銆?br />RenderSystem::createRenderWindow()鏉ュ垱寤虹獥鍙c?br />virtual RenderWindow* Ogre::RenderSystem::createRenderWindow聽 (聽 const String &聽 name,聽
聽 unsigned int聽 width,聽
聽 unsigned int聽 height,聽
聽 bool聽 fullScreen,聽
聽 const NameValuePairList *聽 miscParams = 0
聽)聽
閫氳繃鏈鍚庝竴涓弬鏁幫紝鍙互璁劇疆紿楀彛鐨勪竴浜涘睘鎬с?br />灝嗘覆鏌撶獥鍙e祵鍏ュ閮ㄧ獥鍙g殑浠g爜
NameValuePairList params; // is just a typedef std::map<std::string, std::string>
// set external window handle -- assume that you have
// already created a window to embed the Ogre render window, and its handle is
// stored in an integer variable called "mParent"
params["externalWindowHandle"] = StringConverter::toString(mParent);
// window can be resized later to fit within parent client area if needed
RenderWindow* window = createRenderWindow("MyWindow", 800, 600, false, &params);
娓叉煋鍒扮汗鐞咲emo
demo鍦ㄥ師鐐瑰垱寤轟簡涓涓炬枩鐨勫鉤闈紝璁劇疆鐩告満錛屾妸鍦烘櫙錛堝満鏅敱涓涓瓟楝艱剳琚嬩笌鍑犱釜鐜潰綰界粨緇勬垚錛?br />鐩稿浜庡鉤闈㈢殑鍊掑獎娓叉煋鍒扮汗鐞嗕腑銆傛覆鏌撶汗鐞嗕笌騫抽潰宸茬粡搴旂敤鐨勯潤鎬佺汗鐞嗘販鍚堬紝榪欐牱灝卞疄鐜頒簡鍙嶅皠鏁堟灉銆?br />鍒涘緩娓叉煋綰圭悊:
TexturePtr texture = TextureManager::getSingleton().createManual( "RttTex",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 512, 512, 0, PF_R8G8B8, TU_RENDERTARGET );
鍒涘緩鐩告満涓庤鍙g敤浜庢覆鏌撳埌綰圭悊:
聽聽聽聽聽聽聽聽聽聽 聽 mReflectCam = mSceneMgr->createCamera("ReflectCam");
聽聽聽聽聽聽聽聽聽聽聽 mReflectCam->setNearClipDistance(mCamera->getNearClipDistance());
聽聽聽聽聽聽聽聽聽聽聽 mReflectCam->setFarClipDistance(mCamera->getFarClipDistance());
聽聽聽聽聽聽聽聽聽聽聽 mReflectCam->setAspectRatio(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 (Real)mWindow->getViewport(0)->getActualWidth() /
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 (Real)mWindow->getViewport(0)->getActualHeight());
聽聽聽聽聽聽聽聽聽聽聽 Viewport *v = rttTex->addViewport( mReflectCam );
聽聽聽聽聽聽聽聽聽聽聽 v->setClearEveryFrame( true );
聽聽聽聽聽聽聽聽聽聽聽 v->setBackgroundColour( ColourValue::Black );
鍒涘緩浣跨敤娓叉煋綰圭悊鐨勬潗璐?/font>錛?/font>
MaterialPtr mat = MaterialManager::getSingleton().create("RttMat",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
聽聽聽聽聽聽聽聽聽聽聽 TextureUnitState* t = mat->getTechnique(0)->getPass(0)->createTextureUnitState("RustedMetal.jpg");
聽聽聽聽聽聽聽聽聽聽聽 t = mat->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex");
聽聽聽聽聽聽聽聽聽聽聽 // Blend with base texture
聽聽聽聽聽聽聽聽聽聽聽 t->setColourOperationEx(LBX_BLEND_MANUAL, LBS_TEXTURE, LBS_CURRENT, ColourValue::White,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ColourValue::White, 0.25);
聽聽聽聽聽聽聽聽聽 聽聽t->setTextureAddressingMode(TextureUnitState::TAM_CLAMP);
聽聽聽聽聽聽聽聽聽 聽聽t->setProjectiveTexturing(true, mReflectCam);
聽聽聽聽聽聽聽聽聽聽聽 rttTex->addListener(this);
鏉愯川鍚嶄負RttMat,鍖呭惈涓涓妧鏈紝鍚庤呮湁涓涓氶亾銆傞氶亾鏈変袱涓汗鐞嗗崟鍏?涓涓負闈欐佺汗鐞?RustedMetal.jpg)
,鍙︿竴涓汗鐞嗗崟鍏冧負娓叉煋綰圭悊,涓や釜綰圭悊鎸夋瘮渚嬫販鍚堛傝緗簡鍚堥傜殑綰圭悊瀵誨潃妯″紡錛屽紑鍚簡閫忚綰圭悊鏀寔銆?br />騫朵負娓叉煋綰圭悊錛堝畠鏄覆鏌撳璞★級娉ㄥ唽浜嗕睛鍚櫒銆?br />鐩告満鍊掔疆浣跨敤鏉愯川:
聽聽聽聽聽聽聽聽聽聽聽 // set up linked reflection
聽聽聽聽聽聽聽聽聽聽聽 mReflectCam->enableReflection(mPlane);
聽聽聽聽聽聽聽聽聽聽聽 // Also clip
聽聽聽聽聽聽聽聽聽聽聽 mReflectCam->enableCustomNearClipPlane(mPlane);
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽 // Give the plane a texture
聽聽聽聽聽聽聽聽 聽 mPlaneEnt->setMaterialName("RttMat");
鐩告満榪欐牱璁劇疆鍚庯紝娓叉煋鍑虹殑灝嗘槸鍦烘櫙鐨勫掑獎錛岃繖鏄互鎸囧畾騫抽潰涓哄弬鐓х殑銆傚畾鍒舵渶榪戣鍓鉤闈㈢殑浣滅敤鏄細
閭d簺浣庝簬鍙嶅皠闈㈢殑瀵硅薄灝嗕笉浼氬啀琚覆鏌撱傛覆鏌撶汗鐞嗘椂錛屽茍涓嶆兂鎶婂鉤闈篃娓叉煋榪涘幓錛屽彲浠ュ湪涓婅竟宸茬粡娉ㄥ唽
渚﹀惉鍣ㄥ仛鐐規墜鑴?/font>錛?br />void preRenderTargetUpdate(const RenderTargetEvent& evt)
聽聽聽 {
聽聽聽聽聽聽聽 // Hide plane
聽聽聽聽聽聽聽 mPlaneEnt->setVisible(false);

聽聽聽 }
聽聽聽 void postRenderTargetUpdate(const RenderTargetEvent& evt)
聽聽聽 {
聽聽聽聽聽聽聽 // Show plane
聽聽聽聽聽聽聽 mPlaneEnt->setVisible(true);
聽聽聽 }
鏈鍚庤鎻愮殑鏄紝鍦ㄦ瘡涓甯э紝閮借浣夸袱涓浉鏈虹殑浣嶇疆錛屾湞鍚戜繚鎸佷竴鑷?
frameStarted:
聽mReflectCam->setOrientation(mCamera->getOrientation());
聽 mReflectCam->setPosition(mCamera->getPosition());



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎竷绔?璧勬簮綆$悊 絎竴閮ㄥ垎http://m.shnenglu.com/yuanyajie/archive/2007/03/14/19827.html娓呮簮娓告皯娓呮簮娓告皯Wed, 14 Mar 2007 09:09:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/14/19827.htmlhttp://m.shnenglu.com/yuanyajie/comments/19827.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/14/19827.html#Feedback2http://m.shnenglu.com/yuanyajie/comments/commentRss/19827.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19827.html娓呮簮娓告皯銆銆gameogre@gmail.com

璧勬簮緇?/font>
鍛藉悕緇勫彲浠ヤ綔涓轟竴涓暣浣撳姞杞戒笌鍗歌澆銆傚湪鍔犺澆錛屽嵏杞斤紝鍒濆鍖栨椂鎶婃妸緇勪腑鐨勬墍鏈夎祫婧愪綔涓轟竴涓墽琛屽崟浣嶆潵
鐪嬪緟錛岃屼笉鏄愪釜榪涜澶勭悊銆傝祫婧愮粍綆$悊綰補鏄簡涓轟簡綆$悊涓婄殑鏂逛究錛屾槸鍚︿嬌鐢ㄧ粍鐨勬柟寮忎笌鎬ц兘鏃犲叧銆傚亣
濡傚悜璧勬簮緇勭鐞嗗櫒涓姞鍏ヤ簡璧勬簮浣嶇疆鑰屾病鏈夋寚瀹氱粍鍚嶏紝閭d箞榪欎簺璧勬簮浣嶇疆琚斁鍏?General"緇勪腑銆?br />璧勬簮緇勪笌涓栫晫鍑犱綍
緙虹渷鎯呭喌涓嬶紝ogre鎶婂姞杞界殑涓栫晫鍑犱綍鏀懼叆"General"緇勩備篃鍙互瑕嗙洊(override)榪欑鏂瑰紡錛屼嬌寰楀涓栫晫鍑犱綍鐨勭鐞嗗儚鍏朵粬璧勬簮鐨勭鐞嗘柟寮忎竴鏍楓傜粺涓鐨勫満鏅鐞嗗櫒鍙互鎻愪緵鍏充簬瑁呰澆涓栫晫鎬繪楠ょ殑綰跨儲錛岃繖鏍峰氨鍙互鍦ㄥ叧鍗″姞杞芥椂錛屾彁渚涚簿紜殑浠ヨ繘搴︽潯鏄劇ず鐨勫弽棣堜俊鎭?br />璧勬簮浣嶇疆(location)
璧勬簮浣嶇疆鏄痮gre鍘繪煡鎵捐祫婧愯繘琛岀儲寮曠殑鍦版柟銆傜儲寮曟寚鐨勬槸鍦ㄦ煇涓綅緗殑鎵鏈夎祫婧愰氳繃瀹冧滑鐨勫悕瀛楄鏄犲皠錛岃繖鏍峰彲浠ユ柟渚胯繘琛屾洿蹇殑鏌ユ壘璧勬簮銆傚彲浠ュ湪紼嬪簭鐨勪換浣曟椂鍊欐坊鍔犳垨鍒犻櫎璧勬簮浣嶇疆,涓嶅繀浜嬪厛瀵規墍浠ュ彲鑳界敤鍒扮殑榪涜瀹氫箟銆傝祫婧愪綅緗湪ogre涓疄闄呬笂鏄釜archive,瀹冪殑鎰忔濆氨鏄滄枃浠剁殑闆嗗悎鈥濄傜鐩樹笂鐨勬枃浠剁郴緇熸槸
archive鐨勪竴縐嶇被鍨嬨傚彟澶栦竴縐嶆槸zip archive銆傚彲浠ヨ嚜瀹氫箟archive鏍煎紡銆傝繖閫氳繃鏀瑰啓archive綾誨疄鐜版潵瀹屾垚,蹇呴』鏀寔瀵瑰懡鍚嶇殑leaf鏂囦歡榪涜鏋氫婦鎿嶄綔錛屽繀欏繪敮鎸侀氶厤絎︼紝鏀寔緇撶偣閫掑綊錛岀粰ogre鎻愪緵涓涓祦璁塊棶archive涓枃浠剁殑鏁版嵁銆俹gre涓殑archive鏄彧璇葷殑銆俹gre璧勬簮綆$悊鍣ㄥ埄鐢╝rchive鏋氫婦鐗規ф潵绱㈠紩archive鐨勫唴瀹癸紝褰搊gre瀵筧rchive榪涜绱㈠紩鏃訛紝涓嶄細瀹為檯鍔犺澆浠諱綍璧勬簮銆?br />璧勬簮鐢熷懡鍛ㄦ湡
璧勬簮鏈夊洓縐嶇姸鎬?鍚勭姸鎬佷箣闂寸殑杞崲鍏崇郴濡備笅鍥撅細

Undefined:榪欐槸紼嬪簭寮濮嬫椂錛屾墍鏈夎祫婧愮殑緙虹渷鐘舵併傞櫎闈炲畠浠澹版槑錛宱gre瀵圭▼搴忕敤鍒扮殑璧勬簮涓鏃犳墍鐭ワ紝鎵嬪伐璋冪敤浠g爜 ResourceGroupManager::declareResource()鎴栧湪鑴氭湰涓瑙f瀽涔嬪悗錛岃祫婧愮殑鐘舵佸彉涓篋eclared
Declared:澹版槑灝辨槸鍛婅瘔ogre鎯寵鍔犺澆鏌愪簺璧勬簮銆俁esourceGroupManager::declareResource()鎬繪槸鏈夋晥鐨勶紝鍖呮嫭鍦ㄦ覆鏌撶郴緇熷垵濮嬩箣鍓嶏紝榪欎笌ResourceManager::create()涓嶅悓錛屽洜涓哄悗鑰呬緷璧栦簬娓叉煋緋葷粺銆?br />Unloaded:閫氳繃璋冪敤ResourceGroupManager::initialiseAllResourceGroup(), ResourceGroupManager::
initialiseResourceGroup(),鎴朢oot::initialise()(瀹冧細鍒濆鍖栧湪姝よ皟鐢ㄤ箣鍓嶆墍鏈夊0鏄庣殑璧勬簮)錛岃祫婧愮姸鎬佽繘鍏ュ埌Unloaded,璧勬簮浼氬崰鐢ㄤ竴鐐瑰唴瀛樻潵淇濆瓨瀹冪殑瀹氫箟鐨勫疄渚嬶紝浣嗘槸璧勬簮鏈韓榪樻病鏈夊姞杞藉埌鍐呭瓨銆備粠鍙︿竴瑙掑害鐪?浠嶭oaded鍒癠nloaded),寮曡搗鐘舵佸彉鍖栫殑璋冪敤鏈夛細ResourceManager::unload(),ResourceManager::unloadAll(), ResourceManager::unloadAllUnreferencedResources(),ResourceGroupManager::unloadResourceGroup(), or Resource::unload().鎵鏈夎繖浜涜皟鐢ㄤ粛浼氫繚瀛樿祫婧愬疄渚嬶紝浣嗙湡姝g殑璧勬簮鏁版嵁浼氫粠鍐呭瓨涓嵏杞姐?br />Loaded: 榪欑鐘舵佷笅錛屾墍鏈夋暟鎹兘鍙樺緱鏈夋晥銆備笌姝ょ姸鎬佹湁鍏崇殑璋冪敤鏈塕esource::load(), Resource::reload(),
ResourceManager::load(), ResourceManager::reload(), ResourceManager::reloadAll(),
ResourceManager::reloadAllUnreferencedResources(), and ResourceGroupManager::
loadResourceGroup().
閫昏緫璧勬簮綆$悊
璧勬簮浠ュ懡鍚嶇粍鐨勫艦寮忕粍緇囷紝姣忕粍鍙互鍖呮嫭浠諱綍綾誨瀷鐨勮祫婧愶紝姣忕璧勬簮閮芥湁鑷繁鐨勮祫婧愮鐞嗗櫒錛屽悗鑰呰礋璐e姞杞戒笌鍗歌澆鐗瑰畾綾誨瀷鐨勮祫婧愩俹gre瀵瑰畠鐨勮祫婧愭病鏈夊疄鐜扮壒瀹氱殑鍐呭瓨綆$悊鏂規錛屽鏋滀綘闇瑕佸鏌愮璧勬簮瀹炩滄渶榪戞渶灝戜嬌鐢ㄧ畻娉曗濇柟妗堟潵榪涜綆$悊錛岄偅涔堥渶瑕佽嚜宸辯殑浠g爜鏉ュ疄鐜般傚肩殑涓鎻愮殑鏄紝鐜板湪鐨勫ぇ澶氭暟鏄懼崱椹卞姩錛屽浜庡ぇ澶氭暟閲嶈鐨勮祫婧愬凡緇忓疄鐜頒簡榪欑LRU綆楁硶綆$悊銆?br />璧勬簮鍔犺澆
鍋囧娌℃湁棰勫姞杞斤紝褰撹祫婧愯璁塊棶鏃朵細榪涜鍔犺澆銆傚疄闄呯殑鍔犺澆錛屽嵏杞芥槸璧勬簮鑷繁鐨勮矗浠匯?br />鎵嬪姩鍔犺澆璧勬簮
璧勬簮綆$悊灞備笉璐熻矗瀹為檯鐨勫姞杞戒笌鍗歌澆銆傞氬父錛屼笉蹇呮媴蹇冭祫婧愭槸鍚﹀瓨鍦ㄤ簬鏄撳け鎬у獟浠嬨傜劧鑰岋紝鎵嬪伐鏂瑰紡鏃墮渶瑕佽冭檻銆傛墜宸ヨ祫婧愬姞杞藉櫒蹇呴』鍦ㄤ換浣曟椂鍊欏噯澶囧ソ閲嶆柊鍔犺澆璧勬簮銆傚亣濡傛煇涓祫婧愭槸閫氳繃紼嬪簭鐢熸垚鐨勶紝閭d箞鎵嬪伐璧勬簮鍔犺澆鍣ㄥ繀欏誨唴瀛樹腑緙撳啿榪欎簺璧勬簮錛屾垨鑰呮槸褰撹祫婧愮鐞嗗姞杞芥椂閲嶆柊鍒涘緩瀹冦俹gre璁や負鎵嬪伐鍔犺澆涓庤嚜鍔ㄥ姞杞芥病鏈夊尯鍒?br />鍚庡彴璧勬簮綆$悊
緙虹渷錛宱gre涓嶆槸綰跨▼瀹夊叏鐨勩傚亣濡傚湪OgreConfig.h涓?#define OGRE_THREAD_SUPPORT 1 ,閭d箞璧勬簮綆$悊
浠g爜鐨勭嚎紼嬪悓姝ュ姛鑳藉彉寰楁湁鏁堬紝鎴戜滑灝卞彲浠ュ湪鍖呭惈Root瀹炰緥鐨勭嚎紼嬩箣澶栵紝寮鍚柊鐨勭嚎紼嬪璧勬簮綆$悊綾諱笌鏂規硶榪涜鎿嶄綔,浠庤屽疄鐜扮伒媧葷殑璧勬簮鍔犺澆鏂規銆傘
闈炲悗鍙拌祫婧愮鐞?br />Ogre涓ぇ閲忎嬌鐢ㄤ簡Observer妯″紡,璧勬簮綆$悊緋葷粺涔熶笉渚嬪銆俁esourceGroupListene 鍥炶皟鎺ュ彛鍖呭惈浜嗗嚑涓柟娉?br />鍏佽瀵硅祫婧愬姞杞借繃紼嬭繘琛岀粏綺掑害鐨勭洃鍚?br />璧勬簮鍗歌澆
璧勬簮琚姞杞藉悗鎬誨瓨鍦ㄤ簬鍐呭瓨涓紝鐩村埌琚簲鐢ㄧ▼搴忓己琛屽嵏杞?閫氳繃璧勬簮緇勭鐞嗗櫒鎴栨槸琚祫婧愮洿鎺ラ噴鏀?銆傝祫婧愮鐞嗙粍綆$悊浼氭妸緇勪腑鎵鏈夌殑璧勬簮閮藉嵏杞芥帀銆傚湪璧勬簮琚紩鐢ㄦ椂涓嶈兘寮鴻鍗歌澆銆?br />Resource Locations
// 閰嶇疆鏂囦歡鏂瑰紡
ConfigFile cf;
cf.load("resources.cfg");
// Go through all sections & settings in the file
ConfigFile::SectionIterator seci = cf.getSectionIterator();
String secName, typeName, archName;
while (seci.hasMoreElements())
{
secName = seci.peekNextKey();
ConfigFile::SettingsMultiMap *settings = seci.getNext();
ConfigFile::SettingsMultiMap::iterator i;
for (i = settings->begin(); i != settings->end(); ++i)
{
typeName = i->first;
archName = i->second;
ResourceGroupManager::getSingleton().addResourceLocation(
archName, typeName, secName);
}
}
//紜紪鐮佹柟寮?br />ResourceGroupManager *rgm = ResourceGroupManager::getSingletonPtr();
rgm->addResourceLocation("../../media/packs/OgreCore.zip", "Zip", "Bootstrap");
rgm->addResourceLocation("../../media", "FileSystem", "General");
rgm->addResourceLocation("../../media/fonts", "FileSystem", "General");

鍒濆鍖?/font>
鍦ㄥ垵濮嬪寲涔嬪墠錛屽繀欏誨垱寤鴻嚦灝戜竴涓覆鏌撶獥鍙c傚洜涓哄湪鍒嗘瀽鑴氭湰鏃跺彲鑳戒細鍒涘緩GPU璧勬簮錛岃屽悗鑰呴渶瑕佹覆鏌?br />涓婁笅鏂囥?br />// initialize all of the previously defined resource groups
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
// or, alternately, initialize the defined resource groups one at a time
ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
鍗歌澆
鍙互鍦ㄤ換浣曟椂鍊欏嵏杞借祫婧愶紙浠ョ粍鎴栧崟涓殑鏂瑰紡錛?姝e湪浣跨敤鐨勮祫婧愪笉浼氳鍗歌澆銆?br />浠ョ粍鐨勬柟寮忓嵏杞?/font>
ResourceGroupManager::getSingleton().unloadResourceGroup("Bootstrap", true);
ResourceGroupManager::getSingleton().
unloadUnreferencedResourcesInGroup("Bootstrap", true);
true琛ㄧず鍙嵏杞借祫婧愭暟鎹紝涓嶅垹闄よ祫婧愬疄渚嬶紝瀹冨彲浠ヨreloaded銆傛湁浜涜祫婧愬湪鍒涘緩鏃惰鏍囦負
"nonreloadable",榪欑綾誨瀷鐨勮祫婧愪笉鑳戒嬌鐢ㄤ笂榪版柟娉曞嵏杞姐?br />娓呯悊鎴栭攢姣佽祫婧愮粍
娓呯悊浠呮槸鍗歌澆璧勬簮涓庡垎紱昏祫婧愮儲寮曪紝閿姣佷笉浠呭仛娓呯悊鐨勫伐浣滐紝榪樺寘鎷粠璧勬簮緇勪腑鎶婅嚜宸辯Щ闄ゃ?br />ResourceGroupManager::geSingleton().clearResourceGroup("Bootstrap");
ResourceGroupManager::geSingleton().destroyResourceGroup("Bootstrap");
浠ヤ釜浣撴柟寮忓嵏杞?/font>
// assume that pEntity is a valid pointer to an instance of Entity
MeshPtr meshPtr = pEntity->getMesh();
meshPtr->unload();
鍔犺澆/閲嶈澆璧勬簮緇?/font>
ResourceGroupManager::getSingleton().loadResourceGroup("Bootstrap", false, true)
浜屼釜甯冨皵鍙橀噺涓嶅悓璧勬簮綾誨瀷璧勬簮鍔犺澆寮鍏籌紝涓閽堝"Normal"璧勬簮錛屼簩閽堝"World geometry"
璧勬簮緇勫姞杞介氱煡
class LoadingProgressListener :聽public ResourceGroupListener
{
聽聽 public:聽
聽聽聽聽聽聽聽
聽// fired when a group begins parsing scripts
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 void resourceGroupScriptingStarted(const String& groupName,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 size_t scriptCount) {}
聽聽聽聽聽聽 // fired when a script is about to be parsed
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 void scriptParseStarted(const String& scriptName) {}
聽聽聽 聽聽 // fired when the script has been parsed
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 void scriptParseEnded() {}
聽聽聽聽 聽 // fired when all scripts in the group have been parsed
聽聽聽聽聽聽聽聽聽聽聽聽聽 void resourceGroupScriptingEnded(const String& groupName) {}
聽聽聽聽聽 //榪樻湁涓浜涙帴鍙?br />}
//瀹炵幇涔嬪悗錛岃繘琛屾敞鍐?br />LoadingProgressListener listener(m_progressMeter);
ResourceGroupManager::getSingleton().addResourceGroupListener(&listener);



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎叚绔?鏉愯川銆鏉愯川澶嶅埗 http://m.shnenglu.com/yuanyajie/archive/2007/03/13/19754.html娓呮簮娓告皯娓呮簮娓告皯Tue, 13 Mar 2007 07:57:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/13/19754.htmlhttp://m.shnenglu.com/yuanyajie/comments/19754.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/13/19754.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19754.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19754.html娓呮簮娓告皯銆gameogre@gmail.com

鏉愯川澶嶅埗
濡傛灉鏂扮殑鑴氭湰鍙槸瀵規煇涓凡緇忓瓨鍦ㄧ殑鑴氭湰榪涜灝忛儴鍒嗙殑鍙樺寲錛岄偅涔堝彲榪涜浠庢棫鑴氭湰澶嶅埗錛岃屼笉鏄疌錛哖銆傛柊鏉愯川鍙互淇敼鐗瑰畾technique,pass,texture,鎴栨槸娣誨姞鏂伴」銆?br />鏍煎紡: material <NewUniqueChildName> : <ReferanceParentMaterial>
褰撴潗璐ㄨ剼鏈鍔犺澆鍒皁gre涓紝榪欑緇ф壙鍏崇郴涓嶅啀緇寸郴錛屽亣濡傜埗鏉愯川鍦ㄨ繍琛屾椂琚慨鏀癸紝涓嶄細褰卞搷鍒板瓙鏉愯川銆傚鏋滃湪涓涓猼echnique涓湁5涓猵ass,鑰屾垜浠彧鎯充慨鏀圭5涓猵ass,鎴戜滑鍙互鐢╬ass鎸囧畾鎴栨槸瀹冪殑绱㈠紩(浠?璁★級
meterial test2: test1
{
聽 technique 0
聽聽聽 {
聽聽聽聽聽 pass 4
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽 ambient 0.5 0.7 0.3 1.0
聽聽聽聽聽聽聽 }
聽聽聽 }
}
鍔犲叆涓涓柊鐨則echnique鎴杙ass鍒癿aterial涓紝鍙互閫氳繃璧嬩簬瀹冧滑鏂扮殑鍚嶇О鏉ュ疄鐜幫紝鏂板悕縐板繀欏誨湪鐖舵潗璐ㄤ腑娌℃湁鍑虹幇榪囥傛寚瀹氭柊绱㈠紩涔熶竴鏍楓傛柊technique鎴杙ass浼氳鍔犺澆鍒扮埗鏉愯川鐩稿簲technique鎴杙ass鏈熬.
material BumpMap2 : BumpMap1
{
聽 technique ati8500
聽 {
聽聽聽 pass 0
聽聽聽 {
聽聽聽聽聽 texture_unit NormalMap
聽聽聽聽聽 {
聽聽聽聽聽聽聽 texture BumpyMetalNM.png
聽聽聽聽聽 }
聽聽聽 }
聽 }
}
鍦ㄤ笂闈㈢殑渚嬪瓙涓紝濡傛灉texture_unit鐨勫悕縐癗ormalMap鍦ㄧ埗鏉愯川涓寚瀹氳繃錛岄偅涔堢幇鍦ㄧ殑琛屼負琛ㄧずoverride,濡傛灉瀹冩槸涓涓柊鐨勫悕瀛楋紝閭d箞琛ㄧず鍦╬ass鐨勬渶鍚庢柊鍔犱竴涓猼exture unit銆傘

綰圭悊鍒悕

鍦ㄦ簮鏉愯川琚玞lone鏃訛紝姣忎釜texture unit鍙互琚祴浜庝竴涓猅exture alias(鍒悕錛夈傚彲浠ョ敤榪欎釜鍒悕鏉ユ寚瀹氫嬌鐢ㄤ粈涔堢汗鐞嗐傛牸寮忥細 texture_alias <name> 緙虹渷錛?texutre_unit <name>( 綰圭悊鍗曞厓鐨勫悕瀛?
texture_unit DiffuseTex
{
聽 texture diffuse.jpg
}
鍦ㄨ繖縐嶆儏鍐典笅錛宼exture_alias涓篋iffuseTex.
material TSNormalSpecMapping
{
technique GLSL
聽 {
聽聽聽 pass
聽聽聽 {聽
聽聽聽聽聽 texture_unit NormalMap
聽聽聽聽聽 {
聽聽聽聽聽聽聽 texture defaultNM.png
聽聽聽聽聽聽聽 tex_coord_set 0
聽聽聽聽聽聽聽 filtering trilinear
聽聽聽聽聽 }

聽聽聽聽聽聽 texture_unit DiffuseMap
聽聽聽聽聽 {
聽聽聽聽聽聽聽 texture defaultDiff.png
聽聽聽聽聽聽聽 filtering trilinear
聽聽聽聽聽聽聽 tex_coord_set 1
聽聽聽聽聽 }

聽聽聽聽聽聽聽 texture_unit SpecMap
聽聽聽聽聽 {
聽聽聽聽聽聽聽 texture defaultSpec.png
聽聽聽聽聽聽聽 filtering trilinear
聽聽聽聽聽聽聽 tex_coord_set 2
聽聽聽聽聽 }
聽聽聽 }聽
聽 }

technique HLSL_DX9
聽 {
聽聽聽 pass
聽聽聽 {聽
聽聽聽聽聽聽聽 texture_unit
聽聽聽聽聽 {
聽聽聽聽聽聽聽 texture_alias NormalMap
聽聽聽聽聽聽聽 texture defaultNM.png
聽聽聽聽聽聽聽 tex_coord_set 0
聽聽聽聽聽聽聽 filtering trilinear
聽聽聽聽聽 }

聽聽聽聽聽 texture_unit
聽聽聽聽聽 {
聽聽聽聽聽聽聽 texture_alias DiffuseMap
聽聽聽聽聽聽聽 texture defaultDiff.png
聽聽聽聽聽聽聽 filtering trilinear
聽聽聽聽聽聽聽 tex_coord_set 1
聽聽聽聽聽 }

聽聽聽聽聽 texture_unit
聽聽聽聽聽 {
聽聽聽聽聽聽聽 texture_alias SpecMap
聽聽聽聽聽聽聽 texture defaultSpec.png
聽聽聽聽聽聽聽 filtering trilinear
聽聽聽聽聽聽聽 tex_coord_set 2
聽聽聽聽聽 }
聽聽聽 }聽
聽 }
}
渚嬪瓙涓湁涓や釜鎶鏈紝閮戒嬌鐢ㄧ浉鍚岀殑綰圭悊,絎竴涓妧鏈嬌鐢ㄧ己鐪佺殑鏂瑰紡瀹氫箟浜嗙汗鐞嗗埆鍚嶏紝絎簩涓妧鏈樉寮忓湴鎸囧畾綰圭悊鍒悕銆備袱鑰呴兘鏈夌浉瀵瑰簲鐨勫悓鏍風殑綰圭悊鍒悕銆傚鏋滄兂瀹氫箟涓涓潗璐ㄥ彧鏄兂浣跨敤涓嶅悓鐨勭汗鐞?閭d箞copy鐖舵潗璐ㄦ椂鍙互浣跨敤set_texture_alias鏉ラ噸鏂版寚瀹氭柊綰圭悊銆?br />material fxTest : TSNormalSpecMapping
{
聽 set_texture_alias NormalMap fxTestNMap.png
聽 set_texture_alias DiffuseMap fxTestDiff.png
聽 set_texture_alias SpecMap fxTestMap.png
}
涓婇潰浠g爜灝卞鎷ユ湁鎸囧畾鍒悕鐨則exture unit鎵浣跨敤鐨勭汗鐞嗗浘鐗囪繘琛屼簡閲嶆柊鎸囧畾銆?br />



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎叚绔?鏉愯川銆姒傚康http://m.shnenglu.com/yuanyajie/archive/2007/03/13/19703.html娓呮簮娓告皯娓呮簮娓告皯Tue, 13 Mar 2007 03:31:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/13/19703.htmlhttp://m.shnenglu.com/yuanyajie/comments/19703.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/13/19703.html#Feedback1http://m.shnenglu.com/yuanyajie/comments/commentRss/19703.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19703.html鍩烘湰瀵硅薄鐫鑹?br />
鏉愯川錛岀畝鍗曠殑鏉ヨ灝辨槸瀹氫箟浜嗚璧嬩簬姝ゆ潗璐ㄧ殑瀵硅薄濡備綍鍙嶅皠鍏夈俹gre涓殑鍏夌収閲囩敤灞閮ㄥ厜鐓фā鍨嬶紝榪欐剰鍛崇潃錛屽璁$畻鏈夊獎鍝嶇殑鍥犵礌鏈夛細鍏夌収鐨勮搴︿笌鍏夌殑棰滆壊錛岀浉鏈虹殑瑙嗚錛屽璞$殑鏉愯川銆俹gre鏀寔鍥涚綾誨瀷鐢ㄦ潵鎻忚堪鏉愯川鐨勯鑹?琛ㄨ堪浜嗗厜鐓у瀹冪殑褰卞搷錛氱幆澧冨厜錛屾極鍙嶅皠錛屽彂鏁o紝闀滈潰鍙嶅皠銆傜幆澧冨厜鏄鍏ㄥ眬鍏夌収鐨勮繎浼鹼紝婕弽灝勬槸鎸囧綋鐗╀綋琚厜鐓у皠鍚庡湪鐗╀綋鍚勬柟鍚戜笂鍙嶅皠鐨勫厜鐨勯鑹層傚彂鏁f寚鐗╀綋鏈韓鑷彂鍏夌殑棰滆壊銆傞暅闈㈠弽灝勶紝鎸囩殑鏄湪鏌愪釜瑙嗚鐪嬪埌鐨勮鍏夊弽灝勫嚭鐨勨滈珮鍏夆濄傞暅闈㈤珮鍏夋湁涓や釜鍙傛暟鍙互鎺ower,shininess.power鐢ㄦ潵鎺у埗鈥滃姞浜偣鈥濈殑灝哄(褰卞搷鐨勮寖鍥磋秺澶?銆傝宻hininess鍊艱秺澶х殑琛ㄩ潰錛岄珮鍏夎秺瀹規槗鑱氶泦銆?br />綰圭悊鏄犲皠
閫氳繃綰圭悊鍧愭爣錛岀敤涓寮?D鍥劇墖緇?D瀵硅薄鐫鑹茬殑鎶鏈?br />鍙紪紼嬬潃鑹?/font>
閫氳繃鍐欓珮綰ф垨浣庣駭鐨勯《鐐圭▼搴忥紝鐗囨紼嬪簭浠f浛鍥哄畾綆$嚎鐨勫姛鑳姐傛敮鎸佸彲緙栫▼鍥懼艦紜歡涔熷彲浠ュ綋鍋氬浐瀹氬嚱鏁版祦姘寸嚎紜歡鏉ョ敤銆傚彲緙栫▼紜歡鍏佽鏇寸伒媧葷殑璁$畻欏剁偣鐨勭殑棰滆壊錛屼綅緗瓑銆傜汗鐞嗕篃鍙敤浜庡彲緙栫▼紜歡銆傜汗鐞嗕腑鍖呭惈鐨勬暟鎹紝涓嶄粎浠呭彲浠ヨ〃紺洪鑹詫紝涔熷彲浠ヨ〃紺轟換浣曞叾浠栫▼搴忓憳鐭ラ亾濡備綍澶勭悊鐨勬暟鎹?br />Batching
鏉愯川涓巑esh涔嬮棿鐨勫叧緋繪墍甯︽潵鐨勬渶澶у獎鍝嶆槸娓叉煋鐘舵佺殑鏀瑰彉銆俹gre涓殑娓叉煋鍗曞厓澶у鏁版儏鍐典笅鎸囩殑鏄痳enderable,瀹冩槸SubEntity鐨勭埗綾匯傛覆鏌撳崟鍏冭繖涓蹇電殑閲嶈鎬у湪浜庯紝姝f槸鍦ㄨ繖閲岋紝ogre灝嗚皟鐢ㄦ樉鍗¢┍鍔ㄥ紑濮嬪茍涓斾細緇撴潫鈥滅敾鎿嶄綔鈥濄備竴嬈$敾鎿嶄綔錛坆atch),鎸囩殑鏄竻闄ら鏂欙紙color,texture,etc)涓庢潗鏂欙紙vertexof display lists)錛屼粠澶村紑濮嬩竴緇勬柊鐨勬搷浣滅殑榪囩▼銆傚氨鍍忎竴涓敾瀹舵瘡嬈″湪鐢繪澘涓婂仛鐢繪椂浼氭礂鍑浠栫殑璋冭壊鏉夸竴鏍楓傚浜?D紜歡鏉ヨ錛岃繖涓繃紼嬪寘鎷彂閫佹柊鐨勯《鐐瑰垪琛ㄤ笌鏁版嵁绱㈠紩鍒癎PU(鎴栬呭紩鐢ㄨ繕瀛樺湪鐨勶級錛岀敤綰圭悊錛岄鑹詫紝浠ュ強鍏夋爡鍖栬繖浜涢《鐐圭粍鎴愮殑闈㈤渶瑕佺殑涓浜涘厓鏁版嵁鏉ヨ緗瓽PU銆傚洜姝わ紝鏈鏈夋晥鐜囩殑鍋氭硶鏄竴嬈″敖鍙兘澶氱殑鎶?br />浣跨敤鍚屾牱娓叉煋鏁版嵁鐨勯《鐐瑰彂閫佸埌GPU榪涜澶勭悊銆俹gre浼氬敖閲忓噺灝忕姸鎬佹敼鍙樺甫鏉ョ殑褰卞搷錛屼絾瀹冮伒閲嶄綘濡備綍鏋勬垚涓涓猺enderable鐨勫喅瀹氥傚亣濡備綘鏈変竴涓ā鍨嬪畠鏈?0涓潡緇勬垚錛屽畠浠兘浣跨敤鐩稿悓鐨勬潗璐紝榪欐椂搴旇鎶婁粬浠暣鍚堝埌鐩稿悓鐨剅enderable涓幓錛岃屼笉鏄垎20嬈atch鍙戦佸埌鏄懼崱銆傛瘡甯х殑batch鏁頒細鏈変釜涓婇檺銆?br />鏉愯川鍏嬮殕
ogre涓殑鏉愯川鏄叡浜殑銆傚綋浣犱粠鏉愯川綆$悊鍣ㄨ幏寰椾竴涓寚閽堬紝瀹冧笌浠庝嬌鐢ㄨ繖縐嶆潗璐ㄧ殑鍏朵粬瀵硅薄鎵鎷ユ湁鐨勬潗璐?br />鎸囬拡鏄浉鍚岀殑銆傚洜姝ゆ敼鍙樹竴澶勪細褰卞搷鍏朵粬錛屼負浜嗛伩鍏嶅獎鍝嶅叾浠栧簲璇ュ厠闅嗘潗璐ㄣ?br />Technique & Scheme
Technique鍏佽閽堝涓嶅悓鐨勭‖浠跺鉤鍙板畾鍒朵笉鍚岀殑鏉愯川銆係cheme鍏佽瀵圭壒瀹氫竴緇勬妧鏈繘琛屾洿涓鑸寲鐨勬弿榪般侽gre閫夋嫨鎶鏈椂鏈夋槑紜殑欏哄簭銆傞鍏堬紝瀹冨鎵懼睘浜庢煇涓懡鍚峉cheme涓殑鎶鏈傜劧鍚庡湪閫夊ソ鐨剆cheme涓煡鎵鵑偅浜涘簲鐢ㄤ簡鐗瑰畾鏉愯川lod鐨勬妧鏈傛渶鍚庡湪榪欎簺鎶鏈垪琛ㄤ腑錛岄夋嫨鏈鑳介傚簲褰撳墠紜歡璁劇疆鐨勬妧鏈傜己鐪侊紝鎵鏈夌殑鎶鏈睘浜庣粏鑺傜駭鍒?,瀹冨搴旀渶楂樼粏鑺傜駭鍒?br />Material LoD
灞傛緇嗚妭榪欎釜鏈甯哥敤鏉ヨ璁洪殢鍦烘櫙涓殑鐗╀綋鐨勫嚑浣曞鏉傛ф槸鐩告満涓庣墿浣撲箣闂磋窛紱葷殑鍑芥暟銆傜被浼肩殑姒傚康琚簲鐢ㄥ埌鏉愯川瀹氫箟涓娿俹gre鎻愪緵浜嗗湪鍝釜灞傛緇嗚妭涓婁嬌鐢ㄧ壒瀹氭妧鏈殑鎵嬫銆傚彲浠ュ湪鏉愯川涓畾涔夊眰嬈$粏鑺傚彂鐢熷彉鍖栨椂鐨勮窛紱伙紝璧嬩簬鏉愯川涓殑姣忎釜鎶鏈竴涓粏鑺傜儲寮曘傛瘡涓粏鑺傜儲寮曚篃鍙互鏈夊涓妧鏈紝鐢ㄦ潵鏀寔scheme鎴栨槸紜歡鑳藉姏fallback銆?br />鏉愯川緇勬垚
涓涓猰aterail鐢變竴涓垨澶氫釜technique緇勬垚錛屽悗鑰呭張鐢變竴涓垨澶氫釜pass緇勬垚錛屼竴涓椂鍒誨彧鏈変竴涓猼echnique鏄椿鍔ㄧ殑銆俻ass瀵逛簬鍦℅PU涓婃墽琛岀敾鎿嶄綔鐨剅enderable鏉ヨ錛屾槸瀹屾暣鐨勫師瀛愭覆鏌撶姸鎬併傚亣濡傞夋嫨鐨勬妧鏈湁涓塸ass錛岄偅涔堟瘡甯т細瀵箁enderable榪涜涓夋鐢繪搷浣溿俻ass鍙互寮曠敤綰圭悊鍗曞厓瀹氫箟錛岃屼笉蹇呭寘鍚換浣曠汗鐞嗗崟鍏冨畾涔夈?br />綰圭悊鍗曞厓
ogre materail涓殑綰圭悊鍗曞厓瀹為檯寮曠敤GPU涓婄殑texture sampler.澶氭暟鐜頒唬鍥懼艦紜歡鏈夊涓猼exture sampler,
ogre鏀寔鐨勭‖浠惰嚦灝戞湁涓涓湁鏁堢殑texture sampler銆傜汗鐞嗗崟鍏冨寘鎷竴涓汗鐞嗙殑寮曠敤錛屽彲浠ユ潵鑷竴涓鐩樻枃浠訛紝鎴栨槸榪愯鏃舵覆鏌擄紝鎴栨槸鏉ヨ嚜澶栭儴瑙嗛嫻併傚彲浠ュ湪姣忎釜pass涓寚瀹氬涓汗鐞嗗崟鍏冦俹gre浼氭嫻嬬‖浠舵敮鎸佺殑鑳藉姏錛屽繀瑕佹椂鎶婁竴涓猵ass鎶樺垎鎴愬涓猵ass銆備婦渚嬫潵璇達紝鍋囪pass涓寚瀹?涓汗鐞嗗崟鍏冿紝鑰岀‖浠跺彧鏀寔4涓紝閭d箞ogre浼氭妸榪欎釜pass鎷嗗垎鎴愪袱涓紝瀵硅繖涓や釜pass鎵ц綰圭悊娣峰悎浠ヨ揪鍒扮浉鍚岀殑璁捐鍔熻兘銆傜汗鐞嗛氬父淇濆瓨鍦╲ideo memory涓紝鐩村埌瀹冧滑涓嶅啀闇瑕併俹gre涓嶄細姣忔闇瑕佹椂閮介氳繃鎬葷嚎浼犺緭綰圭悊錛岄櫎闈炵汗鐞嗙粡甯稿湴浠?br />video memory涓墧闄ゃ傦紙榪欐椂鍙戠敓浜嗙汗鐞嗛渿鑽★紝鍘熷洜鏄湁澶鎴栧お澶х殑綰圭悊鍚屾椂瀛樺湪浜巚edio memory涓級銆?br />綰圭悊鍘嬬緝
鐜頒唬鍥懼艦紜歡鏀寔鍘嬬緝綰圭悊銆俹gre鍙槸綆鍗曞湴鎶婄汗鐞嗘寜鍘熸牱浼犻佷粬浠埌鍥懼艦紜歡涓幓錛屽畠涓嶄細鍘嬬緝綰圭悊銆?br />瀵逛簬閭d簺鍘嬬緝榪囩殑綰圭悊錛屼篃涓嶅繀浜嬪厛澶勭悊瀹冿紝濡傛灉紜歡涓嶆敮鎸佸帇緙╃汗鐞嗭紝ogre浼氬湪榪愯鏃惰В鍘嬬緝銆?br />瀹炰綋
鍦ㄦ覆鏌撴湡闂達紝Entity涓昏浣滀負subentities鐨勫鍣ㄦ潵鐢紝subentities鏄疄闄呯殑娓叉煋鍗曞厓錛坮enderable錛夈?br />subentity涓巗ubmesh鏈変竴涓瀵瑰簲鐨勫叧緋伙紝鍚庤呮彁渚涘師濮嬬殑鏉愯川寮曠敤銆傛蹇典笂鏉ヨ錛宔ntity(subentity)鎻愪緵浜嗗璞$殑娓叉煋灞炴э紝鑰宮esh(submesh)鎻愪緵浜嗗璞$殑緇撴瀯灞炴с?img src ="http://m.shnenglu.com/yuanyajie/aggbug/19703.html" width = "1" height = "1" />

]]>銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎簲绔?鍦烘櫙綆$悊銆鍦烘櫙鏌ヨhttp://m.shnenglu.com/yuanyajie/archive/2007/03/11/19573.html娓呮簮娓告皯娓呮簮娓告皯Sun, 11 Mar 2007 09:24:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/11/19573.htmlhttp://m.shnenglu.com/yuanyajie/comments/19573.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/11/19573.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19573.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19573.html 鍦烘櫙鏌ヨ
鍒涘緩鏌ヨ鐨勪唬浠鋒瘮杈冨ぇ錛岃屾墽琛屼笉鏄係ceneQueryResualt鍙畾涔変簡涓ょ鎴愬憳錛歮ovables涓巜orldFragments.
鎺╃爜涔熼渶瑕佽嚜宸卞畾涔夛紝鑷繁瑙i噴銆傚湪涓涓醬瀵歸綈鐩掑瓙涓煡璇㈢伅鍏夌殑渚嬪瓙濡備笅錛?br />const unsigned int LIGHT_QUERY_MASK = 0x00000001;銆//鎺╃爜瀹氫箟
Light* light1 = mSceneMgr->createLight("Light1");
Light* light2 = mSceneMgr->createLight("Light2");
light1->setPosition(12, 12, 12);
light2->setPosition(5, 5, 5);
light1->setQueryFlags(LIGHT_QUERY_MASK);
light2->setQueryFlags(LIGHT_QUERY_MASK);
AxisAlignedBoxSceneQuery* lightQuery =
mSceneMgr->createAABBQuery(
AxisAlignedBox(0, 0, 0, 10, 10, 10), LIGHT_QUERY_MASK);
// sometime later in the application's code, find out what lights are in the box
SceneQueryResult& results = lightQuery->execute(); //鏌ヨ
// iterate through the list of items returned; there should only be one, and it
// should be light2 created above. The list iterator is MovableObject type.
SceneQueryResultMovableList::iterator it = results.movables.begin();
for (; it != results.movables.end(); it++)
{
// act only on the lights, which should be all we have
assert ((*it)->getQueryFlags() & LIGHT_QUERY_MASK) != 0);
// do whatever it was we needed to do with the lights
}
// destroy the query when we are done with it
mSceneMgr->destroyQuery(lightQuery);

鎴戜滑鐭ラ亾鍦板艦鎬繪槸璧蜂紡涓嶅鉤鐨勶紝褰撲富瑙掑湪涓婇潰琛岃蛋鏃墮渶瑕佹牴鎹湴褰㈢殑楂樺害璋冩暣錛屽彲浠ュ厜綰挎煡璇㈡潵瀹炵幇銆?br />鍘熺悊姣旇緝綆鍗曪細鍚戜富瑙掕剼涓嬫墽琛屽厜綰挎煡璇紝涓庡湴褰㈡湁涓涓氦鐐癸紝鏍規嵁浜ょ偣鐨勯珮搴﹁皟鏁翠富瑙掍綅緗?br />Terrain Clamping
void Entity::clampToTerrain() {
static Ogre::Ray updateRay;
updateRay.setOrigin(m_controlledNode->getPosition() + Ogre::Vector3(0, 15, 0));
updateRay.setDirection(Ogre::Vector3::NEGATIVE_UNIT_Y);
m_raySceneQuery->setRay(updateRay);
Ogre::RaySceneQueryResult& qryResult = m_raySceneQuery->execute();
if (qryResult.size() == 0) {
// then we are under the terrain and need to pop above it
updateRay.setOrigin(m_controlledNode->getPosition());
updateRay.setDirection(Ogre::Vector3::UNIT_Y);
m_raySceneQuery->setRay(updateRay);
}
qryResult = m_raySceneQuery->execute();
Ogre::RaySceneQueryResult::iterator i = qryResult.begin();
if (i != qryResult.end() && i->worldFragment)
{
Ogre::SceneQuery::WorldFragment* wf = i->worldFragment;
m_controlledNode->setPosition(m_controlledNode->getPosition().x,
i->worldFragment->singleIntersection.y,
m_controlledNode->getPosition().z);
}
}
void Entity::init()
{
// lots of other irrelevant entity init stuff goes here
m_raySceneQuery = sm->createRayQuery(
Ogre::Ray(m_controlledNode->getPosition(),
Ogre::Vector3::NEGATIVE_UNIT_Y));
// move this node is such a way that it is above the terrain
clampToTerrain();
}



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎簲绔?鍦烘櫙綆$悊銆鍦板艦http://m.shnenglu.com/yuanyajie/archive/2007/03/09/19504.html娓呮簮娓告皯娓呮簮娓告皯Fri, 09 Mar 2007 09:25:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/09/19504.htmlhttp://m.shnenglu.com/yuanyajie/comments/19504.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/09/19504.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19504.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19504.html Ogre涓殑鍦板艦

浣跨敤terrain.cfg
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鍚嶅瓧

涓婅堪閰嶇疆鏂囦歡瀹氫箟浜嗗熀浜庨珮搴﹀浘鐨勫湴褰€傝繖浜涘弬鏁板畾涔夊彲姒傛嫭涓轟袱綾伙細Ogre浣跨敤絎竴綾諱粠楂樺害鍥句駭鐢熷湴褰?br />mesh涓庢潗璐ㄣ傜浜岀被鏄畾鍒舵潗璐ㄤ笌GPU欏剁偣紼嬪簭錛岃繖鍙互浠f浛ogre鑷姩浜х敓鐨勭潃鑹茬▼搴忋?br />鍙﹀鐨勮鏄庯細
TerrainScenceManager浼氭妸楂樺害鍥懼垎涓哄悜涓猵ages,姣忎釜page鐢卞嚑涓猼iles緇勬垚.鑰屽畠浠篃涓嶈繃鏄釜鏂逛究鐨勫悕瀛楋紝
瀹冧滑閮藉畾涔変簡鍦ㄤ駭鐢熺殑mesh涓竴緇勬瀯鎴愭鏂瑰艦鐨勯《鐐歸泦銆?br />WorldTexture瀹氫箟鐨勭汗鐞嗕笉蹇呬笌鐩爣鍦板艦涓鏍峰ぇ銆?br />PageWorldX錛孭ageWorldZ鍙互緙╂斁涓栫晫涓殑鍦板艦銆?br />MaxHeight 鍦╕鏂瑰悜緙╂斁鍦板艦銆?br />DetailTexture 鍙嬌鐢ㄤ竴涓汗鐞嗭紝濡備嬌鐢ㄥ灞傜汗鐞嗭紝搴旇浣跨敤鑷畾涔塵aterail銆?br />
浠庣▼搴忓姞杞藉湴褰?/font>
setWorldGeometry()鏈夐噸杞藉艦寮忥紝涓縐嶇敤浜庡姞杞介厤緗枃浠訛紝鍙︿竴縐嶆垜浠彲鍦ㄧ▼搴忎腑浣跨敤錛屼互
杈懼埌鎵嬪伐鍔犺澆鐨勫姛鑳姐傝繖閲岋紝SceneData琚?typedef 涓簊td:map,瀹冨瓨鍌ㄤ簡濡傛垜浠湪terrain.cfg
涓湅鍒伴偅浜涘煎銆傚亣璁炬垜浠凡緇忎粠鏌愪釜浜岃繘鍒舵枃浠惰鍏ユ垜浠兂瑕佺殑鍐呭鍒癝ceneData涓傛垜浠鍋?br />鐨勫氨鏄妸璇誨叆鐨勫唴瀹硅漿鎹㈡垚setWorldGeometry()闇瑕佺殑綾誨瀷銆傚厛鐪嬩竴涓嬪嚱鏁板師鍨嬶細
Ogre::SceneManager::setWorldGeometry (聽 DataStreamPtr &聽 stream,聽
聽 const String &聽 typeName = StringUtil::BLANK
聽)聽
DataStreamPtr鏄竴涓櫤鑳芥寚閽?鍥犳浠庡眬閮ㄥ彉閲忎腑榪斿洖鏄畨鍏ㄧ殑,紼嬪簭鐩稿綋鐩磋錛屼笉鍐嶅璇翠簡銆?/p>

Ogre::DataStreamPtr Process_Loader::getSceneDataStream(SceneData &data) {
// create what looks like a config file for the edification of Ogre
std::string mem;
SceneData::iterator it;
for (it=data.begin(); it!=data.end(); it++) {
mem += it->first;
mem += "=";
mem += it->second;
mem += "\n";
}
void *pMem = (void *)new unsigned char[mem.length()+1];
memset(pMem, 0, mem.length()+1);
memcpy(pMem, mem.c_str(), mem.length() + 1);
// stuff this into a MemoryDataStream
Ogre::DataStreamPtr pStr(new Ogre::MemoryDataStream(pMem, mem.length() + 1));
return pStr;
}
// and then elsewhere in the world loader:
Ogre::DataStreamPtr pStr = getSceneDataStream(terrainDef);
m_sceneMgr->setWorldGeometry(pStr);



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎簲绔?鍦烘櫙綆$悊 絎簩閮ㄥ垎 http://m.shnenglu.com/yuanyajie/archive/2007/03/09/19496.html娓呮簮娓告皯娓呮簮娓告皯Fri, 09 Mar 2007 06:25:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/09/19496.htmlhttp://m.shnenglu.com/yuanyajie/comments/19496.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/09/19496.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19496.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19496.html 鍦烘櫙瀵硅薄鍒涘緩
鍦烘櫙涓殑鎵鏈夊璞★紝鍖呮嫭鍙Щ鍔ㄤ笌涓嶅彲縐誨姩鐨勶細lights, cameras, entities,particle system,
billboards, skyboxes, static geometry , world geometry.閮界敱鍦烘櫙綆$悊鍣ㄦ潵鍒涘緩銆傚満鏅腑鐨?br />浠諱綍涓滆タ閮界敱鍦烘櫙綆$悊鍣ㄦ潵綆$悊銆備換浣曢氳繃鍦烘櫙綆$悊鍣ㄥ緱鍒扮殑涓滆タ錛岄兘蹇呴』鐢卞満鏅鐞嗗櫒鏉ラ攢姣併?br />鐢ㄦ埛涓嶈兘delete閫氳繃鐢卞満鏅鐞嗗櫒寰楀埌鐨勬寚閽堛?br />鍦烘櫙緇撶偣鍙湁涓涓埗緇撶偣錛屽彲鑳芥湁澶氫釜瀛愮粨鐐廣傚彲浠ラ殢鎰忕殑attach 鍜?detach 榪欎簺鍦烘櫙涓殑緇撶偣銆?br />鍦ㄦ槑紜憡璇夊満鏅鐞嗗櫒閿姣佽繖浜涚粨鐐瑰墠錛屽畠浠繪槸瀛樺湪銆傚鏋滀笉鎯蟲覆鏌撳満鏅腑鐨勬煇浜涚粨鐐逛笂鐨勫唴瀹癸紝
鎴戜滑鍙互寰堟柟渚垮湴瀵瑰ス浠繘琛宒etach.鍦烘櫙涓繪槸瀛樺湪涓涓猂oot緇撶偣銆傚彲浠ユ妸澶氫釜鍐呭瀵硅薄attach鍒?br />鍚屼竴涓粨鐐逛笂銆備笉鑳藉悓鏃舵妸涓涓疄渚嬪璞℃寕鍒頒袱涓満鏅粨鐐逛笂錛屼竴涓満鏅粨鐐逛篃涓嶈兘鏈変袱涓埗緇撶偣銆?br />鎬繪槸鍦烘櫙緇撶偣鍦ㄦ墽琛岀┖闂存搷浣滐紙騫崇Щ錛屾棆杞紝緙╂斁錛夎屼笉鏄疄浣撳璞°?br />鍦烘櫙鏌ヨ
鍦烘櫙綆$悊鍣ㄧ殑絎簩涓渶甯哥敤鐨勫姛鑳芥槸榪涜鍦烘櫙鏌ヨ銆傚寘鎷皠綰挎煡璇紝鐞冩煡璇紝緇戝畾鐩掓煡璇紝緇戝畾騫抽潰
鏌ヨ錛岀浉浜ゆ煡璇€俆errain clamping錛氬湪宕庡矕涓嶅鉤鐨勮礬涓婏紝鍕囨暍鍦板悜涓嬪彂灝勪竴鏉熷厜錛屼笉綆′綘鍛婅瘔鎴戜綘鏈?br />澶氶珮錛屾垜姘歌繙鎶婁綘韙╁湪鑴氫笅..錛堟槸涓嶆槸涓嶅お鍍忕瑪璁幫紵^_^)銆傛墍鏈夎繖浜涙煡璇㈤兘鏄?maskble鐨勶紝榪欒〃鏄庡彲
浠ュ湪鏌ヨ鏃惰繃婊ゆ帀涓嶅叧蹇冪殑瀵硅薄綾誨瀷銆傚鐞冩煡璇㈡椂錛屽彧鎯崇湅鐪嬪畠鍖呭惈浜嗗灝憀ights,鍏朵粬鐨勫璞″嵆浣垮寘鍚?br />鍦ㄧ悆閲屼篃涓嶅繀榪斿洖錛屽疄闄呬笂鏍規湰涓嶇敤璁$畻銆?br />絀洪棿鍏崇郴涓?D鍙樻崲
world , parent , local涓栫晫絀洪棿涓殑鍙樻崲鏄浉瀵逛簬鍏ㄥ眬鍧愭爣緋葷殑婧愮偣(0,0,0),榪欎篃鏄痳oot scene node鐨勪綅緗傚洜姝ゅ彲浠ヨ涓轟笘鐣岀┖闂翠腑鐨勫彉鎹㈡槸鐩稿浜嶳oot scene node鐨勩傜埗絀洪棿涓殑鍙樻崲鏄浉瀵逛簬鍦虹偣緇撶偣鐨勭埗緇撶偣鐨勶紝鏈湴絀洪棿鐨勫彉鎹㈡槸鐩稿浜庣墿浣撴墍鎸傛帴鐨勭粨鐐圭殑銆傚ぇ澶氭暟鎯呭喌涓嬶紝鎴戜滑浼氬湪鐖剁┖闂翠腑鍋氬鉤縐伙紝鍦ㄦ湰鍦扮┖闂翠腑鍋氭棆杞紝ogre涓殑榪欎簺鎿嶄綔錛岄兘鏄湪涓婅堪鐨勮繖縐嶆柟寮忎笅銆?br />object space
浠庢ā鍨嬪鍑虹殑欏剁偣鏁版嵁涓庡畠鐨勬簮鐐逛箣闂寸殑鍏崇郴鏄笉鍙樼殑錛屽綋瀹冭鎸傚埌鍦烘櫙緇撶偣涓婏紝榪欎釜緇撶偣灝辨槸璁や負鏄?br />瀹冪殑婧愮偣銆傚緩妯℃椂涓庡鍑烘椂涓嶅亣璁炬祴閲忓崟浣嶏紝浠ヤ笘鐣屽崟浣嶅鍑猴紙涔熷氨鏄棤鍗曚綅錛夈?br />ogre騫崇Щ涓庤緗綅緗笉鍚岋細騫崇Щ鍙互鏈夊涓弬鐓х偣錛坵orld,local,parent space),鑰岀敤setPosition()
鏃訛紝鎬繪槸鐩稿浜巔arent-space銆鍧愭爣緋葷殑銆?br />鍙Щ鍔ㄧ殑鍦烘櫙瀵硅薄
鍩轟簬璧勬簮鐨勫璞★細鏈鏅氱殑鏄痬esh(闄即鐫skeleton)錛岃繖縐嶇被鍨嬬殑瀵硅薄琚祫婧愮鐞嗙郴緇熺鐞嗐?br />鍦烘櫙綆$悊鍣ㄤ笉璐熻矗瀹為檯鐨勮杞斤紝瀹冭皟鐢∣greuq璧勬簮綆$悊鍣ㄦ潵瀹屾垚銆?br />鍩轟簬鍥涜竟褰㈢殑瀵硅薄錛氱矑瀛愮郴緇燂紝鍏憡鏉匡紝ribbon trail,overlay,澶╃┖鐩掋傚畠浠氬父鏄潰鍚戠浉鏈虹殑錛?br />浣跨敤鍔ㄦ佹潗璐ㄣ傚畠浠殑涓昏璧勬簮鏄剼鏈紝榪欎簺鑴氭湰瀹氫箟浜嗗浣曟槧灝勬潗璐紝浠ュ強瀹冧滑鐨勭敓鍛芥湡錛堝浜庣矑瀛愮郴緇熶笌ribbon trail鏉ヨ)銆傚ぉ絀虹洅鐩存帴鐢ㄥ満鏅鐞嗗櫒鏉ュ畾涔夈?br />skyplane,skydome,skybox
涓昏鐨勭浉浼肩偣鏄畠浠笌鐩告満淇濇寔涓涓父閲忕殑璺濈銆傚畠浠彲浠ュ湪鍦烘櫙涓叾瀹冨璞?br />涔嬪墠鎴栨槸涔嬪悗娓叉煋銆傚畠浠嬌鐢ㄦ櫘閫氱殑ogre material,鍥犳綰圭悊鍔ㄧ敾涓庡叾浠栫汗鐞嗘病鏈変粈涔堜笉鍚屻傚畠浠彲浠?br />琚満鏅鐞嗗櫒鎵撳紑鎴栧叧闂紝涓庣浉鏈虹殑璺濈涔熷彲浠ヨ緗?br />skyplane 鏄竴涓鉤闈€傜敤璺濈鍜屾硶綰垮畾涔夊畠涓庣浉鏈虹殑浣嶇疆鍏崇郴銆傚彲浠ュ集鏇詫紝鍙互鍒嗗涓錛屽彲瀵圭汗鐞嗚繘琛屽嬈″鉤閾恒俿kydome鐢變簲涓鉤闈㈢粍鎴愶紝搴曢儴絀恒備嬌鐢ㄦ敼鍙樼汗鐞嗗潗鏍囩殑鏂瑰紡鏉ヨ揪鍒板瑙備笂鐨勬洸鐜囧彉鍖栥傛湁涓涓肩敤鏉ヨ皟鑺傦紝鍊艱秺浣庯紝鏇茬巼瓚婃煍鍜岋紝鍊艱秺楂橈紝瓚婇櫋宄俿kybox 鍍弒kydome,浣嗕粬涓嶈兘鈥滃集鏇測濇潗璐ㄥ潗鏍囥傚畠鍙互浣跨敤绔嬫柟鏉愯川銆傚彲浣跨敤紜歡鍔犻熷姛鑳借揪鍒板緢濂芥覆鏌撴晥鐜囥?br />鍏?/font>
浣跨敤鍏夌殑闄愬埗錛氬崟涓氶亾閫氬父鏈澶ф敮鎸?涓伅銆備嬌鐢ㄦ洿澶氱殑鐏紝閫氳繃澶氶氶亾銆?br />鍏変笌鐗╀綋涔嬮棿鐨勮窛紱伙紝鍐沖畾鍏夊鐗╀綋瀹為檯鐨勫獎鍝嶃侽gre鏀寔鐐瑰厜婧愶紝騫崇瓑鍏夛紝鑱氬厜鐏?br />涓栫晫鍑犱綍
褰撳垱寤哄熀浜巑esh鐨勬櫙鐗╂垨鍏沖崱錛屽簲璇ュ垎鎴愯緝灝忕殑閮ㄥ垎錛屼互渚夸簬瑁佸噺銆侾aging Scene Manager鎻愪緵浜嗚繖鏍風殑宸ュ叿銆?br />絀洪棿鍒嗗壊鏂規
Ogre鏄熀浜庣‖浠跺姞閫熸覆鏌撳紩鎿庯紝鍥犳浠ユ渶澶у寲鍑犱綍浣揵atching鐨勬柟寮忎細姣斿熀浜庡疄闄呭杈瑰艦榪涜絀洪棿鍒嗗壊
鏁堟灉瑕佸ソ鐨勫銆侻odern GPUs prefer to render a few large batches銆of geometry instead of
many small batches.
The more visible geometry you can render in a single batch, the better your application鈥檚
performance is likely to be (within reason, of course; other classic issues such as fillrate and
overdraw can still take over if you just blindly blast polygons at the GPU, batched or not).

闈欐佸嚑浣曚嬌鐢ㄦ敞鎰?/font>錛?br />闈欐佸嚑浣曞湪浣跨敤涔嬮棿蹇呴』琚緩绔嬨?br />浣跨敤鐩稿悓鏉愯川鐨勫嚑浣曚綋灝嗚鏀懼埌鍚屼竴娓叉煋鎿嶄綔涓?batch):different materials still require a separate batch.
鍔姏鐨勬柟鍚戞槸錛屾渶澶у寲涓涓皟鐢ㄧ殑涓夎褰㈡暟錛屾渶灝忓寲璋冪敤鐨勬鏁般?br />涓嶈兘縐誨姩琚寘鍚湪static geometry涓殑瀵硅薄銆傚彧鏈変竴涓笘鐣岃漿鎹㈠簲鐢ㄥ埌瀹屾暣鐨剆tatic geometry瀵硅薄涓?
姣斿悓鏍瘋妯$殑movable geometry鍗犵敤鏇村鐨勫唴瀛樸?br />鍋囧緇勪腑鐨勪換浣曚笢瑗垮湪瑙嗛敟涔嬪唴錛岄偅涔堢粍涓殑鎵鏈夊璞¢兘灝嗚娓叉煋銆?/p>



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎簲绔?鍦烘櫙綆$悊 絎竴閮ㄥ垎http://m.shnenglu.com/yuanyajie/archive/2007/03/08/19427.html娓呮簮娓告皯娓呮簮娓告皯Thu, 08 Mar 2007 07:08:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/08/19427.htmlhttp://m.shnenglu.com/yuanyajie/comments/19427.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/08/19427.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19427.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19427.html Ogre 鍦烘櫙綆$悊

姣忎釜3D寮曟搸閮戒細鐢╯cene graph 鏉ョ粍緇囧畠鐨勫彲娓叉煋瀵硅薄銆俿cene graph銆鎬繪槸浼氫負浜嗘洿蹇湴鎼滅儲涓庢煡璇㈠仛
浼樺寲錛屾彁渚涚粰鐢ㄦ埛鏌ユ壘鐩爣瀵硅薄闄勮繎鐗瑰畾瀵硅薄鐨勫姛鑳斤紝鍏佽鏌ユ壘錛屾帓搴忥紝鍓旈櫎澶氳竟褰紝浠ュ疄鐜版洿楂樻晥鐨勬覆鏌撱傚伓灝旓紝scene graph涔熺敤浜庣鎾炴嫻嬨傛湁鏃訛紝涓涓崟鐙殑scene graph鍙鐢ㄤ簬紼嬪簭涓殑鎵鏈夊瓙緋葷粺錛屽寘鎷?br />闊蟲晥涓庣墿鐞嗐?br />Ogre浣跨敤鎻掍歡鏈哄埗鏉ュ疄鐜板満鏅鐞嗗姛鑳姐係cenceManager鍙槸鎺ュ彛錛屼粬鍙互鏈夊緢澶氬叿浣撶殑瀹炵幇銆侽gre鍏佽
鍦ㄥ悓涓鏃跺埢鍚屼竴鍦烘櫙涓嬌鐢ㄥ涓猄cene Manager,榪欐牱鍦ㄤ笉鍚岀殑鍦烘櫙綾誨瀷鍒囨崲鏃跺甫鏉ュソ澶勩?br />
鍦烘櫙綆$悊鍣ㄧ殑璐d換
1錛屽垱寤猴紝鏀劇疆鍦烘櫙涓殑鍙Щ鍔ㄥ璞★紝light,camera錛屽茍鍙互鍦ㄥ浘褰㈤亶鍘嗕腑鏈夋晥鍦拌闂畠浠?br />2錛屽姞杞斤紝瑁呴厤world geometry(瀹冮氬父寰堝ぇ錛屽悜鍥涘寤朵幾錛屼笉鍙Щ鍔級
3錛屽畬鎴愬満鏅煡璇紝渚嬪鍙互鍥炵瓟榪欐牱鐨勯棶棰橈細鍦ㄤ笘鐣岀┖闂寸殑鐗瑰畾鐐圭敾涓涓悆浣擄紝瀹冧細鍖呭惈鍝簺瀵硅薄錛?br />4錛屽墧闄や笉鍙瀵硅薄錛屾妸鍙瀵硅薄鏀懼叆娓叉煋闃熷垪榪涜娓叉煋
5錛屼粠褰撳墠鍙覆鏌撶殑閫忚鍥句腑緇勭粐錛屾嫞閫夊悇鏂瑰悜鍏夌収
6錛岃緗紝娓叉煋鍦烘櫙涓殑鎵鏈夐槾褰?br />7銆璁劇疆錛屾覆鏌撳満鏅腑鐨勫叾浠栧璞★紙濡傝儗鏅紝澶╃┖鐩掞級
8銆浼犻掔粍緇囪壇濂界殑鍐呭鍒版覆鏌撶郴緇熻繘琛屾覆鏌?/p>

鍦烘櫙綆$悊鍣ㄧ被鍨?br />
浠ュ垎鏋愭簮鐮佺殑鏂瑰紡璁ㄨ涓涓嬫彃浠剁殑鍔犺澆鏈哄埗涓庣壒瀹氬満鏅鐞嗗櫒鏄浣曡繘琛岃繍鐢ㄧ殑銆?br />涓婁竴绔犳彁鍒頒簡浠ユ墜宸ョ殑鏂瑰紡鍒濆鍖杘gre,鍖呮嫭鎵嬪伐鍔犺澆鍦烘櫙綆$悊鍣細
root->loadPlugin("Plugin_OctreeSceneManager");
鍏跺疄鎵璋撶殑鑷姩鏂瑰紡涓嬶紝Root:Root()涓篃浼氶棿鎺ヨ皟鐢ㄥ埌loadPlugin()鏂規硶錛岃繖宸插湪鍓嶉潰鐨勭瑪璁?br />(閰嶇疆鏂囦歡Plugins.cfg )涓彁鍒拌繃銆傛棦鐒剁壒瀹氱鐞嗗櫒浠ユ彃浠剁殑褰㈠紡錛坉ll鏂囦歡錛夌粰鍑猴紝涓嬮潰鍏堢湅濡備綍
鍔犺澆dll. 榪涘叆婧愮爜錛氭爣鍙瘋〃鏄庢墽琛岄『搴忋?br />void Root::loadPlugin(const String& pluginName)
聽{
// Load plugin library
銆銆銆 DynLib* lib = DynLibManager::getSingleton().load( pluginName ); //(1)
聽聽// Store for later unload
聽mPluginLibs.push_back(lib); //(4)
// Call startup function
銆銆銆銆DLL_START_PLUGIN pFunc = (DLL_START_PLUGIN)lib->getSymbol("dllStartPlugin"); //(5)
聽// This must call installPlugin
聽pFunc(); //(6)

聽}
DynLib* DynLibManager::load( const String& filename)聽 //(2)
{
聽聽聽聽聽聽聽 DynLib* pLib = new DynLib(filename);
聽pLib->load();聽聽聽聽聽聽聽
聽聽聽聽聽聽 聽mLibList[filename] = pLib;
聽return pLib;
}
void DynLib::load() //(3)
{
m_hInst = (DYNLIB_HANDLE)DYNLIB_LOAD( name.c_str() );
}
絎?font color="#ff0000">(3)
涓殑瀹忓畾涔夊涓嬶細
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#聽聽聽 define DYNLIB_HANDLE hInstance
#聽聽聽 define DYNLIB_LOAD( a ) LoadLibrary( a )
鍒版錛孌LL琚姞杞藉埌鍐呭瓨,絎?font color="#ff0000">(4)
姝ワ紝mPluginLibs鏄釜STL瀹瑰櫒錛屽畠瀛樻斁鍔ㄦ佸簱鎸囬拡銆?br />絎?font color="#ff0000">(5)
姝ワ紝榪涘叆婧愮爜鍙互鐪嬪埌
void* DynLib::getSymbol( const String& strName ) const throw()
聽聽聽 {
聽聽聽聽聽聽聽 return (void*)DYNLIB_GETSYM( m_hInst, strName.c_str() );
聽聽聽 }
鍏朵腑瀹忓畾涔夛細define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )錛屽緢鏄劇劧錛屽畠鍙栧緱涓涓悕涓?br />dllStartPlugin鐨勫嚱鏁版寚閽堬細涓嶉槻鍐嶇湅鐪嬪畯瀹氫箟錛?typedef void (*DLL_START_PLUGIN)(void);
璇存槑DLL_START_PLUGIN涓哄弬鏁頒負絀猴紝榪斿洖鍊間負絀虹殑鍑芥暟鎸囬拡銆?br />姣忎釜娉ㄥ唽鍒皁gre鐨刣ll閮藉疄鐜頒簡榪欎釜綰﹀畾鍑芥暟銆傚浜庢垜浠綋鍓嶈璁虹殑鍦烘櫙綆$悊鍣≒lugin_OctreeSceneManager
鏉ヨ錛屾垜浠彲浠ユ壘鍒板叾鐩稿簲鐨勫畾涔?瀹冨湪絎?font color="#ff0000">(6)
姝ヤ腑鎵ц

OctreePlugin* octreePlugin;
extern "C" void _OgreOctreePluginExport dllStartPlugin( void )
{
聽聽 // Create new scene manager
聽聽聽 octreePlugin = new OctreePlugin();銆//(6-1)

聽聽 // Register
聽聽聽 Root::getSingleton().installPlugin(octreePlugin); //(6-2)

}
紼嬪簭鎵ц鍒?font color="#ff0000">(6-1)姝ワ紝new 鏉ヤ竴涓狾ctreePlugin,鎴戜滑鐪嬩竴涓嬪畠鐨勫畾涔夛細
class OctreePlugin : public Plugin
{
聽public:
聽聽OctreePlugin();
聽聽const String& getName() const;
聽聽void install();
聽聽聽void initialise();
聽聽聽void shutdown();
聽聽聽void uninstall();
聽protected:
聽聽OctreeSceneManagerFactory* mOctreeSMFactory;
聽聽TerrainSceneManagerFactory* mTerrainSMFactory;
聽聽TerrainPageSourceListenerManager* mTerrainPSListenerManager;

};

鎴戜滑浼氭敞鎰忓埌瀹冨寘鍚袱涓伐鍘傜被鎸囬拡:OctreeSceneManagerFactory,TerrainSceneManagerFactory
浠栦滑灝辨槸鐢ㄦ潵鐢熶駭鐗瑰畾ScenManager鐨勶紝紼嶅悗璁ㄨ銆傚厛鐪?font color="#ff0000">(6-2)姝ワ細
void Root::installPlugin(Plugin* plugin)
{
聽mPlugins.push_back(plugin);銆銆//(6-2-1)
聽plugin->install();聽聽聽聽聽聽聽聽聽聽聽聽 //(6-2-2)
聽// if rendersystem is already initialised, call rendersystem init too
聽if (mIsInitialised)
聽{
聽plugin->initialise();聽聽聽聽聽聽聽聽 //(6-2-3)
聽}
}
//(6-2-1)姝ユ妸鎻掍歡鏀懼埌瀹瑰櫒涓傜湅鐪?font color="#ff0000">(6-2-2)鍋氫簡浠涔堬細
void OctreePlugin::install()
聽{
聽聽// Create objects
聽聽mOctreeSMFactory = new OctreeSceneManagerFactory();
聽聽mTerrainSMFactory = new TerrainSceneManagerFactory();
聽聽mTerrainPSListenerManager = new TerrainPageSourceListenerManager();

聽}
鍛碉紝鍒氭墠榪樿涓や釜宸ュ巶綾繪寚閽堬紝鐜板湪鎶婁袱涓伐鍘傚緩璧鋒潵錛屼互鍚庡彲浠ョ敤鏉ョ敓浜т笢瑗夸簡銆?br />緇х畫鐪嬬湅(6-2-3):
void OctreePlugin::initialise()
聽{
聽聽// Register
聽聽Root::getSingleton().addSceneManagerFactory(mOctreeSMFactory);
聽聽Root::getSingleton().addSceneManagerFactory(mTerrainSMFactory);
聽}
鍝︼紝鎶婅繖涓や釜宸ュ巶娉ㄥ唽鍒癛oot涓紝璁㏑oot鍙互浣跨敤瀹冧滑銆傚晩榪欏彞璇濇湁鐐歸棶棰橈紝Root鍙槸闂存帴鐨勭敤鍒幫紝
鐩存帴闆囦富鏄?SceneManagerEnumerator* mSceneManagerEnum;瀹冭鍖呭惈鍦≧oot涓備簬鏄垜浠彲浠ョ湅鍒?br />void Root::addSceneManagerFactory(SceneManagerFactory* fact) //(6-2-3-1)
聽{
聽聽mSceneManagerEnum->addFactory(fact);
聽}

宸ュ巶宸茬粡鏈変簡錛屾垜浠浣曞埄鐢ㄨ繖涓伐鍘傜敓浜у嚭鎴戜滑鎯沖埌鐨勪笢瑗?SceneManager)鍛紵
鍥炲繂涓婁竴绔犵殑鎵嬪伐鍒濆鍖栬繃紼嬩腑錛屾垜浠竴鑸敤浠ヤ笅璇彞鏉ュ垱寤篠ceneManager:
聽 SceneManager *sceneMgr = root->createSceneManager(ST_GENERIC); //(A)
涔熷彲浠ヨ繖鏍風敤
聽 sceneMgr = ogre->createSceneManager("OctreeSceneManager"); //(B)
姣忎釜宸ュ巶綾婚兘鐢ㄤ竴涓瓧絎︿覆琛ㄧず鍏剁被鍨嬨備笂闈㈣鐨勪袱涓伐鍘傚垎鍒嬌鐢ㄧ殑瀛楃涓蹭負錛氣淭errainSceneManager鈥濓紝"OctreeSceneManager"
(A)璇彞鑲畾浼氳皟鐢ㄥ伐鍘傜被鐨勬柟娉曟潵浜х敓瀹為檯鐨凷ceneManager,涓嬮潰鐪嬫簮鐮侀獙璇佷竴涓嬶細
SceneManager* Root::createSceneManager(const String& typeName,
聽聽const String& instanceName)
聽{
聽聽return mSceneManagerEnum->createSceneManager(typeName, instanceName);
聽}
緇х畫鎸栵細
SceneManager* SceneManagerEnumerator::createSceneManager(
聽聽const String& typeName, const String& instanceName)
聽{
聽聽SceneManager* inst = 0;
聽聽for(Factories::iterator i = mFactories.begin(); i != mFactories.end(); ++i)
聽聽{
聽聽聽if ((*i)->getMetaData().typeName == typeName)
聽聽聽{
聽聽聽聽if (instanceName.empty())
聽聽聽聽{
聽聽聽聽聽// generate a name
聽聽聽聽聽StringUtil::StrStreamType s;
聽聽聽聽聽s << "SceneManagerInstance" << ++mInstanceCreateCount;
聽聽聽聽聽inst = (*i)->createInstance(s.str());
聽聽聽聽}
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽inst = (*i)->createInstance(instanceName);
聽聽聽聽}
聽聽聽聽break;
聽聽聽}
聽聽}
聽}
涓婅堪浠g爜寰堢畝鍗曪細鍥犱負鎵ц(6-2-3-1)宸茬粡榪囧疄闄呭伐鍘傜被瀹炰緥榪涜浜嗘敞鍐屻備簬鏄亶鍘嗘瘡涓伐鍘傚疄渚嬶紝
鎵懼埌綾誨瀷鐩哥鐨勩傛壘鍒頒箣鍚庯紝濡傛灉娌℃湁浼犲満鏅鐞嗗櫒瀹炰緥鐨勫悕瀛楋紝灝辮搗涓悕瀛椼傜劧鍚庣敤榪欎釜鍚嶅瓧
鐢熶駭鍑轟竴涓疄渚嬫潵銆侰reateInstance娌″共浠涔堬紝new銆鍛椼?br />SceneManager* OctreeSceneManagerFactory::createInstance(
聽const String& instanceName)
{
聽return new OctreeSceneManager(instanceName);
}
灝辨槸榪欐牱銆侽ctreeSceneManager and TerrainSceneManager 鐨勫姛鑳介兘鏄敱涓涓狣LL鎻愪緵鐨勩傚畠浠殑鍏崇郴鏄細class _OgreOctreePluginExport TerrainSceneManager : public OctreeSceneManager錛屾寜鐓т竴鑸殑綾誨叧緋婚昏緫錛?br />鎴戜滑鐭ラ亾媧劇敓綾諱竴鑸姛鑳介兘姣旂埗綾誨己澶э紝鐖剁被搴旂敤浜庝竴鑸満鏅紝瀛愮被閽堝鐗瑰畾鍦烘櫙銆傝繖涓昏緫鍦ㄨ繖閲屾槸瀵圭殑銆傛湰鏉ユ槸鍐欒涔︾瑪璁幫紝璺戦浜嗭紝鎵撲綇銆?/p>



娓呮簮娓告皯 2007-03-08 15:08 鍙戣〃璇勮
]]>銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎洓绔?寮濮嬩嬌鐢∣GREhttp://m.shnenglu.com/yuanyajie/archive/2007/03/07/19361.html娓呮簮娓告皯娓呮簮娓告皯Wed, 07 Mar 2007 06:14:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/07/19361.htmlhttp://m.shnenglu.com/yuanyajie/comments/19361.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/07/19361.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19361.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19361.html娓呮簮娓告皯銆gameogre@gmail.com
鏃ュ織緋葷粺錛?br />鏃ュ織璁板綍浜嗗熀浜巓gre鐨勭▼搴忔瘡嬈¤繍琛屾椂鐨勬墍鏈変簨浠訛紝緋葷粺鍒濆鍖栵紝鐘舵侊紝鎬ц兘淇℃伅銆傝緭鍑虹殑鍐呭琚斁鍦ㄧ鐩樻枃浠朵笂錛屾枃浠剁己鐪佸悕鏄痮gre.log銆備篃鍙互鎵嬪姩鏄劇ず鍒涘緩鏃ュ織緋葷粺,榪欓渶瑕佸湪鍒涘緩Root瀵硅薄涔嬪墠瀹炴柦銆?br />// create an instance of LogManager prior to using LogManager::getSingleton()
LogManager* logMgr = new LogManager;
Log *log = LogManager::getSingleton().createLog("mylog.log", true, true, false);
// third param is not used since we already created a log in the previous step
Root *root = new Root("", "");
鍙互鐢∣gre LogManager娉ㄥ唽涓涓狶og Listener, 浠ヤ換浣曟柟寮忛噸瀹氬悜log data銆傚彲浠ョ敤榪欑鏂瑰紡鏉ュ睆钄戒換浣曟棩蹇椾俊鎭傜劧鍚庤繕涓涓洿綆鍗曠殑鏂規硶杈懼埌涓婅堪鐩殑錛氬湪瀹炰緥鍖朢oot涔嬪墠錛屽綋瀹炰緥鍖栦竴涓狶ogManager鍚庯紝涓嶈皟鐢╟reateLog()鏂規硶銆?br />浠ヤ笅鏄疄鐜版棩蹇椾俊鎭埅嫻佺殑浠g爜鐗囨柇錛?br />class MyLogListener : public LogListener
{
public:
void write (const String& name, const String& message,
LogMessageLevel level, bool maskDebug)
{
// redirect log output here as needed
};
MyLogListener *myListener = new MyLogListener;
// this is the same as calling LogManager::getSingletonPtr() after the
// LogManager has first been instanced; the same pointer value is returned
LogManager *logMgr = new LogManager;
LogMgr->addListener(myListener);
logMgr->createLog("mylog.log", true, false, true);
logMgr->setLogDetail(LL_NORMAL);
Root *root = new Root("", "", "mylog.log");
Ogre鎵嬪姩鍒濆鍖?/font>
int main(int argc, char *argv[])
{

聽// tell Root not to load from any plugins or settings file
聽Root *root = new Root("", "");

聽// Load feature plugins. Scene managers will register
聽// themselves for all scene types they support
聽root->loadPlugin("Plugin_CgProgramManager");
聽root->loadPlugin("Plugin_OctreeSceneManager");

聽// load rendersystem plugin(s). The order is important in that GL
聽// should be available on on platforms, while D3D9 would be available
聽// only on Windows -- the try/catch will intercept the exception in this
聽// case where D3D9 is not available and continue gracefully
.
聽try {
聽聽root->loadPlugin("RenderSystem_GL");
聽聽root->loadPlugin("RenderSystem_Direct3D9");
聽}
聽catch (...) {}

聽try {
聽聽// We'll simulate the selection of a rendersystem on an arbirtary basis; normally
聽聽// you would have your own code to present the user with options and select the
聽聽// rendersystem on that basis. Since a GUI is beyond the scope of this example, we'll
聽聽// just assume the user selected OpenGL.
聽聽RenderSystemList *rList = root->getAvailableRenderers();
聽聽RenderSystemList::iterator it = rList->begin();
聽聽RenderSystem *rSys = 0;

聽聽while (it != rList->end()) {
聽聽聽
聽聽聽rSys = *(it++);
聽聽聽if (rSys->getName().find("OpenGL")) {
聽聽聽
聽聽聽聽root->setRenderSystem(rSys);
聽聽聽聽break;
聽聽聽}
聽聽}

聽聽// check to see if a render system was selected; if we reached the end of the list
聽聽// without selecting a render system then none was found
.
聽聽if (rSys == 0) {
聽聽聽delete root;
聽聽聽std::cerr << "No RenderSystem available, exiting..." << std::endl;
聽聽聽return -1;
聽聽}

聽聽// We can initialize Root here if we want. "false" tells Root NOT to create
聽聽// a render window for us
聽聽root->initialise(false);

聽聽// set up the render window with all default params
聽聽RenderWindow *window = rSys->createRenderWindow(
聽聽聽"Manual Ogre Window",聽// window title
聽聽聽800,聽聽聽聽聽// window width, in pixels
聽聽聽600,聽聽聽聽聽// window height, in pixels
聽聽聽false,聽聽聽聽聽// fullscreen or not
聽聽聽0);聽聽聽聽聽聽// use defaults for all other values

聽聽// from here you can set up your camera and viewports as normal
聽聽// get a pointer to the default base scene manager -- sufficient for our purposes

聽聽SceneManager *sceneMgr = root->createSceneManager(ST_GENERIC);

聽聽// create a single camera, and a viewport that takes up the whole window (default behavior)
聽聽Camera *camera = sceneMgr->createCamera("MainCam");
聽聽Viewport *vp = window->addViewport(camera);
聽聽vp->setDimensions(0.0f, 0.0f, 1.0f, 1.0f);
聽聽camera->setAspectRatio((float)vp->getActualWidth() / (float) vp->getActualHeight());
聽聽camera->setFarClipDistance(1000.0f);
聽聽camera->setNearClipDistance(5.0f);

聽聽// Run the manual render loop. Since we are not using a frame listener in this case, we
聽聽// will count to 15 seconds and then instead of exiting, we'll change the render window settings
聽聽// and re-initialize it.
聽聽bool renderLoop = true;
聽聽Timer *timer = Ogre::PlatformManager::getSingleton().createTimer();
聽聽timer->reset();
聽聽float s = 0.0f;

聽聽while (renderLoop && window->isActive()) {

聽聽聽renderLoop = root->renderOneFrame();

聽聽聽// accumulate total elapsed time
聽聽聽s += (float)timer->getMilliseconds() / 1000.0f;

聽聽聽// if greater than 15 seconds, break out of the loop
聽聽聽if (s >= 15.0f)
聽聽聽聽renderLoop = false;

聽聽聽// we must call the windowing system's message pump each frame to
聽聽聽// allow Ogre to process messages
聽聽聽//PlatformManager::getSingleton().messagePump();
聽聽}
聽}
聽catch (Exception &e) {
聽聽std::cerr << e.getFullDescription() << std::endl;
聽}

聽delete root;
聽return 0;
}

瑙嗗彛
閫氳繃瑙嗗彛涓婄殑涓鐐逛笌鐩告満鐨勫師鐐逛駭鐢熶笘鐣岀┖闂翠腑鐨勪竴鏉″厜綰?br />// x and y are in "normalized" (0.0 to 1.0) screen coordinates
Ray getCameraToViewportRay(Real x, Real y) const;

瑙嗗彛,鍒涘緩澶氫釜瑙嗗彛錛岄氳繃Z搴忥紙瓚婇珮瓚婂湪涓婏級銆紜畾瑕嗙洊鏁堟灉錛屾瘡涓鍙e彲浠ユ湁涓嶅悓鐨勮儗鏅?br />// assume window is a valid pointer to an existing render window, and
// a valid pointer to an existing camera instance
Viewport *vpTop, *vpBottom;
// second parameter is z-order, remaining params are position and size,
vpBottom = window->addViewport(camera, 0);
// create a smaller viewport on top, in the center, 25% of main vp size
vpTop = window->addViewport(camera, 1,
0.375f, 0.375f,
0.25, 0.25);
// set the background of the top window to blue (the default is black
// need to set the bottom window explicitly)
vpTop->setBackgroundColour(ColourValue(0.0f, 0.0f, 1.0f));
// an alternate way to set the color is to use the manifest constant
// vpTop->setBackgroundColour(ColourValue::Blue);

鍦ㄥ瑙嗗彛鎯呭喌涓嬶紝overlay緙虹渷鍦ㄦ瘡涓鍙d腑娓叉煋銆傚彲浠ュ叧鎺夈係kybox, Shadow涔熸槸濡傛銆?br />vpTop->setOverlaysEnabled(false);
vpTop->setSkiesEnabled(false);
vpTop->setShadowsEnabled(true);



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎笁绔?璁捐姒傝 絎簩閮ㄥ垎http://m.shnenglu.com/yuanyajie/archive/2007/03/06/19280.html娓呮簮娓告皯娓呮簮娓告皯Tue, 06 Mar 2007 03:18:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/06/19280.htmlhttp://m.shnenglu.com/yuanyajie/comments/19280.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/06/19280.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19280.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19280.html娓呮簮娓告皯銆 mailto:gameogre@gmail.com

瀛愮郴緇熸瑙?/font>
Root Object
Root 鏄▼搴忚繘鍏ョ偣錛屽畠鏄竴涓猣a莽ade 綾伙紝鎻愪緵浜嗚闂瓙緋葷粺鐨勬柟渚跨殑鏂規硶銆傞氳繃瀹冨彲浠ュ紑鍚痮gre,涔熷彲鑳介氳繃瀹冨叧闂璷gre銆?/font>
璧勬簮綆$悊
鍦ㄦ覆鏌撳満鏅腑浣跨敤鐨勪換浣曚笢瑗塊兘琚涓鴻祫婧愩傛墍鏈夌殑璧勬簮鏈緇堥兘琚竴涓崟涓被瀵硅薄綆$悊錛歊esourceGroupManager錛屽畠璐熻矗瀹氫綅璧勬簮錛屽垵濮嬪寲璧勬簮錛堜笉鐪熸瑁呰澆錛夈?
鍦ㄧ己鐪佹儏鍐典笅錛孫gre璁よ瘑浠ヤ笅綾誨瀷鐨勮祫婧愶細
Mesh: 浜岃繘鍒舵牸寮忥紝瀹冧篃鍙寘鍚?morph 鍜屻pose 鍔ㄧ敾鏁版嵁
Skeleton: 銆鍙互琚玀esh鏂囦歡寮曠敤錛屼篃鍙崟鐙嬌鐢紝鍖呭惈楠ㄩ灞傛緇撴瀯淇℃伅錛屽叧閿撫淇℃伅銆?
Material: 銆瀹氫箟浜嗘覆鏌撲竴緇勫嚑浣曚綋鏃剁殑娓叉煋鐘舵侊紝鍙互琚玬esh鏂囦歡寮曠敤錛屼篃鍙互鎵嬪伐浣跨敤銆?
GPU 紼嬪簭錛?program 鏀寔HLSL, GLSL,Cg 涓庝綆綰х殑 .asm 錛岃繖浜涙枃浠朵細鍦ㄤ換浣?material涔嬮棿琚墫鏋愶紝鍥犳鍦ㄤ竴涓猰aterial涔嬩腑琚紩鐢ㄧ殑Gpu紼嬪簭鎬繪槸鏈夋晥鐨勩?
Compositor: 涓嶮aterial寰堢浉浼鹼紝鎵╁睍鍚嶄笉鍚?
Font: 鐢ㄥ瓧浣撳畾涔夋枃浠跺幓瀹氫箟鍦╫verlay涓嬌鐢ㄧ殑瀛椾綋錛屾墿灞曞悕 .fontdef
姣忕璧勬簮閮芥湁鑷繁鐨勭壒瀹氱殑ResourceManager,濡傦紝MaterialManager, FontManager銆俁esourceGroupManager璐熻矗閫氳繃鍚嶅瓧鏌ユ壘璧勬簮錛屽畠涓嶈礋璐e疄闄呯殑鍐呭瓨綆$悊浠誨姟銆傝繖浜涗換鍔℃槸鐢盧esourceManager鍩虹被鏉ュ畬鎴愮殑銆俁esourceGroupManager鍏佽閫氳繃緇勫悕鏉ュ姞杞斤紝閲婃斁鏁寸粍璧勬簮銆?
榛樿鎯呭喌涓嬶紝Ogre璁や負璧勬簮浠ヤ竴涓鐩樻枃浠剁殑褰㈠紡瀛樺湪銆傜劧鑰岋紝鏈変簺綾誨瀷鐨勮祫婧愬彲浠ユ墜宸ョ鐞嗭紝褰撳墠鍙湁mesh, font 鏈夋墜宸ヨ祫婧愬姞杞界殑瀹炵幇銆傚叾浠栫被鍨嬬殑鍙互鑷繁瀹炵幇錛孫gre宸茬粡鍦ㄥ畠鐨勬鏋朵腑淇濈暀浜嗚繖縐嶅姛鑳姐?
鍦烘櫙綆$悊
鎵鏈夌殑鍏蜂綋瀹炵幇閮戒粠SceneManager媧劇敓鑰屾潵錛岀▼搴忎腑甯鎬笌姝ょ被浜や簰銆傦紝鍙互鏈夊涓椿鍔ㄧ殑SceneManager銆傚畠浠敤鏉ョ鐞哠ceneNode, SceneNode鍙互鍦ㄥ満鏅腑琚Щ鍔ㄣ係ceneNode涔熷彲浠ユ湁灞傛緇撴瀯銆?
鍦烘櫙瀹為檯鍐呭緇忓父涔烢ntity瀹炰緥鐨勫艦寮忓瓨鍦ㄣ傚畠浠Scene Manager鍒涘緩錛孧ovableObject瀹炵幇銆備竴涓湁鏁堢殑Entity鍙互琚玜ttach 鍒癝ceneNode涓婇潰銆侲ntity 緇忓父浠庣鐩樹笂浠?mesh鏂囦歡鍔犺澆銆傜劧鍚庝篃鍙互鎵嬪伐鍒涘緩鍐呭瀵硅薄錛屽plane.褰揈ntity琚玜ttach鍒癝ceneNode涓婃椂錛岃繘琛岀Щ鍔ㄧ瓑鎿嶄綔鏄拡瀵筍ceneNode鐨勶紝鑰屼笉鏄唴瀹瑰璞°?
涔熷彲浠ユ妸闈炲唴瀹瑰璞?鐏紝鐩告満絳?attach 鍒癝ceneNode涓婇潰銆?
娓叉煋緋葷粺涓庢覆鏌撳璞?
RenderSystem 鏄疧gre涓庡簳灞侫PI鐨勬帴鍙? RenderTarget 鏄娓叉煋紿楀彛涓庢覆鏌撶汗鐞嗙殑姒傛嫭銆?
Ogre 鎵舵寔澶氫釜娓叉煋紿楀彛銆傜獥鍙e彲浠ラ氳繃Root瀵硅薄鑷姩銆佹墜鍔ㄥ湴鍒涘緩錛屼篃鍙兘閫氳繃RenderSystem鍒涘緩銆?

Ogre 綆$悊鍣?/font>
Manager 鏄竴涓彲浠ヨ闂浉鍏崇被鍨嬪璞★紝綆$悊鍏剁敓鍛藉懆鏈熺殑綾匯備緥濡傦紝ArchiveManager綆$悊Archive瀹炵幇鐨勫垱寤轟笌娉ㄥ唽錛岃闂敞鍐岀殑Archive瀹炵幇瀹炰緥銆俁oot瀵硅薄鍒涘緩鐨勫壇浣滅敤涔嬩竴灝辨槸鍒濆鍖栨墍鏈塷gre Manager瀵硅薄銆?
LogManager : 鍙戦佹棩蹇椾俊鎭埌杈撳嚭嫻併?
ControllerManager: 綆$悊 controllers,鍚庤呮槸鍩轟簬鍚勭杈撳叆錛屼負鍒殑綾諱駭鐢熺姸鎬佸間互渚涗嬌鐢ㄣ?
DynLibManager: 銆綆$悊鍔ㄦ侀摼鎺ュ簱
PlatformManager: 鎶婃娊璞$殑璁塊棶杞崲鎴愬簳灞傜‖浠朵笌鎿嶄綔緋葷粺鐩稿叧鐨勭粏鑺傘?
CompositorManager: 璁塊棶綆$悊銆Compoitor framework.
ArchiveManager: 銆鏂囦歡緋葷粺鐩綍錛孼IP鏂囦歡
ParticleSystemManager: 綺掑瓙緋葷粺錛屽彂灝勫櫒錛屽獎鍝嶅櫒錛坅ffector錛?
SkeletonManager:聽 鍏佽鍚屽悕鐨剆keleton瀵硅薄閲嶇敤
MeshManager :聽 綆$悊mesh, 鍏佽鍚屽悕mesh閲嶇敤
HighLevelGpuProgramManager: 緇存姢錛屽姞杞斤紝緙栬瘧楂樼駭GPU紼嬪簭
GpuProgramManager: 緇存姢浣庣駭GPU紼嬪簭錛屾妸緙栬瘧鐨勯珮綰PU紼嬪簭杞負姹囩紪
ExternalTextureSourceManager:聽 綆$悊澶栭儴綰圭悊婧愮被瀹炰緥錛屽瑙嗛嫻?
FontManager:聽 綆$悊Overlay涓嬌鐢ㄧ殑瀛椾綋
ResourceGroupManager: 鍔犺澆錛岀敓鍛芥湡綆$悊錛屾墍鏈夋敞鍐岀殑紼嬪簭璧勬簮
OverlayManager: 鍔犺澆錛屽垱寤猴紝2D Overlay 綾誨疄渚?
HardwareBufferManager: 綆$悊鍏變韓紜歡緙撳啿錛屻欏剁偣緙撳啿錛屽儚绱犵紦鍐詫紝绱㈠紩緙撳啿絳夈?
TextureManager: 綆$悊綰圭悊
鎬葷粨錛?榪欎竴绔犳棤鎰忚鐩栧叧浜嶰gre鐨勬墍鏈変笢瑗匡紝鍙鏄庝簡涓浜涙櫘閬嶉渶瑕佺殑Ogre瀵硅薄錛屽拰涓浜涗笉澶父鎵撲氦閬撶殑ogre 瀵硅薄銆?



]]>
銆奝ro Ogre 3D Programming銆?璇諱功絎旇 涔?絎笁绔?璁捐姒傝銆銆絎竴閮ㄥ垎http://m.shnenglu.com/yuanyajie/archive/2007/03/05/19264.html娓呮簮娓告皯娓呮簮娓告皯Mon, 05 Mar 2007 15:22:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/05/19264.htmlhttp://m.shnenglu.com/yuanyajie/comments/19264.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/05/19264.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19264.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19264.html娓呮簮娓告皯銆 gameogre@gmail.com

璁捐鍝插
浼犵粺涓婏紝浣跨敤 Direct3D 鎴?OpenGL 鏉ユ覆鏌撳満鏅拰瀵硅薄錛岄渶瑕侀伒寰竴緋誨垪紼嬪簭澶勭悊嫻佺殑姝ラ錛氳皟鐢?API 璁劇疆娓叉煋鐘舵侊紝璋冪敤 API 鍙戦佸嚑浣曚綋淇℃伅錛岄氱煡 API 鎴?GPU 鍘繪覆鏌撳嚑浣曚綋銆傚姣忎釜鍑犱綍浣撻兘鏄姝よ繑澶嶏紝鐩村埌褰撳墠甯ц瀹屽叏娓叉煋銆傚湪涓涓嬪撫鍚屾牱濡傛銆?
浣跨敤闈㈠悜瀵硅薄鐨勬柟娉曟潵娓叉煋鍑犱綍浣撶畝鍖栦簡涓婅堪榪囩▼銆傞氳繃澶勭悊緇勬垚鍦烘櫙鐨勫悇縐嶅璞¤屼笉鏄師濮嬬殑鍑犱綍浣撱傝繖浜涘璞″寘鎷細鍙繍鍔ㄥ璞★紝闈欐佸璞★紙鏋勬垚涓栫晫甯冨眬錛夛紝鍏夛紝鐩告満絳夈傞偅浜?3D API 鍒欎笉鍐嶉渶瑕侊細鍙槸鎶婅繖浜涘璞℃斁鍒板満鏅腑錛?Ogre 璐熻矗澶勭悊鐞愮鐨勭粏鑺傘傝屼笖錛屽彲浠ョ敤鏇村姞鐩磋鐨勬柟娉曟潵鎿嶇旱瀵硅薄錛岃屼笉鏄嬌鐢ㄧ煩闃點傛葷殑璇存潵錛屾垜浠彲浠ュ鐞嗗璞★紝瀹冪殑灞炴э紝璋冪敤鏇寸洿瑙傜殑鏂規硶錛岃屼笉鍐嶇敤欏剁偣鍒楄〃錛屼笁瑙掑艦鍒楄〃錛屾棆杞煩闃電瓑鎵嬫鏉ョ鐞嗕簡銆?
Ogre 鎻愪緵浜嗛潰鍚戝璞$殑妗嗘灦錛屽寘鎷簡瀵硅薄妯″瀷涓殑娓叉煋澶勭悊鐨勬墍鏈夐儴鍒嗐傛覆鏌撶郴緇熸娊璞′簡搴曞眰 3D 銆 API 鐨勫鏉傛с傚満鏅浘褰㈠姛鑳借鎶借薄鎴愬崟鐙殑鎺ュ彛錛岃繖鏍蜂竴鏉ワ紝鍚勭涓嶅悓鐨勫満鏅浘褰㈢鐞嗙畻娉曞彲浠ュ嵆鎻掑嵆鐢ㄣ傚湪鍦烘櫙涓殑鎵鏈夊彲娓叉煋瀵硅薄錛屾棤璁烘槸鍙Щ鍔ㄧ殑錛岃繕鏄潤鎬佺殑錛岄兘琚竴緇勫叕鍏辨帴鍙f娊璞★紝榪欎簺鎺ュ彛鎻愪緵浜嗗疄闄呯殑娓叉煋鎿嶄綔錛堜緥濡?techniques 鍜屽畠鎵鍖呭惈鐨?passes 錛?.
璁捐浜偣
涓鈥滆璁℃ā寮忊濈殑鍚堢悊浣跨敤
Ogre 涓ぇ閲忎嬌鐢ㄤ簡緇忓吀鐨勮璁℃ā寮忋備緥濡傦紝浣跨敤鈥?Observer 鈥濇ā寮忔潵閫氱煡搴旂敤紼嬪簭鐗瑰畾浜嬩歡鐨勫彂鐢燂紝鍦?demo 涓?FrameListener 鐨勪嬌鐢ㄤ嬌寰楃▼搴忓彲浠ユ帴鏀躲 frame-started and frame-ended 銆浜嬩歡閫氱煡銆傗?Singleton 鈥濇ā寮忓己鍒跺疄鐜扮被鐨勫崟瀹炰緥銆傗?Iterator 鈥濇ā寮忕敤鏉ラ亶鍘嗘暟鎹粨鏋勭殑鍐呭銆?
鈥淰isitor鈥?妯″紡鐢ㄦ潵鍦ㄥ璞′笂鎵ц鏌愮鎿嶄綔銆?Fa莽ade 妯″紡鐢ㄦ潵鎶借薄搴曞眰錛屾彁渚涗竴涓崟涓綾繪帴鍙c?
鈥?Factory鈥?銆鐢ㄦ潵鍒涘緩瀹炰緥銆?
浜?鍦烘櫙鍥句笌鍐呭鍒嗙
浼犵粺涓婏紝鍦烘櫙鍥句笌鍐呭鍚屽浜庡悓涓緇ф壙浣撶郴涓嬨傚畠瑕佹眰浠庡満鏅粨鐐瑰瓙綾誨寲鍐呭綾伙紝涔熷氨鏄鍐呭綾諱粠鍦烘櫙緇撶偣緇ф壙銆傚疄璺佃瘉鏄庤繖縐嶈璁¢潪甯哥碂緋曘?棣栧厛錛?Ogre 鎿嶄綔鍦烘櫙鍥懼艦鍦ㄦ帴鍙e眰 , 瀹冧笉鍋囪鐗瑰畾鍥懼艦綆楁硶鐨勫疄鐜般傚疄闄呬笂錛?Ogre 鎿嶄綔鍦烘櫙鍥懼艦浠呬粎閫氳繃瀹冪殑絳懼悕錛堟柟娉曪級錛屽畬鍏ㄥ拷鐣ュ簳灞傜殑綆楁硶瀹炵幇銆?
絎簩錛?Ogre 鐨勫浘褰㈡帴鍙e彧鍏沖績鍥懼艦緇撴瀯錛屼笉鍖呭惈浠諱綍鍐呭湪鐨勮闂垨綆$悊鍔熻兘銆傚悗鑰呰鎺ㄥ埌 Renderable 涓紝鍦烘櫙涓殑鎵鏈夊嚑浣曪紙 movable or otherwise 錛夐兘浠庡畠緇ф壙銆傝繖浜?Renderalbes 鐨勬覆鏌撳睘鎬э紙鏉愯川錛?materials 錛夎鍖呭惈鍒?Entity 瀵硅薄涓幓銆?Entity 鍙互鍖呭惈涓涓垨澶氫釜 SubEntity 銆傝繖浜涘瓙瀹炰綋鏄疄闄呯殑鍙覆鏌撳璞°備笅闈㈡槸鍚勫璞$殑涓涓叧緋誨浘錛?br />
閫氳繃榪欐牱鐨勮璁★紝鍦烘櫙綆$悊涓庡満鏅唴瀹瑰厖鍒嗚В钘曘傝繃浜庡満鏅浘鏉ヨ錛岄氳繃 Movable Object 鍑犱綍錛屾覆鏌撳睘鎬у彉寰楁湁鏁堛傛敞鎰忓埌 Movable 涓嶆槸浠?Scene Node 緇ф壙鑰屾潵鐨勩?Movable Object 鏄?attached 鍒?Scene Node 涓婂幓鐨?. 褰撴墿灞曪紝鏀瑰彉錛岄噸鏋勫満鏅浘褰㈠疄鐜版椂瀵瑰満鏅唴瀹瑰璞$殑璁捐涓庡疄鐜版病鏈変換浣曞獎鍝嶃?
浠庡彟涓鏂歸潰鏉ヨ錛岀敱浜庡満鏅浘褰笉闇瑕佺煡閬撳唴瀹圭被鐨勪換浣曞彉鍖栥傚彧瑕佸疄鐜頒竴浜涚畝鍗曠殑鍦烘櫙鍥懼艦鈥滅‘瀹炩滈渶瑕佺煡閬撶殑涓浜涙帴鍙c傚洜姝わ紝鎴戜滑鍙互浠繪剰鐨?attached 涓浜涜嚜瀹氫箟鐨勪笢瑗垮埌鍦烘櫙緇撶偣涓婏紝姣斿澹伴煶淇℃伅絳夈傦紙鍚鏈変釜 OgreAL, 瀹冨寘瑁呬簡 OepnAL 錛岀寽鎯沖氨鏄繖鏍峰仛鐨勫惂錛夈?
涓夈鎻掍歡緇撴瀯
OGRe 琚璁℃垚鍙墿灞曠殑銆?Ogre 閫氳繃鈥滃熀浜庡綰︾殑璁捐 鈥?鏉ュ畬鎴愩?Ogre 鍙互琚璁℃垚涓緇勫叡鍚屽伐浣滅殑緇勪歡錛屽畠浠氳繃涓浜涘凡鐭ユ帴鍙f潵鐩鎬簰浜ゆ祦銆傝繖甯︽潵鏋佸ぇ鐨勭伒媧繪э紝鏌愮鍔熻兘鐨勪笉鍚屽疄鐜頒笌鏀瑰彉闈炲父瀹規槗銆備婦渚嬫潵璁詫紝鐢變簬 ogre 澶勭悊鍦烘櫙鍥懼厓綆$悊鏄湪鎺ュ彛綰э紝鐢ㄦ埛鍙互闅忔剰鐨勯夋嫨鐗瑰畾綆楁硶鐨勫疄鐜般傝屼笖錛屽綋鐢ㄦ埛鍒涘緩涓涓柊鐨勫疄鐜幫紝鍙互寰堝鏄撶殑浠ユ彃浠剁殑褰㈠紡鎻愪緵緇?Ogre, 銆瀹炵幇鏃跺彧瑕侀伒寰?ogre 瀹氫箟鐨勪竴浜涙帴鍙?. File archives , render systems 涔熶互鎻掍歡鐨勫艦寮忔彁渚涳紝綺掑瓙緋葷粺涔熸槸銆?鎻掍歡褰㈠紡鐨勫惛寮曚漢涔嬪鏄紝涓轟簡鍔犲叆鎻掍歡錛屼笉闇瑕侀噸鏂扮紪璇?Ogre 搴?. 鎻掍歡鍙互鍦ㄨ繍琛屾椂鍔犺澆銆?
鍥涖紜歡鍔犻熺殑娓叉煋鏀寔
Ogre 琚璁℃垚鍙敮鎸佺‖浠跺姞閫熷浘褰㈡覆鏌擄紝鐩存帴杞歡娓叉煋涓嶆槸瀹冪殑閫夐」銆?Ogre 浣跨敤瀹屾暣鐨勭‖浠跺姞閫熻兘鍔涳紝鍖呮嫭鍙紪紼?shaders 銆?Unreal 寮曟搸鑳藉仛浠涔堬紝 Ogre 灝辮兘鍋氫粈涔堬紒錛侊紙 ^_^, 浣滆呰鐨勶級銆傚紩鎿庣洿鎺ユ敮鎸佺殑鍏ㄥ眬鍏夌収 (precomputed Radiance Transfer 絳?) 榪樻病鏈夊疄鐜幫紝鍥犱負榪欎簺澶氭暟鐢ㄤ簬闈炲疄鏃惰綆楀満鍚堬紝鍥犳涓嶆槸浠涔堥棶棰?.Ogre 鐜板湪鍜屾湭鏉ュ皢鍙兘鍙嬌鐢?Direct3D 涓?OpenGL 銆?
浜旓紝鐏墊椿鐨勬覆鏌撻槦鍒楃粨鏋?
Ogre 銆閲囧彇涓涓柊鏂規硶鏉ヨВ鍐沖満鏅腑鍚勯儴鍒嗘覆鏌撴搴忛棶棰樸傜矖鐣ュ湴鐪嬶紝鏍囧噯榪囩▼閫氬父濡備笅宸ヤ綔錛氭覆鏌撳湴褰㈡垨涓栫晫鍑犱綍錛屾覆鏌撳彲縐誨姩瀵硅薄錛屾覆鏌撳悇縐嶇壒鏁堬紝娓叉煋 OverLay, 娓叉煋鑳屾櫙鎴栧ぉ絀虹洅 . 鐒惰岋紝姝e鍏稿瀷鐨勫疄鐜頒竴鏍鳳紙鍍忛泦鎴愮數璺鐞嗘ā鍧楋級錛岃繖涓繃紼嬪緢闅炬敼鍙?. 鍦ㄨ澶氫緥瀛愪腑錛?寰堥毦鏀瑰彉娓叉煋鐨勯『搴忥紝瀵艱嚧闅句互緇存姢涓庝笉鐏墊椿鐨勮璁$殑銆?娓叉煋闃熷垪鐨勬蹇墊槸錛?Ogre 浠ヤ竴嬈′竴涓殑鏂瑰紡娓叉煋涓緇勫彲浠ユ帓搴忕殑闃熷垪錛屼篃宸插悓鏍風殑鏂瑰紡娓叉煋姣忎釜闃熷垪涓殑鍐呭銆備篃灝辨槸闃熷垪鏈韓鏈変紭鍏堢駭錛屽悓鏍烽槦鍒椾腑鐨勫璞′篃鏈夎嚜宸辯殑浼樺厛綰с?br />
涓婂浘涓紝闃熷垪鐢卞悗鍚戝墠娓叉煋錛?Background 脿 OveryLay 錛?, 鍦ㄦ渶鍓嶇殑闃熷垪涓粠宸﹁嚦鍙蟲覆鏌撱?
鍦ㄨ繖縐嶆満鍒朵笅閲嶆柊緇勭粐娓叉煋欏哄簭闈炲父綆鍗曪紝鍙閲嶆柊鍒嗛厤浼樺厛綰у氨鍙互浜嗐傞槦鍒楀彲浠ュ畾鍒訛紝闃熷垪涓殑瀵硅薄涔熷彲浠ャ傛暣涓槦鍒楀彲浠モ?turned on鈥?and 鈥渢urned off鈥?錛岄槦鍒椾腑鐨勫璞′篃鍙互銆?姣忎釜闃熷垪鎻愪緵浜嗕簨浠墮氱煡錛堝 prerender and postrender 錛?, 搴旂敤紼嬪簭鏈夋満浼氭敼鍙橀槦鍒椾腑鐨勫璞℃覆鏌撱傝繖涓満鍒跺浜庡紑鍙戝拰緇存姢澶嶆潅紼嬪簭閮界浉褰撴湁鐢ㄣ?
鍏鍋ュ.鐨勬潗璐ㄧ郴緇?
Ogre 鐨勬潗璐ㄧ敱涓涓垨澶氫釜 technique 緇勬垚錛?technique 鏄?pass 鐨勯泦鍚堛?Pass 鏄潗璐ㄧ駭鍒殑娓叉煋鍗曞厓錛屽鑷翠竴嬈″浘褰㈢‖浠剁殑 鈥漝raw鈥?璋冪敤銆傚彲浠ユ湁澶氫釜 pass, 姣忎釜 pass 鏄竴嬈″叏鏂扮殑娓叉煋鎿嶄綔錛屽寘鎷‖浠舵覆鏌撶姸鎬佹敼鍙樸?
鏈鍚稿紩浜虹殑鐗規ф槸 automatic fallback 銆?Ogre 鑷笂鍚戜笅鍦幫紙 technique 鍒楀嚭鐨勯『搴忥級瀵繪壘鏈閫傚綋鐨?technique.Ogre 榪樿兘灝藉姏鍦伴噸鏂扮粍緇?technique 涓殑 pass, 浠ヨ繋鍚堟渶灝忕殑鎶鏈渶姹傘備緥濡傦紝褰撳墠紜歡鍙敮鎸佸崟綰圭悊鍗曞厓錛岃屼綘紼嬪簭涓渶灝忓鏉傚害鐨勬妧鏈紝闇瑕佽嚦灝戜袱涓汗鐞嗗崟鍏冿紝閭d箞 ogre 浼氭妸涓涓?pass 鎷嗗垎鎴愪袱涓紝閫氳繃娣峰悎涓や釜鍗曞厓綰圭悊鐨勬柟寮忚揪鍒板悓鏍風殑鏁堟灉銆?
Ogre 鏉愯川緋葷粺涔熸敮鎸?schemes 鐨勬蹇點?Schemes 鍙互鐞嗚В浣滀負鏅亶鐨勨滈潪甯擱珮錛岄珮錛屼腑錛屼綆鈥滀笉鍚岀瓑綰х殑鍥懼艦璁劇疆銆傚湪榪欑鎯呭喌涓嬶紝鍙互瀹氫箟鍥涗釜 schemes , 騫朵負姣忎竴涓垎閰?techniques( 澶嶆暟 ) 銆傝繖鏍峰氨鍙互 ogre 鐨勬墍璋?technique fallback 鏌ユ壘閭d簺灞炰簬鐗瑰畾 schemes 鐨?techniques 銆備嬌寰楁潗璐ㄧ鐞嗘洿瀹規槗鐐廣?
鐢ㄦ潗璐ㄨ剼鏈畬鎴愮殑浜嬶紝鍚屾牱涔熷彲浠ョ敤浠g爜鐨勬柟寮忓畬鎴愩備唬鐮佺殑鏂瑰紡涔熸敮鎸?schemes 涓?technique fallback 銆?
涓冦鏈湴浼樺寲鐨勫嚑浣曚笌楠ㄩ鏍煎紡
Ogre 浣跨敤瀹冨崟鐙殑 mesh 涓庨楠兼牸寮忋備笉鑳界洿鎺ュ姞杞界涓夎蔣浠跺寘鐢熸垚鐨勬暟鎹傜ぞ鍖轟腑鏈夎漿鎹㈢涓夋枃浠舵牸寮忕殑宸ュ叿錛屼絾瀹冧笉鏄?Ogre 搴撶殑涓閮ㄥ垎銆?Ogre 浣跨敤鑷繁鐨勬牸寮忔槸涓轟簡鏁堢巼銆?
鍏銆澶氱綾誨瀷鐨勫姩鐢?
Ogre 鏀寔涓夌綾誨瀷鐨勫姩鐢伙細楠ㄩ鍔ㄧ敾錛屽彉褰㈠姩鐢伙紝 Pose 鍔ㄧ敾
楠ㄩ鍔ㄧ敾錛屾妸欏剁偣緇戝畾鍒伴楠間笂銆傚璞$殑姣忎釜欏剁偣鍙互鍙楀埌鍥涗釜鐙珛鐨勯澶村獎鍝嶃傛瘡縐嶅獎鍝嶈璧嬩簬涓涓敤鏁伴噺琛ㄧず鐨勬潈閲嶃傞楠煎姩鐢誨彧鍦ㄥ叧閿撫涓婃墽琛屽墠鍚戣繍鍔ㄥ妯″紡銆?Ogre 褰撳墠涓嶆敮鎸侀嗗悜鍔ㄧ敾 .
Morph 鍔ㄧ敾鏄竴縐嶉《鐐瑰姩鐢繪妧鏈紝浠栧偍瀛樺叧閿撫涓婄殑緇濆鐨勯《鐐逛綅緗俊鎭紝鍦ㄨ繍琛屾椂鍦ㄤ袱涓叧閿撫涔嬮棿鎻掑箋傝繖涓?Pose 鍔ㄧ敾涓嶅悓錛?Pose 鍔ㄧ敾瀛樺偍鐨勬槸鍋忕Щ鏁版嵁鑰屼笉鏄粷瀵逛綅緗?Pose 鍔ㄧ敾鍙互娣峰悎浠ュ艦鎴愬鏉傚姩鐢匯?Morph 鍔ㄧ敾姣?Pose 鍔ㄧ敾鍔熻兘鏈夐檺錛屽洜涓轟粬瀛樺偍鐨勬槸緇濆鍊鹼紝鍥犳闅句互涓庡叾浠?Morph 鍔ㄧ敾娣峰悎銆?Morph 鍔ㄧ敾涓?Pose 鍔ㄧ敾涔嬮棿涔熶笉鑳芥販鍚?.
鎵鏈夌殑鍔ㄧ敾綾誨瀷閮藉彲浠ヤ笌楠ㄩ鍔ㄧ敾娣峰悎浣跨敤 .
鎵鏈夊姩鐢葷被鍨嬮兘鍙嬌鐢ㄨ蔣浠舵墽琛屾垨鏄埄鐢?GPU 紜歡鎵ц銆?
Ogre 鍔ㄧ敾鏄熀浜庡叧閿撫鐨勶紝鍐呮彃鏂瑰紡鏈夌嚎鎬т笌绔嬫柟鏍鋒潯榪欎袱縐嶉夋嫨銆?
涔濄 Compositor Postprocessing ( 鎬庝箞緲昏瘧 ~?)
鐢ㄦ潵鍦ㄤ竴涓鍙d腑鍒涘緩浜岀淮鐨勶紝鍏ㄥ睆鐨勫悗澶勭悊鏁堟灉 . 渚嬪妯$硦錛岄粦鐧界數瑙嗭紝絳夌瓑鏁堟灉錛?Ogre 鏈変釜寰堝ソ鐨勭ず渚嬶級 Compositor 涔熸湁綾諱技浜庢潗璐ㄧ郴緇熺殑 technique 涓?pass 鐨勬蹇點傚湪瑙嗗彛鏈緇堣杈撳嚭鍓嶏紝澶氫釜璁$畻涓庢覆鏌撳彲琚墽琛屻傚儚鏉愯川鐨?fallbacks,Compositor framework 鎻愪緵浜?fallback 澶勭悊錛屼緥濡傦紝褰撹緭鍑虹殑鍍忕礌鏍煎紡鏃犳晥鏃躲傜悊瑙?compositor 鏈瀹規槗鐨勬柟娉曟槸鎶婂畠褰撴垚鐗囨紼嬪簭錛堝儚绱犳覆鏌擄級鐨勬墿灞曘備笉鍚屼箣澶勫湪浜庯細浼犵粺鐨勫浘褰㈢綰挎瘡涓潗璐?pass 鍙厖璁鎬竴涓墖孌電▼搴忥紝鑰?Compositor framework 鍒欏彲浠ュ儚鎵撲箳涔撶悆涓鏍鋒潵鏉ュ洖鍥炲ソ澶氭銆?Compositor 鑴氭湰鎵鍦?ViewPort 涓婏紝鍥犳瀹冨彲浠ラ潰鍚戜換浣曠殑 render target, 鍙互鏄彲娓叉煋綰圭悊錛屼富錛屽壇娓叉煋紿楀彛銆備笌鏉愯川緋葷粺涓鏍鳳紝瀹冮櫎浜嗗埄鐢ㄨ剼鏈疄鐜幫紝涔熷彲浠ヤ嬌鐢ㄤ唬鐮佸疄鐜般?
鍗伮犅?鎵╁睍璧勬簮綆$悊
鍦?ogre 涓紝璧勬簮瀹氫箟涓猴細娓叉煋鍑犱綍浣撳埌鍙覆鏌撶洰鏍囦笂鐢ㄥ埌浠諱綍涓滆タ銆傚緢鏄庢樉鍖呮嫭錛?mesh, 銆 skeleton, material , overlay script , font , Compositor script, GPU program , texture 銆?
姣忕璧勬簮閮芥湁鑷繁鐨?manager, 瀹冧富瑕佽礋璐f帶鍒剁壒瀹氱被鍨嬭祫婧愬湪鍐呭瓨涓殑鍗犵敤鏁伴噺銆傛崲鍙ヨ瘽璇達紝瀹冩帶鍒剁潃璧勬簮瀹炰緥鐨勭敓鍛芥湡銆備笉榪囦粎浠呭湪涓鐐逛笂鎺у埗錛氶鍏堬紝瀹冨彧鑳藉偍瀛樺悓鏍峰鐨勫疄渚嬶紝鍙栧喅浜庤繖縐嶇被鍨嬬殑璧勬簮鎵鍒嗛厤鐨勫唴瀛樸傜浜岋紝 ogre 涓嶄細鍒犻櫎姝h鍏朵粬閮ㄥ垎寮曠敤鐨勫疄渚嬨?
璧勬簮鏈韓瀹為檯璐熻矗鍔犺澆鑷繁銆傝繖鏄祫婧愮郴緇熺殑涓涓璁$壒鎬э細鎵嬪伐璧勬簮鍔犺澆銆傛墜宸ュ姞杞芥剰鍛崇潃璧勬簮鍔犺澆錛屽鐞嗭紝鏄埄鐢ㄤ竴涓柟娉曡皟鐢ㄥ疄鐜扮殑鑰屼笉鏄粠鏂囦歡緋葷粺涓殣寮忓湴鍔犺澆銆?
璧勬簮鍦?ogre 涓湁鍥涚鐘舵侊細鏈畾涔夛紝銆澹版槑錛屾湭鍔犺澆錛屻鍔犺澆銆?
鏈畾涔夛紝璇存槑 ogre 瀵瑰畠涓鏃犳墍鐭ャ?
澹版槑錛屽畠宸茬粡鍦ㄦ。妗堜腑榪涜浜嗙儲寮曘?
鏈姞杞斤紝宸茬粡榪涜浜嗗垵濮嬪寲錛堣剼鏈紝宸茬粡琚В鏋愯繃浜嗭級錛屽紩鐢ㄥ凡緇忚鍒涘緩
鍔犺澆錛屽凡緇忓湪瀹冪殑璧勬簮 manager 鎵綆$悊鐨勫唴瀛樻睜涓崰鐢ㄧ┖闂翠簡銆?
鍙互鐢ㄢ滅粍鈥濇潵綆$悊綆$悊鍚勭被璧勬簮銆傜粍涓祫婧愪箣闂寸殑鍏崇郴鏄換鎰忕殑錛屽畬鍏ㄥ彇鍐充簬紼嬪簭鍛橈細鍒涘緩 GUI 鐨勬墍鏈夎祫婧愬彲浠ュ垎涓轟竴緇勶紝浠?A 瀛楁瘝寮澶寸殑璧勬簮涔熷彲浠ュ垎涓轟竴緇勶紝絳夌瓑銆傛湁涓?緙虹渷鐨勭粍錛欸eneral
鍦?ogre 涓煡鎵炬煇涓祫婧愬疄渚嬫椂錛屼笉浼氳冭檻錛岃祫婧愭墍鍦ㄧ殑緇勩傛湁鏃訛紝鎴戜滑鍙互灝嗚祫婧愮粍鍛藉綋鎴愭煇縐嶇殑 鈥?鍛藉悕絀洪棿鏉ョ敤鈥溿?
Archives 涓殑璧勬簮鏄潪鎵嬪姩鍔犺澆鐨勩?Archives 鏄櫘閫氭枃浠跺鍣ㄧ殑綆鍗曟娊璞°傚畠鍖呮嫭鏂囦歡緋葷粺涓?ZIP 妗f銆傜敤鎴峰彲浠ュ疄鐜拌嚜瀹氫箟綾誨瀷鐨?archive 銆?



]]>
ORGE(Eihort)瀛︿範絎旇涔婫UI Demo 絎笁閮ㄥ垎 CEGUI鍒濇http://m.shnenglu.com/yuanyajie/archive/2007/03/05/19227.html娓呮簮娓告皯娓呮簮娓告皯Mon, 05 Mar 2007 04:43:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/05/19227.htmlhttp://m.shnenglu.com/yuanyajie/comments/19227.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/05/19227.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19227.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19227.html娓呮簮娓告皯聽 gameogre@gmail.com

鍦ㄤ互鍓嶇殑絎旇涓凡緇忓 CEGUI 鐨勪嬌鐢ㄥ仛浜嗙畝鍗曠殑浠嬬粛錛岃繖閲屼負浜嗗畬鏁存ц繕鏄妸瀹?C 錛?P 涓涓嬶細
浣跨敤 cegui 鏉ュ埗浣滅晫闈?, 涓嶈鍦ㄤ綍縐嶅鉤鍙頒笅 , 鏈夊熀鏈殑涓夊ぇ姝ラ瑕佸仛 :
1, 鍒涘緩涓涓?CEGUI::Render 瀹炰緥
2, 鍒涘緩 CEGUI::System 瀵硅薄
3, 璋冪敤鍚勭鏂規硶鏉ユ覆鏌撶敤鎴風晫闈?
絎竴姝?, 鍦ㄦ垜浣跨敤鐨?ogre 鐜涓嬩嬌鐢ㄤ互涓嬩唬鐮佹潵鍒涘緩 CEGUI::Render 瀹炰緥
Ogre3D
CEGUI::OgreCEGUIRenderer* myRenderer =
聽聽聽聽聽聽 new CEGUI::OgreCEGUIRenderer(myRenderWindow);
絎簩姝ョ浉褰撶畝鍗?, 鍙嬌鐢?new CEGUI::System(myRenderer);
絎笁姝ワ紝鍩烘湰涓婃潵璁詫紝澶ч儴鍒嗗鉤鍙頒笅錛屽 direct3D, OpenGL, 鎴戜滑鍦ㄦ覆鏌撳驚鐜殑灝鵑儴璋冪敤 CEGUI::System::renderGUI 鏉ュ紑濮嬬晫闈㈢殑娓叉煋銆傚鏋滄垜浠嬌鐢?ogre3d 寮曟搸錛岃繖涓姝ヤ笉闇瑕?鎴戜滑鏄劇ず鐨勬墽琛屻?鍒涘緩 CEGUI 紿楀彛錛屾垜浠彲浠ヤ嬌鐢ㄤ袱縐嶅艦寮忥紝涓鏄?C 錛嬶紜浠g爜錛屼簩鏄紪杈?XML layout 鏂囦歡銆?
CEGUI 鏈韓渚︽祴鐢ㄦ埛杈撳叆錛岃繖浜涗笉鏄?CEGUI 鐨勮矗浠伙紝鑰屾槸紼嬪簭鐨勫憳鐨勮矗浠匯傚綋鏈夌敤鎴峰閮ㄨ緭鍏ユ椂錛屾垜 浠彲浠ラ夋嫨灝嗚繖浜涙秷鎭憡鐭?CEGUI 錛岃繖鏍?CEGUI 鎵嶄細鍝嶅簲銆?
CEGUI 浣跨敤鍥炶皟鏈哄埗鏉ヨ繘琛屾秷鎭鐞嗐傚彲浠ヤ負鏌愪釜紿椾綋鐨勭壒瀹氫簨浠舵敞鍐屼竴涓嚱鏁幫紝褰撶獥浣撲簨浠跺彂鐢熸椂錛?CEGUI 浼氳嚜鍔ㄨ皟鐢ㄦ墍娉ㄥ唽鐨勫嚱鏁般?
DEMO 涓渶瑕佹敞鎰忕殑鏄?Render To Texture 鐨勫疄鐜般?
鍏堝垱寤哄湪 ogre 涓殑 RTT:
RenderTexture * rttTex = mRoot->getRenderSystem()->createRenderTexture( "RttTex", 512, 512, TEX_
TYPE_2D , PF_R8G8B8 );
鍐嶈漿鎹㈡垚CEGUI鍙瘑鍒殑:
// Retrieve CEGUI texture for the RTT
聽聽聽聽聽聽聽 CEGUI::Texture* rttTexture = mGUIRenderer->createTexture((CEGUI::utf8*)"RttTex");
鏍規嵁榪欎釜Texture鐢熸垚浜嗕竴涓狪mageSet;
鍦↖mageSet涓畾涔変簡涓涓狪mage錛堝悕涓篟ttImage錛?鍏跺ぇ灝忎笌涓婅竟鐨凾exutre鍚屾牱澶у皬銆?
褰撳湪紿楀彛涓鍔犱竴涓猻tatic Image鏃訛紝鎶婂叾image灞炴ц涓?鈥?RttImage 鈥?鍗沖彲銆?



]]>
Ogre 瀛︿範絎旇涔嬨錛姬錛詫譏杞ㄨ抗鍔ㄧ敾http://m.shnenglu.com/yuanyajie/archive/2007/03/02/19132.html娓呮簮娓告皯娓呮簮娓告皯Fri, 02 Mar 2007 09:36:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19132.htmlhttp://m.shnenglu.com/yuanyajie/comments/19132.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19132.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19132.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19132.html銆銆OGRE 涓垱寤哄拰瀹炴柦杞ㄨ抗鍔ㄧ敾鐨勬楠ゅぇ鑷村涓嬶細

銆銆1. 鍦ㄤ富紼嬪簭綾葷殑 Application :: createScene ( ) 鍦烘櫙鍒涘緩鏂規硶涓繘琛屼互涓嬪伐浣滐細

銆銆Animation * Ogre::SceneManager::createAnimation (
銆銆 const String & name, // 鍔ㄧ敾鍚嶇О
銆銆 Real length // 鍔ㄧ敾闀垮害(縐?
銆銆 ) [virtual]

銆銆(2) 浣跨敤 createTrack 鏂規硶涓哄姩鐢誨垱寤鴻建榪瑰姩鐢伙細
銆銆 AnimationTrack * Ogre::Animation::createTrack (
銆銆 unsigned short handle, // 鍒嗛厤緇欒建榪瑰姩鐢葷殑绱㈠紩鍙ユ焺錛岀敤浜庝互鍚庡彲鑳界殑璋冪敤
銆銆 Node * node // 鎸囧畾瑕佹部鐫榪欐潯杞ㄨ抗榪愬姩鐨勮妭鐐?br />銆銆 )

銆銆(3) 浣跨敤 createKeyFrame 鏂規硶涓鴻建榪瑰姩鐢誨垱寤轟竴緋誨垪鍏抽敭甯э細
銆銆 KeyFrame * Ogre::AnimationTrack::createKeyFrame (
銆銆 Real timePos // 鏃墮棿浣嶇疆
銆銆 )
銆銆
銆銆 (4) 浣跨敤 setTranslate 銆?setScale 銆?setRotation 涓変釜鏂規硶鏉ヨ緗叧閿撫姣忎釜鏃墮棿浣嶇疆涓婅妭鐐圭殑浣嶇疆銆佺緝鏀俱佹棆杞睘鎬э細
銆銆 void Ogre::KeyFrame::setTranslate ( const Vector3 & trans )
銆銆 void Ogre::KeyFrame::setScale ( const Vector3 & scale )
銆銆 void Ogre::KeyFrame::setRotation ( const Quaternion & rot )
銆銆
銆銆 (5) 浣跨敤 createAnimationState 鏂規硶鍒涘緩涓涓姩鐢葷姸鎬佹潵榪借釜榪欎釜杞ㄨ抗錛?br />銆銆 AnimationState * Ogre::SceneManager::createAnimationState ( const String & animName ) [virtual]
銆銆
銆銆 (6) 浣跨敤 setEnabled 鏂規硶鏉ユ縺媧誨姩鐢葷姸鎬侊細
銆銆 void Ogre::AnimationState::setEnabled ( bool enabled )

銆銆2. 鍦ㄦ帴鏀跺櫒綾葷殑 Listener::frameStarted(const FrameEvent& evt) 鏂規硶涓埛鏂板姩鐢葷姸鎬侊細
銆銆 void Ogre::AnimationState::addTime ( Real offset )



]]>
OGRE瀛︿範絎旇涔?閰嶇疆鏂囦歡 Resources.cfghttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19131.html娓呮簮娓告皯娓呮簮娓告皯Fri, 02 Mar 2007 09:33:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19131.htmlhttp://m.shnenglu.com/yuanyajie/comments/19131.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19131.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19131.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19131.html resources.cfg

璧勬簮鏄?OGRE 搴旂敤紼嬪簭娓叉煋榪囩▼涓渶瑕佺敤鍒扮殑綰圭悊鍥劇墖銆佺綉鏍兼ā鍨嬫枃浠躲侀楠煎姩鐢繪枃浠剁殑鎬葷О銆?OGRE 搴旂敤紼嬪簭闇瑕佸湪娓叉煋鍓嶅皢榪欎簺璧勬簮杞藉叆鍐呭瓨錛岄偅灝遍渶瑕佽 OGRE 寮曟搸鐭ラ亾璧勬簮鐨勬悳绱㈣礬寰勩傜壒鍒殑鏄?OGRE 寮曟搸鏀寔鐩存帴璇誨彇 Zip 鍘嬬緝鏂囦歡涓殑鍐呭錛屾墍浠?Zip 鏂囦歡涔熷繀欏昏褰撴垚鎼滅儲璺緞鏉ユ寚瀹氥傚湪 OGRE 寮曟搸涓叿鏈夎櫄鎷熸枃浠剁郴緇熺殑姒傚康錛屽紩鎿庡唴閮ㄨ澆鍏ヨ祫婧愭枃浠墮兘鏄氳繃铏氭嫙鏂囦歡緋葷粺鏉ヨ繘琛岀殑錛屽紩鎿庡茍涓嶅叧蹇冭祫婧愭枃浠舵潵鑷竴涓櫘閫氭枃浠跺す銆?zip 鍘嬬緝鍖呯敋鑷崇綉緇滄槧灝勩傜湡姝g殑鏂囦歡璇誨彇鍔熻兘鏄氳繃鎻掍歡鏉ュ疄鐜扮殑錛屾墍浠ュぇ瀹跺湪榪愯鐜閲屽彲浠ュ彂鐜?Plugin_FileSystem.dll 錛屾棭鏈熺殑 OGRE 鐗堟湰榪樻湁 Plugin_Zip.dll 錛屽湪鏂扮殑鐗堟湰閲岃瀹炵幇鍒板紩鎿庡唴閮ㄤ簡銆傜洰鍓嶈繕娌℃湁瀹炵幇瀵圭綉緇滄枃浠剁殑鐩存帴璁塊棶銆?

涓轟簡鏂逛究 OGRE 紼嬪簭鍦ㄨ繍琛屾湡闂存煡鎵捐祫婧愶紝浣跨敤浜嗚祫婧愰厤緗枃浠?resources.cfg 銆傝繖鏄竴涓枃鏈枃浠訛紝鎴戜滑鍙互鍦?OGRE 紼嬪簭鐨勫彲鎵ц鏂囦歡鐨勫悓涓鏂囦歡澶逛笅鎵懼埌瀹冦傚畠鐨勫唴瀹瑰氨鏄璧勬簮璺緞鐨勬寚瀹氾紝紺轟緥濡備笅錛?

Zip=../../../Media/dragon.zip

Zip=../../../Media/knot.zip

Zip=../../../Media/skybox.zip

FileSystem=../../../Media/

濡傛灉璧勬簮鍦ㄤ竴涓?Zip 鏂囦歡涓紝灝卞啓 Zip=****** 錛屽鏋滆祫婧愬湪涓涓櫘閫氱殑紜洏鏂囦歡澶歸噷灝卞啓 FileSystem=****** 錛岄氬父榪欎袱縐嶆儏鍐甸兘鏈夈備緥濡傚湪 OGRE 鑷甫鐨?Demo 涓紝灝卞皢澶ч儴鍒嗚祫婧愭斁鍦ㄤ竴涓枃浠跺す閲岋紝鐗規畩鐨勮祫婧愯鏂囦歡澶逛腑鐨?Zip 鏂囦歡閲屻?

鍦?OGRE 鑷甫鐨勪緥瀛愭鏋?setupResources() 灞曠ず浜?Resources.cfg 鏂囦歡鐨勪嬌鐢細鍏堝埄鐢?ConfigFile 綾誨鏂囦歡鍐呭榪涜浜嗚В鏋愶紝灝嗚祫婧愮洰褰曠敤ResourceGroupManager:: addResourceLocation()鍚慜GRE榪涜鎻愪氦;



]]>
OGRE瀛︿範絎旇涔?閰嶇疆鏂囦歡Plugins.cfghttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19130.html娓呮簮娓告皯娓呮簮娓告皯Fri, 02 Mar 2007 09:31:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19130.htmlhttp://m.shnenglu.com/yuanyajie/comments/19130.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19130.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19130.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19130.html

Plugins.cfg

Ogre鐨勮澶氬姛鑳芥槸浠ユ彃浠剁殑褰㈠紡鎻愪緵鐨?Ogre鎻愪緵鐨勪互Plugin_寮澶寸殑璁稿.DLL鏂囦歡閮芥槸鎵璋撶殑鎻掍歡銆?br />Plugins.cfg鎸囧畾浜嗘彃浠剁殑璺緞鍜屾彃浠舵枃浠跺悕, 瀹冧滑鍙互鏀懼湪鍏跺畠鏂囦歡澶歸噷錛屼絾蹇呴』鍦ㄦ湰鏂囦歡閲屾寚瀹氳礬寰勩?/p>

鍦?windows 騫沖彴鎻掍歡鐨勮鍏ヨ繃紼嬪涓嬶細
Root::()
{
聽聽 if(!pluginFileName.empty())
聽聽 loadPlugins(pluginFileName);
锝?
鈥曗曗曗曗曗曪紴
void Root::loadPlugins(const String& pluginsfile)
{
聽聽 ConfigFile cfg;
聽聽 cfg.load(pluginsfile);
聽聽聽 ...........................
聽聽 // 瑙f瀽鏂囦歡錛屽鐞嗗悗灝嗙洰褰曚笌鏂囦歡鍚嶈仈鎺?
聽 for(;;)
聽聽 loadPlugin(plugindir + (*it))

} 鈥曗曗曗曗曗曪紴

Root::loadplugin(const string&聽 pluginName)
{
聽聽 DyLibmanager::getsinleton.load(pluginName);
}
鈥曗曗曗曗曗曪紴

DynLibManager::load(const string& filename)

{
聽聽聽聽聽聽聽 DynLib* pLib=new DynLib(filename);
聽聽聽聽聽聽聽 pLib->load();
}

鈥曗曗曗曗曗曪紴

void DynLib::load()

{
聽聽聽聽聽 m_hInst=(DYNLIB_HANDLE)DYNLIB_LOAD(name.cstr());
}

鍦?windows 騫沖彴涓嬫湁濡備笅瀹氫箟錛?

#define聽 DYNLIB_LOAD(a)聽聽聽聽 LoadLibrary(a)

鍒版錛?x.dll 鎻掍歡琚姞杞藉埌鍐呭瓨涓紝鍙互浣跨敤鎻掍歡鐨勫姛鑳戒簡^_^
浠ヤ笅涓轟竴涓吀鍨嬬殑 Plugins.cfg 鏂囦歡鐨勫唴瀹癸細

# Defines plugins to load
# Define plugin folder
PluginFolder=.
# Define plugins

Plugin=RenderSystem_Direct3D9
Plugin=RenderSystem_GL
Plugin=Plugin_ParticleFX
Plugin=Plugin_BSPSceneManager
Plugin=Plugin_OctreeSceneManager
Plugin=Plugin_CgProgramManager
Plugins.cfg 鏂囦歡鍐呭鐩稿綋鐩磋錛屼笉鍐嶈禈榪般?



]]>
OGRE瀛︿範絎旇涔?閰嶇疆鏂囦歡 Ogre.cfghttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19128.html娓呮簮娓告皯娓呮簮娓告皯Fri, 02 Mar 2007 09:28:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19128.htmlhttp://m.shnenglu.com/yuanyajie/comments/19128.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19128.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19128.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19128.html Ogre.cfg
OGRE 寮曟搸灝嗕細鍦ㄥ彲鎵ц鏂囦歡鎵鍦ㄧ殑鏂囦歡澶逛腑鐢熸垚涓涓?ogre.cfg 鏂囦歡璇ユ枃浠朵繚瀛樹簡鏈瀵硅瘽妗嗙殑璁劇疆緇撴灉錛屼笅嬈℃樉紺哄璇濇鏃朵細灝嗕笂嬈$殑閰嶇疆緇撴灉璇誨叆騫剁洿鎺ユ樉紺恒備緥瀛愭鏋剁敤 mRoot->showConfigDialog() 鏉ヨ皟鍑洪厤緗璇濇銆傚鏋滀綘璁や負鍦ㄧ▼搴忚繍琛屼箣鍓嶆樉紺轟竴涓璇濇寰堥毦鐪嬶紝鎴栬呭笇鏈涢噰鐢ㄥ彟澶栫殑褰㈠紡錛堟瘮濡備笓闂ㄧ殑閰嶇疆鐣岄潰錛屽氨璞″湪澶ч儴鍒嗘父鎴忎腑閭f牱錛夋潵閰嶇疆娓叉煋緋葷粺錛屽彧瑕佷綘紜繚鍦ㄥ彲鎵ц鏂囦歡鐨勫悓涓鏂囦歡澶逛笅瀛樺湪鏈夋晥鐨?Ogre.cfg 閰嶇疆鏂囦歡錛屽氨鍙互鐩存帴璋冪敤 Root 瀵硅薄鐨?restoreConfig() 鍑芥暟鏉ョ洿鎺ヨ鍏ユ覆鏌撶郴緇熼厤緗俊鎭紝鑰屼笉鏄劇ず閰嶇疆瀵硅瘽妗嗐?

Ogre::Root::showConfigDialog() 浼氭湁涓嬭堪琛屼負錛氬鏋滅▼搴忚繍琛屼箣闂村凡瀛樺湪涓涓湁鏁堢殑 ogre.cfg 錛岄偅涔堝畠浼氬湪鏄劇ず瀵硅瘽妗嗕箣鍓嶅皢閰嶇疆鏂囦歡鐨勫唴瀹硅澆鍏ワ紝濡傛灉鐢ㄦ埛瀵瑰璇濇榪涜浜嗘搷琛岋紝鏀瑰彉鐨勯厤緗弬鏁幫紝 showConfigDialog() 浼氭牴鎹敤鎴風殑鏂伴夋嫨渚濇璋冪敤 Root::setRenderSystem, RenderSystem::setConfigOption and Root::saveConfig 錛堝湪 ogreWin32ConfigDialog.cpp 涓疄鐜幫紝鍐欒嚜宸辯殑閰嶇疆瀵硅瘽妗嗘椂鍙互鍙傝冿級錛岄渶瑕佹敞鎰忕殑鏄厤緗ソ鐨勫弬鏁幫紝鍙槸鍦?RenderSystem::initialise or RenderSystem::reinitialise 璋冪敤涔嬪悗鎵嶈嬋媧匯?浠ヤ笅涓哄吀鍨嬬殑 ogre.cfg 鏂囦歡鐨勫唴瀹?
Render System=Direct3D9 Rendering Subsystem
[Direct3D9 Rendering Subsystem]
Allow NVPerfHUD=No
Anti aliasing=None
Floating-point mode=Fastest
Full Screen=No
Rendering Device=ATI MOBILITY RADEON X300
VSync=No
Video Mode=800 x 600 @ 32-bit colour

[OpenGL Rendering Subsystem]
Colour Depth=32
Display Frequency=N/A
FSAA=0
Full Screen=No
RTT Preferred Mode=FBO
VSync=No
Video Mode=1024 x 768

鏂規嫭鍙蜂腑涓哄彲浠ラ夋嫨鐨勬覆鏌撳瓙緋葷粺錛岃岀涓琛屾寚鍑轟簡褰撳墠鐨勯夋嫨鏄摢涓瓙緋葷粺錛屾柟鎷彿涓嬮潰涓哄悇瀛愮郴緇熺殑鍙夊弬鏁幫紝鍦ㄤ笂鐨勪緥瀛愪腑鍒嗗埆鍒楀嚭浜?Direct3D 9 涓?OpenGL 瀛愮郴緇熺殑鍙夐厤緗弬鏁般?br />Root(const String& pluginFileName = "plugins.cfg", const String& configFileName = "ogre.cfg", const String& logFileName = "Ogre.log");聽聽聽聽聽聽聽聽 ~Root();
Root 鐨勬瀯閫犲嚱鏁頒紶閫掍簡ogre.cfg,鍙槸綆鍗曠殑灝嗘枃浠跺悕淇濆瓨涓嬫潵錛屼緵鍏跺畠鏂規硶浣跨敤錛屽涓婇潰鏇劇粡鎻愬埌榪囩殑 Root:saveConfig(void);



]]>
ORGE(Eihort)瀛︿範絎旇涔婫UI Demo 絎簩閮ㄥ垎 OIS杈撳叆http://m.shnenglu.com/yuanyajie/archive/2007/03/02/19121.html娓呮簮娓告皯娓呮簮娓告皯Fri, 02 Mar 2007 07:27:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19121.htmlhttp://m.shnenglu.com/yuanyajie/comments/19121.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/02/19121.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19121.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19121.html娓呮簮娓告皯銆 gameogre@gmail.com
鍦ㄧ涓閮ㄥ垎閲屽垎鏋愪簡 ExampleFrameListener 澶ч儴鍐呭錛屼笉榪囨病鏈夌┓灝斤紝瀹冨叾瀹炰篃鍖呭惈浜嗚緭鍏ラ儴鍒嗐傚洜涓?CEGUI 鏈韓娌¤緭鍏ヤ睛嫻嬪姛鑳斤紝浠栭渶瑕佸閮ㄥ姏閲忕殑甯姪銆傚湪 ogre1.4 涔嬮棿鐨?demo 涓紝杈撳叆閮ㄥ垎鏄?ogre 鑷甫鐨勶紝鍔熻兘鏈夐檺錛堝浜庢垜榪欎釜鑿滈笩錛屾殏鏃惰繕鐢ㄤ笉鍒扮壒鍒殑鍔熻兘 ^_^ 錛夈傛柊鐗堟湰閲岋紝騫茶剢鎶婅繖閮ㄥ垎鍘繪帀浜嗭紝杈撳叆閮ㄥ垎閲囩敤浜嗘柊鐨勭被搴?OIS 錛?Object-oriented Input Library . 浠栫殑浣滆呮湰韜氨鏄?OGRE team 鐨勬垚鍛橈紝鎴戜滑鍙互鐩鎬俊錛屼粬鍙互涓?Ogre 涓璧峰伐浣滃緱寰堝ソ .OIS 鏀寔閿洏錛岄紶鏍囷紝娓告垙鏉嗭紝鏈鍚庝竴欏規殏鏃朵笉璁ㄨ . 鍦?windows 騫沖彴涓嬶紝 OIS 鎻愪緵浜嗗 DirectInput 鐨勫皝瑁咃紝鍩烘湰鐨勮緭鍏ュ姛鑳芥槸鐢卞悗鑰呮潵瀹炵幇鐨勩傛棦鐒舵槸瀛︿範錛屾垜浠笉闃插厛澶ф鐞嗚В涓涓?DirectInput 鍩烘湰鍔熻兘涓庝嬌鐢ㄦ祦紼嬩互鍙?OIS 鏄浣曞皢榪欎簺鍔熻兘灝佽榪涘幓鐨勩傛垜鐨勭洰鐨勬槸瑕佽璁?CEGUI 鐨勶紝鐜板湪杞埌浜?OIS, 鍙堣漿鍒頒簡 DirectxInput, 浼間箮鏄鐩爣瓚婃潵瓚婅繙浜嗐傚懙錛屽湪鑿滈笩鐨勭溂涓紝浠涔堜笢瑗塊兘鏄彍錛岄兘鏈夎惀鍏伙紝涓嶉槻鍜鍤間釜涓涓嬩笅銆?CEGUI 鍥虹劧鏄ソ涓滆タ錛屼絾鏄鏋滄垜浠彍楦熸暣澶╁彧浼氬涓鍫嗗爢娌″畬娌′簡鐨勭被搴擄紝閭d箞鎴戜滑鍙兘姘歌繙灝卞彧鏄釜鑿滈笩浜嗭紝涓鍙ヨ瘽錛岀煡閬撲粬鍋氫簡浜涗粈涔堬紝姣斿厜鐭ラ亾浠栨庝箞鐢ㄩ偅鍙槸鐩稿綋鏈夋晥錛佽垂璇濆皯璇翠簡錛屽厛鐪嬩竴涓?DirectInput, 浠?MSDN 涓婄洿鎺ユ妱浜嗕竴孌碉紝 鎳掑緱緲昏瘧浜? 涓嬮潰絎竴孌佃瘽錛岃浜嗙悊瑙irectInput闇瑕佷簡瑙g殑涓浜涘熀鏈蹇典笌鏈錛屽洜涓轟互鍓嶇湅榪囦竴鐐癸紝澶ф鐭ラ亾鏄簺浠涔堛傝屾垜鐜板湪涓昏鏄仛瀛︿範絎旇錛屼笉鏄暀紼嬶紝鎵浠ヤ笉瑙i噴浜嗐?br />To understand DirectInput, it is essential to understand the following terms.聽
DirectInput object: The root DirectInput interface. 路聽Device: A keyboard, mouse, joystick, or other input device. 路聽 DirectInputDevice object: Code representing a keyboard, mouse, joystick, or other input device.路聽聽
Device object: Code representing a key, button, trigger, and so on found on a DirectInput device object. Also called device object instance.
絎簩孌佃瘽璇存槑浜嗕嬌鐢?DirectInput 鐨勫熀鏈楠わ紝 OIS 鎶婅繖浜涗笢瑗垮皝瑁呰搗鏉ヤ簡 .
The following steps represent a simple implementation of DirectInput in which the application takes responsibility for ascertaining what device object (button, axis, and so on) generated each item of data.

1.聽 Create the DirectInput object. You use methods of this object to enumerate devices and create DirectInput device objects.

2.聽 Enumerate devices. This is not an essential step if you intend to use only the system mouse or keyboard. To ascertain what other input devices are available on the user's system, have DirectInput enumerate them. Each time DirectInput finds a device that matches the criteria you set, it gives you the opportunity to examine the device's capabilities. It also retrieves a unique identifier that you can use to create a DirectInput device object representing the device.

3.聽 Create a DirectInputDevice object for each device you want to use. To do this, you need the unique identifier retrieved during enumeration. For the system mouse or keyboard, you can use a standard GUID.

4.聽 Set up the device. For each device, first set the cooperative level, which determines the way the device is shared with other applications or the system. You must also set the data format used for identifying device objects, such as buttons and axes, within data packets. If you intend to retrieve buffered data鈥攖hat is, events rather than states鈥攜ou also need to set a buffer size. Optionally, at this stage you can retrieve information about the device and tailor the application's behavior accordingly. You can also set properties such as the range of values returned by joystick axes.

5.聽 Acquire the device. At this stage you tell DirectInput that you are ready to receive data from the device.

6.聽 Retrieve data. At regular intervals, typically on each pass through the message loop or rendering loop, get either the current state of each device or a record of events that have taken place since the last retrieval. If you prefer, you can have DirectInput notify you whenever an event occurs.

7.聽 Act on the data. The application can respond either to the state of buttons and axes or to events such as a key being pressed or released.

8.聽 Close DirectInput. Before exiting, your application should unacquire all devices and release them, then release the DirectInput object.

浜嗚В浜嗚繖浜涘熀鏈楠わ紝涓嬮潰鎴戜滑鎵撳紑OIS鐨勬簮鐮侊紝鐪嬬湅涓婇潰榪?姝ラ灝佽鍒頒簡鍝噷銆傜劧鍚庢垜浠繑鍥?ExampleFrameListener, 鐪嬬湅 demo 涓槸濡備綍浣跨敤 OIS 鐨?.
絎竴涓鐪嬬殑鏄疘nputManager綾匯備粬鎻愪緵浜嗗鉤鍙版棤鍏崇殑鎺ュ彛錛岃礋璐h緭鍏ョ郴緇熺殑鍒涘緩銆傛病鍟ュソ璇寸殑錛岀湅婧愮爜鍚?鍙垪鍑烘牳蹇冧唬鐮?錛?br />InputManager * InputManager::createInputSystem( ParamList &paramList )
{聽聽聽聽
聽聽聽聽 聽InputManager* im = 0;
聽聽聽聽聽 #elif defined OIS_WIN32_PLATFORM聽
聽聽聽聽聽聽 聽聽聽 im = newWin32InputManager();
聽聽聽 #endif聽
聽聽聽聽聽聽 im->_initialize(paramList);聽
聽聽聽 return im;
}
鑷劧錛屾垜浠彧鍏沖績windows騫沖彴涓嬬殑銆備簬鏄壘鍒版簮鐮佺戶緇湅:
void Win32InputManager::_initialize( ParamList &paramList )
{聽
聽 //Create the device聽
聽聽 hr = DirectInput8Create(hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&mDirectInput, NULL );
聽聽 /Ok, now we have DirectInput, parse whatever extra settings were sent to us聽
聽聽聽 _parseConfigSettings( paramList );聽
聽聽聽 _enumerateDevices();
}

棣栧厛錛屽畬鎴愪簡8姝ラ涓殑絎?姝ワ紝 Create the DirectInput object 銆?鍦╛parseConfigSettings ( paramList ); 涓浠ュ悗灝嗚鍒涘緩鐨勮澶囷紙閿洏錛岄紶鏍囩瓑錛夌殑灞炴э紝渚嬪鐙崰妯″紡錛屽墠鍙版ā寮忕瓑銆傝繖浜涘睘鎬у垪琛╬aramList聽聽 緇忚繃澶勭悊鍚庯紝涔嬪悗鍦ㄥ垱寤鴻澶囩殑鏃跺欎紶鍏ャ?
void Win32InputManager::_enumerateDevices()
{聽聽聽聽 //Enumerate all attached devices聽
聽聽聽 mDirectInput->EnumDevices(NULL, _DIEnumKbdCallback, this, DIEDFL_ATTACHEDONLY);
}

瀹屾垚浜?姝ラ涓殑絎?銆閮ㄥ垎 Enumerate devices 錛屽畠鏄拡瀵規父鎴忔潌榪欑被璁捐鐨勶紝瀵逛簬閿洏錛岄紶鏍囧茍涓嶉渶瑕併侷nputManager 鍒涘緩涔嬪悗錛屽氨鍙互鐢ㄥ畠鏉ュ垱寤洪敭鐩橈紝榧犳爣浜嗐傚畠鎻愪緵浜嗗涓嬬殑鏂規硶錛?
Object * Win32InputManager::createInputObject( TypeiType, boolbufferMode )
{聽聽聽
聽 Object* obj = 0;聽聽聽
聽聽聽 switch( iType )聽
聽聽聽 {聽
聽聽聽 case OISKeyboard: obj = newWin32Keyboard( this, mDirectInput, bufferMode, kbSettings ); break;聽
聽聽聽 case OISMouse: obj = newWin32Mouse( this, mDirectInput, bufferMode, mouseSettings ); break;聽
聽聽聽 obj->_initialize();聽
聽聽聽 return obj;
}

榧犳爣錛岄敭鐩橀兘鏈夊悇鑷殑綾誨皝瑁呫備笅闈互閿洏涓轟緥錛岀湅鐪嬪畠鐨勬簮鐮佷腑閮藉仛浜嗕簺浠涔堬細
void Win32Keyboard::_initialize()
{

1聽聽聽聽聽 mDirectInput->CreateDevice(GUID_SysKeyboard, &mKeyboard, NULL);

2聽聽聽聽聽 mKeyboard->SetDataFormat(&c_dfDIKeyboard)

3聽聽聽聽聽 HWNDhwin = ((Win32InputManager*)mCreator)->getWindowHandle();

4聽聽聽聽聽 mKeyboard->SetCooperativeLevel( hwin, coopSetting)))

5聽聽聽聽聽 mKeyboard ->SetProperty( DIPROP_BUFFERSIZE, &dipdw.diph )))

6聽聽聽聽聽 HRESULThr = mKeyboard->Acquire();聽

}

榪欓噷鍙槸鍋氫簡涓嶅皯鐨勫伐浣?鐪嬬湅鏂規硶鍚嶅氨鍙互鏄庣櫧銆備負璇存槑鏂逛究鍔犱笂浜嗘爣鍙楓?br />1錛?瀹冨仛浜?姝ラ涓殑絎?姝ワ紝 Create a DirectInputDevice object for each device you want to use 銆?
2, 3 4,5瀹冧滑鍏卞悓鍋氫簡8姝ラ涓殑絎?姝ワ紞 Set up the device 銆傝繖閲岄潰鍖呮嫭錛氳緗敭鐩樼殑鏁版嵁鏍煎紡錛屽崗浣滄ā寮忥紝鍏朵粬灞炴с傚緢鏄庢樉錛?鍋氫簡8銆姝ユ楠や腑鐨勭5姝ワ紞 Acquire the device 銆?鎰忔濇槸鍛婅瘔DirectInput,鎴戝噯澶囦粠璁懼涓婅幏鍙栨暟鎹簡錛岀粰鎴戝仛濂界敓浼轟警鐫銆傚噯澶囧伐浣滈兘鍋氬ソ浜嗭紝鍙互鑾峰彇鏁版嵁浜嗭紝閫氳繃璁懼鎻愪緵鐨勪笅闈㈣繖涓柟娉曟潵鍋氳繖浠朵簨銆傝繖灝辨槸8銆姝ラ涓殑絎?浠朵簨- Retrieve data
void Win32Keyboard::capture()
{聽聽聽聽 if( mBuffered )聽
聽聽聽聽聽聽 _readBuffered();聽
聽聽聽聽 聽 else聽
聽聽聽聽聽聽 _read();
}

浠庢簮鐮佷腑鎴戜滑鍙互鐪嬪埌錛屾牴鎹暟鎹殑涓嶅悓錛岃繘琛屼簡涓嶅悓鐨勫鐞嗐傚懙錛屼粈涔堜笉鍚屽憿錛屽啀浠嶮SDN涓婃妱涓孌靛惂錛屼竴鐪嬪氨鏄庣櫧錛?Buffered and Immediate Data
DirectInput supplies two types of data: buffered and immediate. Buffered data is a record of events that are stored until an application retrieves them. Immediate data is a snapshot of the current state of a device. You might use immediate data in an application that is concerned only with the current state of a device - for example, a flight combat simulation that responds to the current position of the joystick and the state of one or more buttons. Buffered data might be the better choice where events are more important than states - for example, in an application that responds to movement of the mouse and button clicks. You can also use both types of data, as you might, for example, if you wanted to get immediate data for joystick axes but buffered data for the buttons.

鍛碉紝娓呮浜嗗惂銆傜戶緇湅浠g爜, capture()鏈変袱涓垎鏋濓紝鍒嗗埆澶勭悊緙撳啿鏁版嵁涓庣珛鍗蟲暟鎹?br />棣栧厛鏄紦鍐叉暟鎹紝涓誨共浠g爜濡備笅錛?
void Win32Keyboard::_readBuffered()
{
聽 DIDEVICEOBJECTDATA diBuff[KEYBOARD_DX_BUFFERSIZE];聽
聽聽聽 DWORD entries = KEYBOARD_DX_BUFFERSIZE;聽聽
聽聽 mKeyboard->GetDeviceData( sizeof(DIDEVICEOBJECTDATA), diBuff, &entries, 0 );聽
聽聽聽 //Update keyboard and modifier states.. And, if listener, fire events聽
聽聽聽 for(unsignedinti = 0; i < entries; ++i )聽
聽聽聽 {聽
聽聽聽聽聽聽 KeyCode kc = (KeyCode)diBuff[ i ].dwOfs;聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if( diBuff[ i ].dwData & 0x80 )聽
聽聽聽聽聽聽 {聽
聽聽 聽聽聽聽聽聽 if( listener )聽
聽聽聽聽聽聽聽聽聽聽聽 istener->keyPressed( KeyEvent( this,kc,_translateText(kc) ) );聽
聽聽聽聽聽聽 }聽
聽聽聽聽聽聽 else
聽聽聽聽聽聽 {聽
聽聽聽聽聽聽聽聽聽聽 //Fire off event聽
聽聽聽聽聽聽聽聽聽聽 if( listener )聽
聽聽聽聽聽聽聽聽聽聽聽 listener->keyReleased( KeyEvent( this, kc, 0 ) );聽
聽聽聽聽聽聽 }聽
聽聽聽 }
}

榪欐浠g爜涓紝GetDeviceData( sizeof(DIDEVICEOBJECTDATA), diBuff, &entries, 0 );鍙栧緱浜嗙紦鍐叉暟鎹?娣誨叆浜嗕竴涓暟緇勶細灝哄鏄疎YBOARD_DX_BUFFERSIZE,鍙互鐪嬪埌entries涔熺瓑浜庢鍊箋侲ntries鐨勪綔鐢ㄩ櫎浜嗗紑濮嬭皟鐢ㄦ椂璇存槑鏁扮粍鐨勫ぇ灝忥紝鍚屾椂鍦ㄥ嚱鏁拌皟鐢ㄨ繑鍥炴椂璇存槑鏁扮粍閲屾湁澶氬皯涓暟鎹~鍏ワ紙娌℃湁瓚沖澶氱殑緙撳啿鏁版嵁錛屽綋鐒跺~涓嶆弧鍟︼紝鍋囧entries榪斿洖6錛岃鏄庤繕鏈?涓寜閿俊鎭湪緙撳啿閲岀瓑寰呭鐞嗭級銆傚緢鏄庢樉錛宖or寰幆灝辨槸瀵硅繖浜涙湭澶勭悊鐨勪俊鎭繘琛屽鐞嗐侹eyCode kc = (KeyCode)diBuff[ i ].dwOfs; 榪欐槸鐪嬬湅錛岃繖涓簨浠舵槸鐢卞摢涓敭寮曡蛋.KeyCode鏄釜鏋氫婦鍨嬶細
enum KeyCode聽
聽聽聽 {聽
聽聽聽 銆聽 C_1聽聽聽聽聽聽聽聽聽聽 = 0x02,聽
聽聽聽聽聽聽 KC_2聽聽聽聽聽聽聽聽聽聽聽 = 0x03,聽
聽聽聽聽聽聽 KC_3聽聽聽聽聽聽聽聽聽聽聽 = 0x04,聽
聽聽聽聽聽聽 KC_A聽聽聽聽聽聽聽聽聽聽聽 = 0x1E,聽
聽聽聽聽聽聽 KC_S聽聽聽聽聽聽聽聽聽聽聽 = 0x1F,聽
聽聽聽聽聽聽 KC_D聽聽聽聽聽聽聽聽聽聽聽 = 0x20,聽
聽聽聽 }

紜畾浜嗘槸鍝釜閿紝鎺ヤ笅鏉ュ氨瑕侀棶浜嗭紝鏄寜涓嬭繕鏄噴鏀撅紵
聽if ( diBuff[ i ].dwData & 0x80 ) 銆鍥炵瓟浜嗚繖涓棶棰?涓嬮潰鍋氱殑鏄?
if ( listener )聽
聽聽聽聽聽聽聽聽聽聽聽 istener->keyPressed( KeyEvent( this,kc,_translateText(kc) ) );

瀹冩妸鐩稿叧鐨勪俊鎭唴瀹瑰寘瑁呮垚KeyEvent錛屼綔涓哄弬鏁板彂緇欎簡錛屽凡緇忔敞鍐屼簡鐨勪睛鍚?鍙兘涓嶅お鏄庣櫧錛岃В閲婁竴涓嬶細褰撴垜浠寜涓嬩簡鏌愪釜閿紝鍙互璁や負鏄彂鐢熶簡涓狵eyEvent,紼嬪簭閲屼細鍝嶅簲榪欎釜浜嬩歡錛屾柟娉曞氨鏄妸鏌愪釜綾誨疄渚嬫敞鍐屼負渚﹀惉鑰?listener),璇寸櫧浜嗗氨鏄憡璇塐IS,褰撻敭鐩樻寜涓嬮噴鏀劇殑鏃跺欎綘鍛婅瘔鎴戝晩錛屾垜瑕佸搷搴斾粬銆傝繖閲孫IS媯嫻嬪埌鎸夐敭浜嬩歡鍙戠敓浜嗭紝鏍規嵁渚﹀惉鑰呯殑璇鋒眰錛岃皟鐢ㄤ睛鍚呯殑鏂規硶(keyPressed)銆備篃璁告湁鐤戦棶錛孫IS 鎬庝箞鐭ラ亾渚﹀惉鑰呭疄鐜頒簡keypressed錛堬級鏂規硶鍛紵涓嶆ュ厛鐪嬩互涓嬩唬鐮侊紝鍦℅UI demo閲岋細
class GuiFrameListener : publicExampleFrameListener, publicOIS::KeyListener, publicOIS::MouseListener
鐪嬪埌浜嗗惂錛屽畠緇ф壙鑷?OIS:KeyListener ,浠嶰IS鐨勬簮鐮佷腑鎵懼埌瀹冿細
class _OISExport KeyListener聽
聽聽聽 {聽
聽聽聽 public:聽
聽聽聽聽聽聽 virtual ~KeyListener() {}聽
聽聽聽聽聽聽 virtual bool keyPressed( constKeyEvent &arg ) = 0;聽
聽聽聽聽聽聽 virtual bool keyReleased( constKeyEvent &arg ) = 0;聽聽聽聽
聽聽聽 };
鍝堝搱錛屼粬姝f槸瀹氫箟浜嗚繖涓や釜鎺ュ彛錛屾棦鐒剁戶鎵胯嚜浠栵紝褰撶劧涔熷氨鎷ユ湁浜嗚繖涓や釜鎺ュ彛錛屼簬鏄疓uiFrameListener鎴愪簡鍚堢悊鍚堟硶鐨凩istener浜嗐?
鍝︼紝瀹冨湪鍝噷娉ㄥ唽鐨勫憿錛熷緢綆鍗?鍦℅uiFrameListener鐨勬瀯閫犲嚱鏁伴噷鎴戜滑鐪嬪埌錛?
{
聽聽聽聽聽聽 mMouse ->setEventCallback(this);聽
聽聽聽聽聽聽 mKeyboard->setEventCallback(this);
}
緇х畫鎸栨簮鐮侊細
virtual void Keyboard : 錛歴etEventCallback ( KeyListener *keyListener ) {listener=keyListener;}
榪欎笅搴旇灝辨槑鐧戒簡鍚с傚緢鏄庢樉GUI Demo閲屼嬌鐢ㄤ簡緙撳啿妯″紡.
鍓╀笅鏉ュ氨鏄珛鍗蟲ā寮忕殑鏁版嵁浜嗭紝浠栧緢濂界悊瑙o細
void Win32Keyboard::_read()
{聽
聽 mKeyboard->GetDeviceState( sizeof(KeyBuffer), &KeyBuffer );聽
}
瀹冩妸閿洏褰撲笅鐨勭姸鎬佷繚瀛樺埌緙撳啿涓幓錛岃鎯崇煡閬撳摢涓敭鏄惁鎸変笅錛屽彧瑕佸鐓х紦鍐測滄寜鍥劇儲楠モ濆氨鍙互浜嗐?br />聽bool Win32Keyboard::isKeyDown( KeyCodekey )
{聽
聽聽聽 return (KeyBuffer[key] & 0x80) != 0;
}
榪欎釜閿寜涓嬩簡鍚楋紵閭d釜閿寜涓嬩簡鍚楋紵閭i偅涓憿錛熷懙錛岀湡鍟板棪錛屽緱涓涓釜鐨勯棶銆?
浜庢槸鎴戜滑 GUI Demo 涓彲浠ョ湅鍒頒笅鍒楃殑浠g爜錛?
virtual bool processUnbufferedKeyInput(const FrameEvent& evt)聽
聽聽聽聽聽聽 {聽

聽聽聽聽聽聽聽聽聽聽聽 if(mKeyboard->isKeyDown(KC_A))聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽mTranslateVector.x = -mMoveScale;聽聽聽 // Move camera left聽
聽聽聽聽聽聽聽聽聽聽聽 if(mKeyboard->isKeyDown(KC_D))聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽mTranslateVector.x = mMoveScale;聽聽聽聽聽 // Move camera RIGHT聽
聽聽聽聽聽聽聽聽聽聽聽聽聽 if(mKeyboard->isKeyDown(KC_UP) || mKeyboard->isKeyDown(KC_W) )聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 mTranslateVector.z = -mMoveScale;聽聽聽聽 // Move camera forward聽
聽聽聽聽聽聽聽聽聽聽聽聽聽 if(mKeyboard->isKeyDown(KC_DOWN) || mKeyboard->isKeyDown(KC_S) )聽聽
聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽 mTranslateVector.z = mMoveScale;聽聽聽聽聽 // Move camera backward
锝?

鎴戜滑鐢ㄩ敭鐩樿涓嶆槸緙撳啿妯″紡錛岃涔堢珛鍗蟲ā寮忥紝涓嶅彲鑳戒竴璧蜂笂錛岃繖鎵鏈夊湪 demo 涓兘鑳界湅鍒幫紝 demo 鐨勪綔鑰呮噿寰楀鍐欎唬鐮?( 鍢垮樋 ) 錛屽畠緇ф壙浜?ExampleFrameListener 鐨勮澶氬姛鑳斤紝鑰?ExampleFrameListener 涔熷疄鐜頒簡浜涚珛鍗蟲ā寮忕殑鎸夐敭澶勭悊銆?Demo 娌℃湁鐢ㄥ埌銆傚啓浜嗚繖涔堝浜嗭紝榪樺緱 8 銆澶ф楠わ紵錛?璇ョ 7 姝ヤ簡鍚э細 鈥曗?Act on the data 錛?榪欐湁浠涔堝ソ璇寸殑鍛紵鐖卞拫鍜嬪湴錛佹渶鍚庝竴姝ワ紝絎?8 姝モ曗曞ぉ榫欏叓閮?! 鍛甸敊浜嗭紝鏄?Close DirectInput聽聽聽聽聽 鍏跺疄寰堢畝鍗曪紝 OIS 鎶婁粬浠皝瑁呭湪鍚勪釜綾葷殑鏋愭瀯鍑芥暟閲屼簡錛屾兂褰撶劧錛屾簮鐮佷篃涓嶇敤璐翠簡 . 璇翠簡 OIS 銆濡備綍鎶?DirectInput 灝佽璧鋒潵錛屽弬鑰?8 澶ф楠わ紝濡備綍浣跨敤 OIS 涔熷熀鏈緢鏄庣櫧浜嗐侽IS 錛屽氨瀛﹀埌榪欓噷錛屾帴涓嬫潵璇ヤ富瑙掍笂鍦?CEGUI聽寰椾紤鎭簡錛屾墦瀛楋紝緲昏祫鏂欙紝鐪嬩唬鐮侊紝寰堢瘡浜嗐?




]]>
ORGE(Eihort)瀛︿範絎旇涔婫UI Demo 絎竴閮ㄥ垎 渚嬪瓙妗嗘灦http://m.shnenglu.com/yuanyajie/archive/2007/03/01/19092.html娓呮簮娓告皯娓呮簮娓告皯Thu, 01 Mar 2007 13:47:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/03/01/19092.htmlhttp://m.shnenglu.com/yuanyajie/comments/19092.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/03/01/19092.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/19092.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19092.html娓呮簮娓告皯銆 gameogre@gmail.com

涓嬮潰鐩存帴娑夊強鍒扮浉鍏崇被


棣栧厛鐪嬩竴涓?/span> ExampleFrameListener, 涓嬮潰鏄被闂村叧緋誨浘

 
ExampleFrameListener 緇ф壙浜?FrameListener, 鍥犳鎷ユ湁浜嗗畠鐨勪袱涓柟娉?

virtual bool frameStarted(constFrameEvent& evt)

virtual bool frameEnded(constFrameEvent& evt)

鍦?ExampleApplication 涓皢瀹冧滑娉ㄥ唽鍒?ogre 涓紝鍦ㄩ傚綋鐨勬椂鍊欙紝 ogre 浼氳皟鐢ㄨ繖涓や釜鏂規硶 . 涓嬮潰鏄敞鍐屽湴鐐逛笌鏃舵満

virtual void ExampleApplication::createFrameListener(void)

    {

        mFrameListener= newExampleFrameListener(mWindow, mCamera);

        mFrameListener->showDebugOverlay(true);

        mRoot->addFrameListener(mFrameListener);

}

createFrameListener 鍦?ExampleApplication::setup() 涓璋冪敤.

ExampleFrameListener 鍙堢戶鎵夸簡 WindowEventListener.

WindowEventListerner 鍦╫gre 1.4涓槸鏂板姞鐨勩傛寜鐓ф墜鍐岋細瀹冩槸涓涓?Callback class used to send out window events to client app. 瀹冨畾涔変互涓嬪洓涓帴鍙?鑰屾樉鐒朵緥瀛愮▼搴忎腑鍙敤鍒頒簡涓や釜
virtual void windowMoved(RenderWindow* rw)   {}

virtual void windowResized(RenderWindow* rw) {}

virtual void windowClosed(RenderWindow* rw)  {}

virtual void windowFocusChange(RenderWindow* rw) {}

榪欑鎵璋撶殑鍥炶皟綾誨浣曞疄鐜幫紵涓嬮潰鍙鏄巜indows鎿嶄綔緋葷粺鐨勬儏鍐點?

鎴戜滑鐭ラ亾錛寃indows鎿嶄綔緋葷粺鐩戣緋葷粺涓彂鐢熺殑涓鍒囷紝閫氳繃娑堟伅鐨勬柟寮忛氱煡鐩稿簲鐨勭獥鍙c傛瘡涓獥鍙g被娉ㄥ唽鐨勬椂鍊欙紝閮芥寚鏄庝竴涓洖璋冭繃紼嬶紝鍦ㄩ偅閲屽鐞嗕紶鏉ョ殑娑堟伅銆傚簲鐢ㄧ▼搴忓張鏈夊悇鑷殑娑堟伅闃熷垪錛屼粠娑堟伅闃熷垪涓彇寰楁秷鎭紝鐒跺悗鍒嗗紑緇欏悇紿楀彛.

涓嶉槻浠巓gre鐨勬簮鐮佷腑鐪嬬湅涓婅堪windows鍩烘湰榪囩▼濡備綍瀹炵幇錛岃繖鏈夊姪鐞嗚В鍥炶皟綾葷殑瀹炵幇榪囩▼錛?

棣栧厛錛宱gre鍙互涓烘垜浠垱寤轟竴涓獥鍙o細

mWindow = mRoot->initialise(true);//

浜庢槸鎴戜滑榪涘叆鍒癷nitialise()涓湅鐪嬪惂錛屽畠鍊掑簳鍋氫簡浜涗粈涔堜簨鎯呫?

RenderWindow * Root::initialise(boolautoCreateWindow, constString& windowTitle)

{

// ……

mAutoWindow =  mActiveRenderer->initialise(autoCreateWindow, windowTitle);

// 榪欓噷錛歊enderSystem* mActiveRenderer

// ……

}

mActivaRenderer 鍙槸鎺ュ彛錛屼笉鐢ㄥ疄闄呯殑浜嬫儏錛屽疄闄呯殑宸ヤ綔鐢卞畠鐨勫瓙綾誨畬鎴愶紝鐜板彧鐪婦irectX瀹炵幇:

RenderWindow * D3D9RenderSystem::initialise( boolautoCreateWindow, constString& windowTitle )

{

// ……………………

autoWindow = this->createRenderWindow( windowTitle, width, height,

              fullScreen, &miscParams );

// ………………… ..

}

濂斤紝緇х畫涓嬪幓,鐪嬬湅createRenderWindow鍋氫簡浜涗粈涔?

    

RenderWindow * D3D9RenderSystem::createRenderWindow(constString &name,

       unsigned int width, unsignedintheight, boolfullScreen,

       const NameValuePairList *miscParams)

{

// …………… ..

RenderWindow * win = newD3D9RenderWindow(mhInstance, mActiveD3DDriver,

           mPrimaryWindow ? mpD3DDevice : 0);

 

win ->create( name, width, height, fullScreen, miscParams);

// ………………

}

緇х畫

void D3D9RenderWindow::create(constString& name, unsignedintwidth, unsignedintheight,

       bool fullScreen, constNameValuePairList *miscParams)

{

// Register the window class

// NB allow 4 bytes of window data for D3D9RenderWindow pointer

    WNDCLASS wc = { 0, WindowEventUtilities::_WndProc, 0, 0, hInst,

           LoadIcon(0, IDI_APPLICATION), LoadCursor(NULL, IDC_ARROW),

              (HBRUSH)GetStockObject(BLACK_BRUSH), 0, "OgreD3D9Wnd" };

           RegisterClass(&wc);

// 瀹氫箟浜嗙獥鍙g被錛屽茍涓旇繘琛屾敞鍐岋紝闇瑕佹敞鎰忕殑鏄紝浣犵湅鐪嬪畠鎶婄獥鍙g被鐨勫洖璋冨嚱鏁扮殑鍊艱涓轟簡浠涔堬紵鍏堣浣忥紝涓浼氬効璁ㄨ瀹冨惂銆?

           // Create our main window

           // Pass pointer to self

           mIsExternal = false;

           mHWnd = CreateWindow("OgreD3D9Wnd", title.c_str(), dwStyle,

              mLeft, mTop, mWidth, mHeight, parentHWnd, 0, hInst, this);

// 璋冪敤win32API鎶婄獥鍙g湡姝reate鍑烘潵浜?

WindowEventUtilities ::_addRenderWindow(this);

// 榪欎竴姝ヤ篃瑕佹敞鎰忓埌

}

緇х畫

void WindowEventUtilities::_addRenderWindow(RenderWindow* window)

{

    _msWindows.push_back(window);

}

_msWindows 瀹氫箟涓猴細

typedef std::vector<RenderWindow*> Windows;

 static Windows _msWindows;

錛屾病浠涔堬紝鍙槸涓猻tl瀹瑰櫒錛屾妸鐢熸垚鐨勭獥鍙f斁榪涘幓浜?

鍒扮幇鍦紝瀹瑰櫒綾繪敞鍐屽ソ浜嗭紝鍥炶皟鍑芥暟涔熸寚瀹氫簡錛岀獥鍙d篃鍒涘緩鍑烘潵浜嗐傜幇鍦ㄦ垜浠戶緇濊冩垜浠渶鏈鍒濈殑闂錛?WindowEventListerner 榪欎釜鍥炶皟綾繪槸濡備綍瀹炵幇鎵璋撶殑鍥炶皟鏈哄埗鐨勶紝涔熷氨鏄windowEventListerner涓嶆槸瀹氫箟浜嗗洓涓帴鍙o紝瀹冨搷搴旂壒瀹氱殑windows浜嬩歡錛屾垜浠璁ㄨ鐨勫氨鏄繖鍥涗釜鎺ュ彛鏂規硶濡備綍琚皟鐢ㄨ搗鏉ワ紝瀹炵幇鎵璋撶殑鍥炶皟鏈哄埗銆?榪樿寰楁敞鍐岀獥鍙g被鐨勫洖璋冨嚱鏁版槸浠涔堝惂錛?

WindowEventUtilities::_WndProc 錛?鍛靛懙錛屽彧瑕佸湪閭i噷璋冪敤涓婅堪鍥涗釜鎺ュ彛鍑芥暟灝卞ソ浜嗐?

鍝棶棰樺張鏉ヤ簡錛宊WndProc鍒板摢閲屾壘榪欏洓涓帴鍙e嚱鏁板憿錛?

鍦?ExampleFrameListener 綾葷殑鏋勯犲嚱鏁伴噷鎴戜滑鍙互鐪嬪埌濡備笅浠g爜

//Register as a Window listener

WindowEventUtilities::addWindowEventListener(mWindow, this);

鍟婏紝榪欏氨鏄ゥ縐樻墍鍦?鍒版簮鐮佷腑鐪嬬湅鍚с?

void WindowEventUtilities::addWindowEventListener( RenderWindow* window, WindowEventListener* listener )

{

    _msListeners.inser t(std::make_pair(window, listener));

}

-msListeners 琚畾涔夋垚榪欐牱瀛愶細

typedef std::multimap<RenderWindow*, WindowEventListener*> WindowEventListeners;

static WindowEventListeners _msListeners;

娌℃湁浠涔堬紝灝辨槸STL瀹瑰櫒錛屽畠浣垮緱紿楀彛(RenderWindow)涓?WindowEventListener)

緇勬垚浜嗕翰瀵嗘淳瀵癸紝紿楀彛鏈変簡浠涔堟秷鎭紝灝卞彲浠ョ敤瀵瑰簲鐨勫洖璋冪被鍝嶅簲銆?

鍙墿涓嬩竴鐐圭瀵嗕簡錛屽埌搴曟庝箞璋冪敤璧鋒潵鐨勫憿錛屾煇鏌愭煇璇磋繃錛屾簮鐮佷箣涓嬶紝浜嗘棤縐樺瘑錛岄偅灝辯湅婧愮爜鍚э細

LRESULT CALLBACK WindowEventUtilities::_WndProc(HWNDhWnd, UINTuMsg, WPARAMwParam, LPARAMlParam)

{

WindowEventListeners ::iteratorstart = _msListeners.lower_bound(win),

                     end = _msListeners.upper_bound(win);

// 涓洪亶鍘嗗仛鍑嗗

    switch( uMsg )   // 娑堟伅鐪熺殑鏉ヤ簡

  {

case WM_MOVE:

       //log->logMessage("WM_MOVE");

       win->windowMovedOrResized();

       for( ; start != end; ++start )

           (start->second)->windowMoved(win);

       break;

    case WM_SIZE:

       //log->logMessage("WM_SIZE");

       win->windowMovedOrResized();

       for( ; start != end; ++start )

           (start->second)->windowResized(win);

       break;

}

}

灝辮繖鏍鳳紝鍥涗釜鎺ュ彛鍑芥暟琚皟鐢ㄨ搗鏉ヤ簡錛?

涔熻錛屼篃璁革紝鍏充簬娑堟伅榪樻湁浜涜璇存槑鐨勩傛秷鎭浣曟車鍑烘潵鐨勶紵

褰撶湅鍒頒簡濡備笅浠g爜錛岀獊鐒跺氨鎯蟲壘涓湅鍙嬶紝浼氬績涓絎?

void WindowEventUtilities::messagePump()

{

    MSG   msg;

    while( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )

    {

       TranslateMessage( &msg );

       DispatchMessage( &msg );

    }

}

鎵撶牬閾侀攨闂埌搴曞惂錛屽畠鍙堝浣曡璋冪敤璧鋒潵錛?

void Root::startRendering(void)

    {

        while( !mQueuedEnd )

        {

           //Pump messages in all registered RenderWindow windows

           WindowEventUtilities::messagePump();

 

           if (!renderOneFrame())

                break;

        }

}

灝辨槸榪欓噷浜嗐傚啓鐨勪貢涓冨叓緋燂紝鑴戝瓙涔熶貢涓冨叓緋燂紝姊崇悊涓涓嬪惂銆?

棣栧厛錛宮Window = mRoot->initialise(true);鍒濆鍖栵紝闅忎究閫氳繃涓緋葷粺榪為攣鍙嶅簲create鍑烘潵涓涓獥鍙o紝騫舵妸瀹冪殑鍥炶皟鍑芥暟璁懼畾涓?WindowEventUtilities::_WndProc.

ExampleFrameListener 緇ф壙浜?WindowEventListener 鐨勫洓涓害瀹氭帴鍙e嚱鏁般傚茍涓斿湪瀹冪殑鏋勯犲嚱鏁伴噷璋冪敤 WindowEventUtilities::addWindowEventListener(mWindow, this); 榪涜浜嗘敞鍐岋紝浠ヤ究鐗瑰畾紿楀彛娑堟伅鍙戠敓鏃惰繘琛屽搷搴? Root ::startRendering 錛堬級榪涘叆浜嗘覆鏌撳驚鐜紝娓叉煋姣忎竴甯у墠錛屾嫻媤idnows娑堟伅錛屽茍榪涜鍒嗗彂銆備簬鏄秷鎭繘鍏ュ埌紿楀彛綾葷殑鍥炶皟鍑芥暟_WndProc,鍦ㄥ嚱鏁板唴閮ㄦ牴鎹秷鎭殑涓嶅悓錛屽垎鍒皟鐢ㄥ凡娉ㄥ唽鐨勪睛鍚櫒鐨勭害瀹氭帴鍙e嚱鏁般?br>鍏堝啓鍒拌繖閲屽惂錛屽師鏉ュ彧鏄兂鍐欏啓CEGUI鐨勪嬌鐢紝璋佺煡宸茬粡鍐欎簡榪欎箞澶氫簡錛孋EGUI榪樹竴瀛楁湭鎻愩傝剳瀛愪貢浜嗭紝鍏堜紤鎭惂銆備笅闈㈣繕寰楄璇碠IS,CEGUI鍙堝緱闈犲悗浜?




]]>
錛堣漿錛塁EGUI 涓枃杈撳叆http://m.shnenglu.com/yuanyajie/archive/2007/02/28/19037.html娓呮簮娓告皯娓呮簮娓告皯Wed, 28 Feb 2007 02:25:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2007/02/28/19037.htmlhttp://m.shnenglu.com/yuanyajie/comments/19037.htmlhttp://m.shnenglu.com/yuanyajie/archive/2007/02/28/19037.html#Feedback7http://m.shnenglu.com/yuanyajie/comments/commentRss/19037.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/19037.html鍒氬垰鎼濩EGUI鐨勬椂鍊欏ぇ浣撶湅浜嗕竴涓婥EGUI銆傚師浠ヤ負鍏朵笉鏀寔涓枃銆?br />鑰屼笖緗戜笂寰堝浜洪兘璇翠笉鏀寔銆傘傛垜涔熷氨娌℃湁緇嗙粏鐪嬩簡銆?br />褰撶敤鍒癊ditbox鐨勬椂鍊欍傚張涓嶅緱涓嶇敤涓枃銆偮犺繖鏃跺欓棶棰樺氨鏉ヤ簡銆?br />鍏堟槸鐢╱tf8鏂瑰紡杞崲杈懼埌涓枃鏄劇ず鐨勭洰鐨勩傚彲鏄腑鏂囪緭鍏ュ嵈涓嶈銆傜綉涓婃湁涓縐嶈娉曟槸灝嗕袱涓瓧鑺傞摼鎺ヨ搗鏉ュ嵆鍙傜湅浜嗕竴涓嬬紪璇戝櫒璁劇疆錛屽綋鍓嶄嬌鐢ㄧ殑鏄瀛楄妭妯″紡銆傚氨涓嶅緱涓嶈繖鏍峰仛浜嗐備笉榪囦及璁℃垜瀵笴++榪樹笉綆楁繁銆傛悶浜嗕竴浼氾紝榪樻槸澶辮觸浜嗐備笉榪囧悗鏉ュ湪緗戜笂鏈変竴涓湅鍙嬭CEGUI鏈潵灝辨敮鎸佷腑鏂囩殑銆備絾鍙堢湅鍒板叾瀹冧漢璇寸殑錛屼笉瑙e叾璦鍟娿傚啀鍚庢潵鏈変竴涓彨鑰佸綺劇殑緗戝弸緇欎簡鎴戜竴浠戒唬鐮併傜粨鏋滅湡鐨勬垚鍔熶簡銆傚彲鏄劇ず鍙緭鍏ヤ腑鏂囥傚浜庝腑鏂囩殑瀛楄〃鐢變竴涓猣ont鏂囦歡鍒涘緩銆傛柟娉曞涓嬶細
1:鎵句竴涓腑鏂囧瓧浣撴枃浠?.ttf)
2:鍒涘緩涓涓枃鏈枃浠訛紝灝嗗叾瀛樹負.font鏂囦歡.
3:鍦?font鏂囦歡閲屽啓濡備笅浠g爜(鎴戜釜鍋囪涓涓猚hinese.ttf鏂囦歡):
<?xml version="1.0" ?>
<Font Name="chinese" Filename="chinese.TTF" Type="FreeType" Size="10" NativeHorzRes="1024" NativeVertRes="768" AutoScaled="true"/>
// 璇存槑:Name灝辨槸鍦ㄧ▼搴忎腑瑕佺敤鍒扮殑鍚嶅瓧, Filename灝辨槸鏂囦歡鍚?FreeType鍙互鏄嚜瀹氫箟鐨?鍏蜂綋鍒板畼鏂圭綉鏈夎鏄?Size灝辨槸瀛椾綋鐨勫ぇ灝?紼嬪簭涓槸涓嶈兘璋冨ぇ灝忕殑.鍥犱負瀛椾綋鐢熸垚綰圭悊鍚庡氨鏄浐瀹氱殑.
4:鍦ㄤ綘鍐欑殑紼嬪簭鐨勯敭鐩樺拰浜嬩歡涓婂鐞嗕笂闈㈡甯告儏鍐典笅鏄繖鏍峰瓙鐨?CEGUI::System->injectChar((CEGUI::utf32)Key); // Key鍊煎氨鏄綘紼嬪簭鎹夊埌鐨勬寜閿?鎴戜滑闇瑕佸皢鍏舵敼涓?

聽聽聽聽if (ImmIsIME(GetKeyboardLayout(0)))
聽聽聽聽{
聽聽聽聽聽CEGUI::DbcsSupport::injectChar(Key);
聽聽聽聽}
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽CEGUI::System->injectChar((CEGUI::utf32)Key);
聽聽聽聽}

聽聽聽 ImmIsIME(GetKeyboardLayout(0))鐩殑鏄敤浜庢鍒欑幇鍦ㄧ殑杈撳叆娉曟槸鍚︽墦寮鐨勩傚鏋滄槸鍦ㄨ緭鑻辨枃鐘舵佹垜鎯充綘涓嶄細鐢昏泧娣昏凍鐨勩備嬌鐢ㄨ繖涓渶瑕乮mm32.lib鐨勬敮鎸併侻SDN涓婇潰涔熸湁璇存槑銆?br />5:鏈鍚庡氨鏄坊鍔犱竴浠戒唬鐮佸埌浣犵殑CEGUI浣跨敤欏圭洰閲岋紝濡備笅錛?br />namespace CEGUI{
bool DbcsSupport::injectChar(utf32 code_point )
聽{
#ifndef UNICODE
聽聽static char聽聽聽聽 s_tempChar[3]聽 = "";
聽聽static wchar_t聽 s_tempWchar[2] = L"";
聽聽static bool s_flag = false;
聽聽unsigned char聽 uch聽 = (unsigned char)code_point;
聽聽if( uch聽>= 0xA1 )
聽聽{
聽聽聽if( !s_flag )
聽聽聽{
聽聽聽聽s_tempChar[0] = (char)uch; //絎竴涓瓧鑺?br />聽聽聽聽s_flag = true;
聽聽聽聽return true;
聽聽聽}
聽聽聽else if( uch聽>= 0xA1聽)
聽聽聽{
聽聽聽聽s_tempChar[1] = (char)uch; //絎簩涓瓧鑺?br />聽聽聽聽s_flag = false;
聽聽聽聽MultiByteToWideChar( 0, 0, s_tempChar, 2, s_tempWchar, 1); //杞垚瀹藉瓧鑺?br />聽聽聽聽s_tempWchar[1] = L'\0';
聽聽聽聽utf32 code = (utf32)s_tempWchar[0];
聽聽聽聽//Font* fnt = System::getSingleton().getDefaultFont();
聽聽聽聽return CEGUI::System::getSingleton().injectChar( code );
聽聽聽}
聽聽聽else
聽聽聽{
聽聽聽聽return CEGUI::System::getSingleton().injectChar(code_point);
聽聽聽}
聽聽}
聽聽else
聽聽{
聽聽聽s_flag = false;
聽聽聽return CEGUI::System::getSingleton().injectChar(code_point);
聽聽}
#else
聽聽return CEGUI::System::getSingleton().injectChar(code_point );
#endif
聽}
}

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1509217



]]>
鍦∣GRE涓嬌鐢–EGUI鐨勭瑪璁?/title><link>http://m.shnenglu.com/yuanyajie/archive/2006/11/01/14485.html</link><dc:creator>娓呮簮娓告皯</dc:creator><author>娓呮簮娓告皯</author><pubDate>Wed, 01 Nov 2006 07:32:00 GMT</pubDate><guid>http://m.shnenglu.com/yuanyajie/archive/2006/11/01/14485.html</guid><wfw:comment>http://m.shnenglu.com/yuanyajie/comments/14485.html</wfw:comment><comments>http://m.shnenglu.com/yuanyajie/archive/2006/11/01/14485.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://m.shnenglu.com/yuanyajie/comments/commentRss/14485.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/yuanyajie/services/trackbacks/14485.html</trackback:ping><description><![CDATA[ <p>浣跨敤 cegui 鏉ュ埗浣滅晫闈?, 涓嶈鍦ㄤ綍縐嶅鉤鍙頒笅 , 鏈夊熀鏈殑涓夊ぇ姝ラ瑕佸仛 : <br />1, 鍒涘緩涓涓?CEGUI::Render 瀹炰緥 <br />2, 鍒涘緩 CEGUI::System 瀵硅薄 <br />3, 璋冪敤鍚勭鏂規硶鏉ユ覆鏌撶敤鎴風晫闈?<br />絎竴姝?, 鍦ㄦ垜浣跨敤鐨?ogre 鐜涓嬩嬌鐢ㄤ互涓嬩唬鐮佹潵鍒涘緩 CEGUI::Render 瀹炰緥 <br />Ogre3D <br />CEGUI::OgreCEGUIRenderer* myRenderer = <br />聽聽聽聽聽聽 new CEGUI::OgreCEGUIRenderer(myRenderWindow); <br />絎簩姝ョ浉褰撶畝鍗?, 鍙嬌鐢?<br />new CEGUI::System(myRenderer); <br />絎笁姝ワ紝鍩烘湰涓婃潵璁詫紝澶ч儴鍒嗗鉤鍙頒笅錛屽 direct3D, OpenGL, 鎴戜滑鍦ㄦ覆鏌撳驚鐜殑灝鵑儴璋冪敤 <br />CEGUI::System::renderGUI 鏉ュ紑濮嬬晫闈㈢殑娓叉煋銆傚鏋滄垜浠嬌鐢?ogre3d 寮曟搸錛岃繖涓姝ヤ笉闇瑕?<br />鎴戜滑鏄劇ず鐨勬墽琛屻傚洜涓?ogre 寮曟搸宸茬粡鑰冭檻浜嗐?<br />闄や簡榪欎笁澶ф涔嬪錛屾垜浠繕鏈変竴浜涘伐浣滆鍋氾紝棣栧厛錛屾垜浠渶瑕佸姞杞芥暟鎹枃浠訛紝騫朵笖瀹屾垚鍒濆鍖栧伐浣溿?<br />CEGUI 浣跨敤浜嗚澶氱被鍨嬬殑鏂囦歡銆?CEGUI 浣跨敤涓涓О涓?ResourceProvider 鐨勫府鍔╁璞★紝鐢ㄥ畠鏉ュ仛涓烘牳蹇?CEGUI 搴撲笌澶栭儴鏂囦歡鍔犺澆緋葷粺鐨勬帴鍙c傞氳繃瀹炵幇涓涓壒瀹氱殑 ResourceProvider 瀵硅薄錛?cegui 鐨勬覆鏌撴ā鍧楀氨鍙互涓庡閮ㄧ郴緇熺殑璧勬簮綆$悊鍣ㄣ佹枃浠跺姞杞藉瓙緋葷粺鏃犵紳鍦伴泦鎴愩?CEGUI 闇瑕佺殑鏁版嵁鏂囦歡渚垮彲浠ラ氳繃澶栭儴緋葷粺鎻愪緵鐨勫姛鑳芥潵榪涜鍔犺澆銆?CEGUI 涓殑澶ч儴鍒嗘枃浠舵槸浠?XML 鐨勬枃浠舵牸寮忔潵淇濆瓨鐨勩傜己鐪佹儏鍐典笅錛?CEGUI 鍦ㄥ唴閮ㄤ嬌鐢?Xerces-C++ 搴撴潵鍒嗘瀽 XML 鏂囦歡錛屼嬌鐢?schema 鏉ュ xml 榪涜鏍¢獙錛?schema 鏂囦歡浠ユ爣鍑嗙殑 .xsd 鎵╁睍鍚嶆潵淇濆瓨 . 璁稿鏂囦歡鏈川涓婇兘鏄?XML 鏍煎紡鐨勬枃浠訛紝浣嗘槸鏍規嵁鍏舵剰涔変笉鍚岋紝鍒嗗埆浣跨敤浜嗕笉鍚岀殑鏂囦歡鎵╁睍鍚嶃?<br />.Imageset 鏂囦歡鍙皢涓騫呭浘鍍忕湅鍋氳嫢騫插皬鍥懼儚鐨勯泦鍚堛傛崲鍚嶈瘽璇達紝灝辨槸灝嗕竴騫呭浘鍍忕殑鏌愪釜鍖哄煙鐪嬪仛涓騫呯嫭绔嬬殑鍥劇墖鏉ヤ嬌鐢ㄣ?<br />.Font 瀹氫箟浜嗗湪 CEGUI 涓墍浣跨敤鐨勫瓧浣撶被鍨嬨?<br />.scheme 銆鍙互灝嗚澶氭暟鎹粍鍚堝湪涓璧蜂嬌鐢紝瀹冧篃鏄杞戒笌娉ㄥ唽 widget 鏈鏂逛究鐨勬柟娉曘傚湪涓涓?.scheme 鏂囦歡涓彲浠ュ寘鎷笅鍒楀嚑縐嶆暟鎹細 <br />Imagest,font, window Set, window Alias <br />window set 鎸囧畾浜嗚杞芥ā鍧楋紙 .dll 絳夛級鐨勫悕縐幫紝鍜屼竴緇勫彲浠ユ敞鍐屽埌緋葷粺涓殑 widget. <br />window alias 鎻愪緵浜嗗埆鍚嶇殑鍔熻兘錛屽疄鐜板凡緇忔敞鍐岀殑 window/widget 鐨勫艦寮忎笂鐨勯殣钘忋?<br />.Layout 銆鍖呭惈浜嗙獥鍙e竷灞鐨?xml 琛ㄧず銆傛瘡涓祵濂楃殑 'window' 鍏冪礌瀹氫箟浜嗚鍒涘緩鐨?window 鎴栨槸 widget."Property" 鍏冪礌瀹氫箟浜嗙獥鍙g殑璁劇疆涓庡睘鎬у箋?<br />.config 鏄彲渚涢夋嫨鐨勯厤緗枃浠訛紝浠栧彲鎸囧畾涓浜涚己鐪佺殑灞炴с?<br />鎴戜滑浣跨敤 CEGUI 鏉ュ埗浣滃浘褰㈢晫闈紝鑷沖皯瑕佷嬌鐢ㄤ互涓嬩笁縐嶆枃浠訛細 <br />.imageset, .Font . Scheme; <br />褰撶劧錛屾垜浠煡閬撳湪涓涓?Scheme 涓槸鍙互鍖呮嫭 imageset 涓?Font 鐨勩?<br />CEGUI::SchemeManager::getSingleton().loadScheme(鈥?./datafiles/schemes/TaharezLook.scheme鈥?; <br />// load in a font.聽 The first font loaded automatically becomes the default font. <br />CEGUI::FontManager::getSingleton().createFont(鈥?./datafiles/fonts/Commonwealth-10.font鈥?; <br />瀵逛簬 ogre 鐨勪嬌鐢ㄨ呮潵璁詫紝搴旇鍦?resources.cfg 灝嗚繖浜涜祫婧愭墍鍦ㄧ殑鐩綍鍔犺繘鍘匯?<br />鎴戜滑鍙敤涓嬮潰鐨勮鍙ユ潵鎸囧畾 cegui 鎵闇瑕佺殑緙虹渷鐨?font 涓?cursor 璧勬簮銆?<br />鍦?cegui 鐨勬蹇甸噷錛屾瘡涓?widget 閮芥槸涓涓?window, 浠庣紪紼嬬殑瑙掑害鏉ヨ錛屾瘡涓?widget 綾婚兘鏄粠鍚屼竴涓浉鍚岀殑 window 鍩虹被緇ф壙鑰屾潵鐨?. 鍥犳錛?widget 涓?window 鏈夌潃鍩烘湰鐩稿悓鐨勮涓恒?<br />紿椾綋鐨勮澶氬睘鎬т笌璁劇疆鍦ㄧ獥鍙e眰鏍戜笂鏄彲浠ラ仐浼犵殑銆傞珮涓綰х獥鍙g殑灞炴т笌琛屼負浼氬獎鍝嶅埌涓嬩竴綰х獥鍙g殑灞炴т笌琛屼負銆備緥濡傞檮鐫鍦ㄦ煇涓?window 涓婄殑 window 涓?widget 浼氳鐖?window 褰卞搷銆傚綋鐖剁獥鍙h destroy 鏃訛紝瀹冩墍闄勫睘鐨勬墍鏈夌殑瀛愮獥鍙d笌 widget 涔熼兘灝嗚 destroy. <br />鍒涘緩 CEGUI 紿楀彛錛屾垜浠彲浠ヤ嬌鐢ㄤ袱縐嶅艦寮忥紝涓鏄?C 錛嬶紜浠g爜錛屼簩鏄紪杈?XML layout 鏂囦歡銆?<br />娉ㄦ剰錛氬湪 CEGUI 涓紝鎵鏈夌殑 window 閮芥槸鐢?WindowManager singleton object 鏉ョ粺涓鍒涘緩鐨勩傛垜浠鍏堝緱鍒拌繖涓璞★細 <br />using namespace CEGUI; <br />WindowManager& wmgr = WindowManager::getSingleton(); <br />涓鑸潵璁詫紝鎴戜滑鎬繪槸鍒涘緩涓涓?DefaultWindow 鏉ュ仛涓烘垜浠皢浣跨敤鐨勭獥鍙g殑 Root, 鍦ㄨ繖縐嶆柟寮忎笅錛屾垜浠細鏈夋瘮杈冨ソ鐨勭伒媧繪с?<br />Window* myRoot = wmgr.createWindow(鈥淒efaultWindow鈥? 鈥渞oot鈥?; <br />System::getSingleton().setGUISheet(myRoot); <br />createwindows() 鍑芥暟鎵浣跨敤鐨勭涓涓弬鏁幫紝鎸囨槑浜嗗皢瑕佸垱寤虹殑紿楀彛綾誨瀷錛屽畠涓鑸槸鍦ㄦ垜浠嬌鐢ㄧ殑 .scheme 鏂囦歡涓墍娉ㄥ唽榪囩殑錛屽綋鐒惰繕鏈変竴浜涚郴緇熷畾涔夌殑錛屾繪槸鏈夋晥鐨勭獥鍙g被鍨嬪涓婇潰鎵鎻愬埌鐨?DefaultWindow.DefualtWindow 鏄笉鍙鐨勶紝瀹冨彧鏄仛涓烘墍鏈夌獥鍙g殑 root 鏉ヤ嬌鐢ㄣ?<br />涓鑸垜浠繪槸瑕佸垱寤轟竴涓?Framewindow, 瀹冨彲浠ュ寘鎷叾浠栫獥鍙d笌 widget 錛屾湰韜篃鏄彲瑙嗙殑銆?<br />FrameWindow* fWnd = (FrameWindow*)wmgr.createWindow(鈥淭aharezLook/FrameWindow鈥? 鈥渢estWindow鈥?; <br />涔嬪悗錛屾垜浠皢鍒涘緩鐨勭獥鍙f寕鍒?root 涓婏紝褰㈡垚涓涓眰嬈″叧緋匯?<br />myRoot->addChildWindow(fWnd); <br />緙栬緫 xml layout 鏂囦歡錛屽彲浣跨敤涓撻棬鎻愪緵鐨勫埗浣滃伐鍏楓傚叿浣撶殑浣跨敤鏂規硶鍙互鍙傞槄鐩稿叧鏂囨。錛岃繖閲岃涓涓嬪浣曚嬌鐢ㄥ埗浣滃ソ鐨?xml layout 鏂囦歡銆?<br />using namespace CEGUI; <br />Window* myRoot = WindowManager::getSingleton().loadWindowLayout(鈥渢est.layout鈥?; <br />System::getSingleton().setGUISheet(myRoot); <br />棣栧厛錛屽皢 layout 鏂囦歡瑁呰澆榪涙潵錛屽啀鎸囧畾鏍圭粨鐐廣?<br />CEGUI 鏈韓渚︽祴鐢ㄦ埛杈撳叆錛岃繖浜涗笉鏄?CEGUI 鐨勮矗浠伙紝鑰屾槸紼嬪簭鐨勫憳鐨勮矗浠匯傚綋鏈夌敤鎴峰閮ㄨ緭鍏ユ椂錛屾垜 <br />浠彲浠ラ夋嫨灝嗚繖浜涙秷鎭憡鐭?CEGUI 錛岃繖鏍?CEGUI 鎵嶄細鍝嶅簲銆?<br />鍦?ceguir::System 綾諱腑瀹氫箟浜嗕竴緇勫嚱鏁幫紝瀹冧綔涓烘垜浠繘琛屾秷鎭紶閫掔殑鎺ュ彛銆?<br />bool injectMouseMove(float delta_x, float delta_y); <br />bool injectMousePosition(float x_pos, float y_pos); <br />bool injectMouseLeaves(void); <br />bool injectMouseButtonDown(MouseButton button); <br />bool injectMouseButtonUp(MouseButton button); <br />bool injectKeyDown(uint key_code); <br />bool injectKeyUp(uint key_code); <br />bool injectChar(utf32 code_point); <br />bool injectMouseWheelChange(float delta); <br />bool injectTimePulse(float timeElapsed); <br />榪欎簺鍑芥暟鐨勮繑鍥炲艱鏄庝簡 CEGUI 鏄惁宸茬粡灝嗕紶鍏ョ殑娑堟伅 consume 鎺変簡銆?<br />CEGUI 浣跨敤鍥炶皟鏈哄埗鏉ヨ繘琛屾秷鎭鐞嗐傚彲浠ヤ負鏌愪釜紿椾綋鐨勭壒瀹氫簨浠舵敞鍐屼竴涓嚱鏁幫紝褰撶獥浣撲簨浠跺彂鐢熸椂錛?CEGUI 浼氳嚜鍔ㄨ皟鐢ㄦ墍娉ㄥ唽鐨勫嚱鏁般?<br />bool TutorialApplication::handlePopMenu(constCEGUI::EventArgs& e) <br />锝?<br />// 銆傘傘傘傘傝繘琛屼簨浠跺搷搴?<br />锝?<br />void setupEventHandlers(void) <br />聽聽聽 { <br />聽聽聽聽聽聽 CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton(); <br />聽聽聽聽聽聽 wmgr .getWindow((CEGUI::utf8*)"MyButton")->subscribeEvent( <br />聽聽聽聽聽聽 CEGUI ::PushButton::EventClicked, CEGUI::Event::Subscriber(&TutorialApplication::handlePopMenu, this)); <br />聽聽 } </p> <p>EventClicked :: 緋葷粺棰勫畾涔夌殑浜嬩歡 . subscribeEvent:: 娉ㄥ唽鍑芥暟錛屽畠浜嬩歡涓庡搷搴斿嚱鏁拌仈鎺ュ湪涓璧楓?<br />鍦?ogre 紼嬪簭涓紝褰撲睛鍚櫒鏀跺埌閿洏錛岄紶鏍囨秷鎭椂錛岄鍏堢粡榪囬傚綋鐨勮漿鎹紙 CEGUI 鍙互璇嗗埆錛夊啀浼犻掔粰 CEGUI 銆備笅闈㈣繖涓嚱鏁版墽琛岄紶鏍囬敭鏍囪瘑杞崲銆?<br />CEGUI::MouseButton convertOgreButtonToCegui(int buttonID) <br />{ <br />聽聽聽聽聽聽 switch (buttonID) <br />聽聽聽聽聽聽 { <br />聽聽聽聽聽聽 case MouseEvent::BUTTON0_MASK: <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 return CEGUI::LeftButton; <br />聽聽聽聽聽聽 case MouseEvent::BUTTON1_MASK: <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 return CEGUI::RightButton; <br />聽聽聽聽聽聽 case MouseEvent::BUTTON2_MASK: <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 return CEGUI::MiddleButton; <br />聽聽聽聽聽聽 case MouseEvent::BUTTON3_MASK: <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 return CEGUI::X1Button; <br />聽聽聽聽聽聽 default: <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 return CEGUI::LeftButton; <br />聽聽聽聽聽聽 } <br />} </p> <p>灝?CEGUI 闇瑕佺煡閬撶殑閿洏錛岄紶鏍囨秷鎭憡鐭ュ畠銆傚嵆鍦?OGRE 澶勭悊榪欎簺娑堟伅鏃墮氱煡 CEGUI 銆備互涓嬭繖鍑芥暟璇存槑浜嗙敤娉曘?<br />聽聽聽聽聽聽 void mouseMoved (MouseEvent *e)// 榧犳爣縐誨姩 <br />聽聽聽聽聽聽 { <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 CEGUI::System::getSingleton().injectMouseMove( <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 e->getRelX() * mGUIRenderer->getWidth(), <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 e->getRelY() * mGUIRenderer->getHeight()); <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 e->consume(); <br />聽聽聽聽聽聽 } </p> <p>聽聽聽聽聽聽 void mousePressed (MouseEvent *e)// 榧犳爣鎸変笅 <br />聽聽聽聽聽聽 { <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 CEGUI::System::getSingleton().injectMouseButtonDown( <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽 convertOgreButtonToCegui(e->getButtonID())); <br />聽聽聽聽聽聽聽聽聽聽聽聽 e->consume(); <br />聽聽聽聽聽聽 } <br />聽聽聽聽聽聽 void mouseReleased (MouseEvent *e)// 榧犳爣寮硅搗 <br />聽聽聽聽聽聽 { <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 CEGUI::System::getSingleton().injectMouseButtonUp( <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 convertOgreButtonToCegui(e->getButtonID())); <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 e->consume(); <br />聽聽聽聽聽聽 } </p> <p>聽聽聽聽聽聽 void keyPressed(KeyEvent* e)// 閿寜涓?<br />聽聽聽聽聽聽 { <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 CEGUI::System::getSingleton().injectKeyDown(e->getKey()); <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 CEGUI::System::getSingleton().injectChar(e->getKeyChar()); <br />聽聽聽聽聽聽聽聽聽聽聽聽聽 e->consume(); <br />聽聽聽聽聽聽 } <br />聽聽聽聽聽聽 void keyReleased(KeyEvent* e)// 閿脊璧?<br />聽聽聽聽聽聽 { <br />聽聽聽聽聽聽聽聽聽聽聽聽 CEGUI::System::getSingleton().injectKeyUp(e->getKey()); <br />聽聽聽聽聽聽聽聽聽聽聽聽 e->consume(); </p> <p>聽聽聽聽聽聽 } <br />鍦?CEGUI 涓嬌鐢ㄤ腑鏂囩殑闂錛毬犅?鐜板湪鎬葷粨浜嗕竴涓嬪湪 CEGUI 涓樉紺轟腑鏂囬渶瑕佹敞鎰忕殑浜嬮」 :<br />聽聽聽 1 銆佸皢 simhei.ttf copy to \ogrenew\Samples\Media\gui<br />聽聽聽 2 銆佸皢 simhei-12.font聽 鎷峰埌涓婄洰褰曞唴瀹逛負 <br /><?xml version="1.0"聽 ?><br /><Font Name="SimHei-12" Filename="simhei.ttf" Type="Dynamic" Size="12" NativeHorzRes="800" NativeVertRes="600"聽 <br />AutoScaled="true"><br /><GlyphSet Glyphs=" 浣犲ソ涓栫晫閫鍑烘紨紺烘覆鏌撳埌鏂版潗璐ㄥ緩緙栬緫紿楀彛 " /> 錛?<---- 鑷繁瑕佺敤鍒扮殑姹夊瓧錛?<br /></Font> <br />娉ㄦ剰澶у皬鍐欙紒錛?GlyphSet Glyphs 鏄湪紼嬪簭涓鐢ㄥ埌鐨勬眽瀛楋紝瀹冩槸璁?cegui 棰勭敓鎴愪竴涓瓧絎﹀浘鍍忛泦鐢ㄧ殑錛堟兂褰撶劧鐨?:-P 錛夊鏋滀慨鏀逛簡榪欎釜鏂囦歡錛屾敞鎰忚鐢?Unicode 錛?UTF-8 錛夌殑緙栫爜鏉ヤ繚瀛橈紝鍦?vc7.1 涓細鏂囦歡 -> 楂樼駭淇濆瓨閫夐」聽聽 鐨劼犅?緙栫爜聽聽 鏍忎腑閫夋嫨銆?<br />聽聽聽 3 銆佸湪 TaharezLook.scheme 涓?<br />聽聽聽聽 <Font Name="Tahoma-12" Filename="tahoma-12.font" /> 鍚庡姞鍏?<br />聽聽聽聽 <Font Name="SimHei-12" Filename="simhei-12.font" />聽 娉ㄦ剰澶у皬鍐?<br />聽聽聽聽 浠ヤ笂鏄竴浜涘噯澶囧伐浣?<br />聽聽聽 4 銆佸湪鑷繁鐨勫簲鐢ㄤ腑璁劇疆榛樿瀛椾綋 <br />聽聽聽 mGUISystem->setDefaultFont((CEGUI::utf8*)"Tahoma-12"); 鏀逛負 <br />聽聽聽 mGUISystem->setDefaultFont((CEGUI::utf8*)"SimHei-12"); <br />聽聽聽 5 銆佸湪鑷繁鐨勫簲鐢ㄧ▼搴忎腑灝卞彲浠ユ妸鐩稿叧鐨?Text 灞炴ц涓轟腑鏂囦簡錛屽錛?<br />聽聽聽 item = new CEGUI::ListboxTextItem((CEGUI::utf8*)" 閫鍑?", 6); <br />聽聽聽 鍚屾牱瑕佹敞鎰忕殑鏄淇濆瓨涓?Unicode 錛?UTF-8 錛夌殑緙栫爜銆傚悓鏃惰繖浜涘瓧瑕佹槸鍦?simhei-12.font 涓畾涔夎繃鐨勫瓧錛屽綋鐒朵篃鍙互璞¢偅涓?CEGUIChieseDemo <br />閭f牱鐢ㄥ姩鎬佺敓鎴愬錛?<br />聽聽聽 gfont->defineFontGlyphs(gfont->getAvailableGlyphs() + (utf8*)" 褰撳墠鏈浣沖潖騫沖潎鐨勬鏋剁巼涓夎 "); <br />聽聽聽 緙栬瘧鑷繁鐨勭▼搴忥紝搴旇灝卞彲浠ョ湅鍒頒腑鏂囦簡錛岀綏鍡︿竴涓嬶紝璁頒綇鍙鏈夋眽瀛楀嚭鐜扮殑鏂囦歡灝變繚瀛樹負 Unicode 錛?UTF-8 錛夌紪鐮佺殑錛侊紒錛?</p> <p>聽</p> <img src ="http://m.shnenglu.com/yuanyajie/aggbug/14485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/yuanyajie/" target="_blank">娓呮簮娓告皯</a> 2006-11-01 15:32 <a href="http://m.shnenglu.com/yuanyajie/archive/2006/11/01/14485.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浜虹墿鍔ㄧ敾涓庣粦瀹氱洅http://m.shnenglu.com/yuanyajie/archive/2006/10/26/14241.html娓呮簮娓告皯娓呮簮娓告皯Thu, 26 Oct 2006 08:30:00 GMThttp://m.shnenglu.com/yuanyajie/archive/2006/10/26/14241.htmlhttp://m.shnenglu.com/yuanyajie/comments/14241.htmlhttp://m.shnenglu.com/yuanyajie/archive/2006/10/26/14241.html#Feedback0http://m.shnenglu.com/yuanyajie/comments/commentRss/14241.htmlhttp://m.shnenglu.com/yuanyajie/services/trackbacks/14241.html鍦╫gre涓?褰搈esh琚姩鐢葷殑鏃跺?瀹冪殑BoundingBox(AABB)鏄笉鏇存柊鐨?鐢辨涓嶈兘鐢ㄥ畠濂規潵鍋氫負紕版挒媯嫻嬬殑浠g悊.榪欎釜闂楹葷儲浜嗗ソ鍑犲ぉ.鏈鍚庢槸鍦ㄨ鍧涗笂鎵懼埌浜嗙瓟妗?涓嶈兘鏇存柊鐨勫師鍥犳湁浜屻備竴鏄唬浠峰お楂樸備簩鏄湁鍙?br />鑳界‖浠跺仛skinng錛堣挋鐨級錛屼笉鑳界敤杞歡鐨勬柟娉曡闂‖浠剁殑鏁版嵁銆?/p>

]]>
OGRE瀛︿範璁頒簨鏈?/title><link>http://m.shnenglu.com/yuanyajie/archive/2006/10/24/14087.html</link><dc:creator>娓呮簮娓告皯</dc:creator><author>娓呮簮娓告皯</author><pubDate>Tue, 24 Oct 2006 06:13:00 GMT</pubDate><guid>http://m.shnenglu.com/yuanyajie/archive/2006/10/24/14087.html</guid><wfw:comment>http://m.shnenglu.com/yuanyajie/comments/14087.html</wfw:comment><comments>http://m.shnenglu.com/yuanyajie/archive/2006/10/24/14087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/yuanyajie/comments/commentRss/14087.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/yuanyajie/services/trackbacks/14087.html</trackback:ping><description><![CDATA[濡傛灉涓涓漢鐗╂湁鍑犱釜鍔ㄧ敾鐘舵?鑰屽湪紼嬪簭涓渶瑕佸鍔ㄧ敾鐘舵佷綔鍒囨崲鏃?涓瀹氳灝嗗厛鍓嶇殑閭d釜鐘舵佸叧鐪?鐒跺悗鍐嶄綔鍒囨崲.<br />聽聽聽 //鍋囪鍏堝墠鐨勫姩鐢葷姸鎬佹槸Wait,鍦ㄥ垏鎹㈠埌鏂扮殑鍔ㄧ敾鐘舵佹椂,搴旇鍏堝皢Wait鍏蟲帀.灝辨槸絎竴鍙ヨ瘽:浠ヤ笅涓哄彲鑳界殑浠g爜鐗囨柇.<br />聽聽聽 <u>mAnimationState->setEnabled(false);<br /></u>聽聽聽 mAnimationState = mEntity->getAnimationState( "Walk" );<br />聽聽聽 mAnimationState->setLoop( true );<br />聽聽聽 mAnimationState->setEnabled( true);<br />聽聽 //2006.10.24<img src ="http://m.shnenglu.com/yuanyajie/aggbug/14087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/yuanyajie/" target="_blank">娓呮簮娓告皯</a> 2006-10-24 14:13 <a href="http://m.shnenglu.com/yuanyajie/archive/2006/10/24/14087.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://ddh345.com" target="_blank">久久中文久久字幕</a>| <a href="http://taikonghua.com" target="_blank">久久久久99精品国产片</a>| <a href="http://youjizzbox.com" target="_blank">国产精品嫩草影院av蜜臀</a>| <a href="http://www-132377.com" target="_blank">欧美国产日韩一区二区三区</a>| <a href="http://airsixth.com" target="_blank">久久久久久亚洲精品中文字幕 </a>| <a href="http://tp112.com" target="_blank">亚洲日本中文字幕</a>| <a href="http://jjy891.com" target="_blank">久久久噜噜噜久久人人看</a>| <a href="http://855821.com" target="_blank">老色鬼久久亚洲一区二区</a>| <a href="http://mom8888.com" target="_blank">蜜臀久久99精品久久久画质超高清</a>| <a href="http://yjdm139.com" target="_blank">美女久久一区</a>| <a href="http://hwlxwp.com" target="_blank">日韩午夜一区</a>| <a href="http://eee2244.com" target="_blank">亚洲一区二区影院</a>| <a href="http://22abb.com" target="_blank">久久久久国产精品麻豆ai换脸</a>| <a href="http://sikixixw12.com" target="_blank">久久综合久久综合这里只有精品</a>| <a href="http://fjccjq.com" target="_blank">牛牛国产精品</a>| <a href="http://www-787788.com" target="_blank">欧美亚洲不卡</a>| <a href="http://bmcshy.com" target="_blank">亚洲二区视频在线</a>| <a href="http://3374com.com" target="_blank">亚洲欧美日韩第一区</a>| <a href="http://rljyy.com" target="_blank">玖玖玖免费嫩草在线影院一区</a>| <a href="http://www-4012345.com" target="_blank">亚洲国产精品专区久久</a>| <a href="http://ktt2048.com" target="_blank">亚洲尤物精选</a>| <a href="http://621762.com" target="_blank">欧美激情一二区</a>| <a href="http://bjygp.com" target="_blank">国产偷自视频区视频一区二区</a>| <a href="http://o3xo.com" target="_blank">亚洲九九九在线观看</a>| <a href="http://1000kongbao.com" target="_blank">久久福利影视</a>| <a href="http://ju5556.com" target="_blank">一区二区三区国产精品</a>| <a href="http://345fz.com" target="_blank">美女久久一区</a>| <a href="http://popowq.com" target="_blank">国产亚洲二区</a>| <a href="http://jsgf444.com" target="_blank">中文一区二区</a>| <a href="http://域名" target="_blank">亚洲激情小视频</a>| <a href="http://www47343.com" target="_blank">久久爱91午夜羞羞</a>| <a href="http://huayoue.com" target="_blank">欧美特黄一级</a>| <a href="http://wwwmm131.com" target="_blank">日韩午夜av在线</a>| <a href="http://lysyfls.com" target="_blank">久热国产精品视频</a>| <a href="http://balqueen.com" target="_blank">亚洲欧美日韩一区二区三区在线</a>| <a href="http://yw1396.com" target="_blank">欧美成人情趣视频</a>| <a href="http://www-88899.com" target="_blank">国产专区一区</a>| <a href="http://44368com.com" target="_blank">欧美一区二区三区四区夜夜大片 </a>| <a href="http://jxchunlong.com" target="_blank">欧美激情欧美激情在线五月</a>| <a href="http://yckjwb.com" target="_blank">亚洲一区免费视频</a>| <a href="http://eeii33.com" target="_blank">欧美精品久久久久久久</a>| <a href="http://4hup23.com" target="_blank">亚洲综合久久久久</a>| <a href="http://nagebbs.com" target="_blank">久久综合网络一区二区</a>| <a href="http://mfgun.com" target="_blank">亚洲综合色激情五月</a>| <a href="http://xiphosoft.com" target="_blank">午夜欧美视频</a>| <a href="http://erodasy.com" target="_blank">欧美激情一区</a>| <a href="http://bjzgmember.com" target="_blank">欧美一区二区免费视频</a>| <a href="http://kongtou8.com" target="_blank">欧美日韩第一页</a>| <a href="http://quanfadq.com" target="_blank">极品av少妇一区二区</a>| <a href="http://dadepaimai.com" target="_blank">亚洲午夜三级在线</a>| <a href="http://http456446.com" target="_blank">欧美寡妇偷汉性猛交</a>| <a href="http://02326a.com" target="_blank">欧美一区二区三区在线视频 </a>| <a href="http://xuanxuan88.com" target="_blank">国产精品电影观看</a>| <a href="http://4466o.com" target="_blank">亚洲精品你懂的</a>| <a href="http://timonna.com" target="_blank">欧美成人a∨高清免费观看</a>| <a href="http://ddnwater.com" target="_blank">性欧美暴力猛交另类hd</a>| <a href="http://2343ww.com" target="_blank">国产精品亚洲成人</a>| <a href="http://4379d.com" target="_blank">亚洲欧美综合一区</a>| <a href="http://xingmaipet.com" target="_blank">亚洲少妇一区</a>| <a href="http://880895.com" target="_blank">国产精品豆花视频</a>| <a href="http://17cao8.com" target="_blank">亚洲伊人伊色伊影伊综合网</a>| <a href="http://954k.com" target="_blank">亚洲精选在线观看</a>| <a href="http://660507jj.com" target="_blank">欧美日韩福利在线观看</a>| <a href="http://91see8.com" target="_blank">99亚洲一区二区</a>| <a href="http://buyiker.com" target="_blank">亚洲靠逼com</a>| <a href="http://miandoctor.com" target="_blank">欧美精品18+</a>| <a href="http://y65y.com" target="_blank">亚洲一区二区三区精品在线观看</a>| <a href="http://1390744.com" target="_blank">亚洲美女精品成人在线视频</a>| <a href="http://zyjdxx.com" target="_blank">欧美肉体xxxx裸体137大胆</a>| <a href="http://7373se.com" target="_blank">中文有码久久</a>| <a href="http://mengmujia.com" target="_blank">亚洲综合色丁香婷婷六月图片</a>| <a href="http://www-45553.com" target="_blank">国产精品成人观看视频免费</a>| <a href="http://1313js.com" target="_blank">亚洲欧美美女</a>| <a href="http://uuuu79.com" target="_blank">久久国产精品网站</a>| <a href="http://bjmrkj.com" target="_blank">在线国产亚洲欧美</a>| <a href="http://zhengnuoxin.com" target="_blank">欧美激情五月</a>| <a href="http://xiaocao-av.com" target="_blank">欧美日韩视频在线观看一区二区三区</a>| <a href="http://668756.com" target="_blank">一本色道久久综合一区</a>| <a href="http://jybiotek.com" target="_blank">一区二区成人精品</a>| <a href="http://www-067.com" target="_blank">国产欧美日韩综合</a>| <a href="http://ccnn33.com" target="_blank">美女精品网站</a>| <a href="http://9924338.com" target="_blank">欧美日韩一区二区三区在线观看免</a>| <a href="http://www-438686.com" target="_blank">亚洲一区二区动漫</a>| <a href="http://www-876810.com" target="_blank">欧美一区二区视频网站</a>| <a href="http://92y5.com" target="_blank">亚洲精品少妇30p</a>| <a href="http://avtb2120.com" target="_blank">在线亚洲国产精品网站</a>| <a href="http://4545www.com" target="_blank">国产三级欧美三级日产三级99</a>| <a href="http://bmcshy.com" target="_blank">裸体一区二区</a>| <a href="http://56667r.com" target="_blank">欧美日韩免费</a>| <a href="http://maoshimh.com" target="_blank">久久日韩粉嫩一区二区三区</a>| <a href="http://jiuzuifusheng.com" target="_blank">久久久久免费视频</a>| <a href="http://7811c.com" target="_blank">亚洲图片在线</a>| <a href="http://686852a.com" target="_blank">亚洲视频第一页</a>| <a href="http://329374.com" target="_blank">国产色视频一区</a>| <a href="http://562595.com" target="_blank">你懂的视频欧美</a>| <a href="http://caerusmdx.com" target="_blank">欧美日本三区</a>| <a href="http://www333444123.com" target="_blank">久久gogo国模裸体人体</a>| <a href="http://345fz.com" target="_blank">久久先锋资源</a>| <a href="http://yiqiluntan.com" target="_blank">亚洲综合视频一区</a>| <a href="http://5254f.com" target="_blank">久久综合网hezyo</a>| <a href="http://www72227.com" target="_blank">亚洲视频在线观看网站</a>| <a href="http://yys4.com" target="_blank">久久久久国色av免费看影院</a>| <a href="http://9511331.com" target="_blank">一区二区三区精品</a>| <a href="http://www17bxbx.com" target="_blank">久久久亚洲一区</a>| <a href="http://www-82622.com" target="_blank">亚洲欧美国产日韩天堂区</a>| <a href="http://zhouqie.com" target="_blank">蜜臀av性久久久久蜜臀aⅴ四虎</a>| <a href="http://418ch.com" target="_blank">亚洲欧美日本视频在线观看</a>| <a href="http://zhhtianyi.com" target="_blank">欧美91大片</a>| <a href="http://www-444454.com" target="_blank">欧美一区二区视频在线观看</a>| <a href="http://118936.com" target="_blank">欧美wwwwww</a>| <a href="http://youjizzbox.com" target="_blank">久久精品欧洲</a>| <a href="http://216667.com" target="_blank">国产精品啊啊啊</a>| <a href="http://70909g.com" target="_blank">亚洲国产欧美一区二区三区丁香婷</a>| <a href="http://by56677.com" target="_blank">国产精品久久久</a>| <a href="http://456985.com" target="_blank">亚洲欧洲免费视频</a>| <a href="http://dkmcjc.com" target="_blank">亚洲电影免费观看高清完整版在线</a>| <a href="http://wg135.com" target="_blank">亚洲尤物精选</a>| <a href="http://1000kongbao.com" target="_blank">亚洲一区二区三区在线</a>| <a href="http://shyihegu.com" target="_blank">欧美国产日本</a>| <a href="http://gs-qintai.com" target="_blank">欧美黄色小视频</a>| <a href="http://9882355.com" target="_blank">在线观看精品</a>| <a href="http://3451215.com" target="_blank">久久精品天堂</a>| <a href="http://lingshidu.com" target="_blank">久久久精品免费视频</a>| <a href="http://ylsnuha.com" target="_blank">国产精品无码永久免费888</a>| <a href="http://mishangmi.com" target="_blank">亚洲国产美女</a>| <a href="http://haohetour.com" target="_blank">亚洲二区三区四区</a>| <a href="http://555134.com" target="_blank">久久亚洲综合色</a>| <a href="http://0370city.com" target="_blank">久久免费高清</a>| <a href="http://66jj99.com" target="_blank">国产一区二区三区在线观看免费</a>| <a href="http://56701sy.com" target="_blank">一区二区成人精品</a>| <a href="http://48655aa.com" target="_blank">亚洲一区二区精品在线</a>| <a href="http://tyaisen.com" target="_blank">欧美欧美全黄</a>| <a href="http://5cok.com" target="_blank">日韩亚洲欧美成人一区</a>| <a href="http://91keshi.com" target="_blank">一本色道久久88综合亚洲精品ⅰ </a>| <a href="http://jilcool.com" target="_blank">亚洲精品乱码久久久久久久久 </a>| <a href="http://www-577511.com" target="_blank">亚洲大片在线</a>| <a href="http://32666066.com" target="_blank">久久久久久久精</a>| <a href="http://xxxyyy168.com" target="_blank">久久亚洲春色中文字幕</a>| <a href="http://yw1998.com" target="_blank">国产视频综合在线</a>| <a href="http://nxhjzddata.com" target="_blank">欧美在线观看视频</a>| <a href="http://y08877.com" target="_blank">久久久人成影片一区二区三区</a>| <a href="http://118626cc.com" target="_blank">国产欧美精品日韩精品</a>| <a href="http://301110.com" target="_blank">亚洲欧美日韩成人</a>| <a href="http://xianconnector.com" target="_blank">欧美在线视频二区</a>| <a href="http://yssnlp.com" target="_blank">国产在线观看一区</a>| <a href="http://by99969.com" target="_blank">久久久久久久欧美精品</a>| <a href="http://by3787.com" target="_blank">欧美 日韩 国产 一区</a>| <a href="http://72nnnn.com" target="_blank">亚洲高清在线精品</a>| <a href="http://www4466k.com" target="_blank">欧美电影打屁股sp</a>| <a href="http://czhqwy.com" target="_blank">亚洲伦理在线观看</a>| <a href="http://977mo.com" target="_blank">午夜性色一区二区三区免费视频 </a>| <a href="http://6623555.com" target="_blank">国产资源精品在线观看</a>| <a href="http://www-136hk.com" target="_blank">久久久7777</a>| <a href="http://cpb-group.com" target="_blank">亚洲缚视频在线观看</a>| <a href="http://nztd20.com" target="_blank">国模 一区 二区 三区</a>| <a href="http://8842aa.com" target="_blank">欧美黑人在线观看</a>| <a href="http://dh03.com" target="_blank">亚洲欧洲日韩综合二区</a>| <a href="http://exsecular.com" target="_blank">麻豆久久婷婷</a>| <a href="http://www-067.com" target="_blank">亚洲三级视频</a>| <a href="http://233116.com" target="_blank">午夜影视日本亚洲欧洲精品</a>| <a href="http://3b6f.com" target="_blank">国产日韩欧美在线视频观看</a>| <a href="http://by4672.com" target="_blank">久久精品成人</a>| <a href="http://402626com.com" target="_blank">欧美激情1区2区3区</a>| <a href="http://bjmrkj.com" target="_blank">中文久久精品</a>| <a href="http://www4466k.com" target="_blank">韩国精品久久久999</a>| <a href="http://668www.com" target="_blank">欧美国产成人在线</a>| <a href="http://xhtd688.com" target="_blank">99精品欧美一区二区三区综合在线</a>| <a href="http://www353488.com" target="_blank">亚洲欧美国产制服动漫</a>| <a href="http://8331651.com" target="_blank">国产偷自视频区视频一区二区</a>| <a href="http://www-733999.com" target="_blank">久久亚洲午夜电影</a>| <a href="http://www-787788.com" target="_blank">一区二区三区视频在线</a>| <a href="http://850cn.com" target="_blank">久久婷婷综合激情</a>| <a href="http://3bmmxyz.com" target="_blank">一本色道久久综合</a>| <a href="http://909059c.com" target="_blank">国产亚洲高清视频</a>| <a href="http://www381818.com" target="_blank">欧美日韩高清在线观看</a>| <a href="http://621939.com" target="_blank">欧美亚洲免费电影</a>| <a href="http://www-493049.com" target="_blank">91久久视频</a>| <a href="http://xiehaihua.com" target="_blank">久久精品中文字幕一区二区三区</a>| <a href="http://as777as.com" target="_blank">亚洲国产专区校园欧美</a>| <a href="http://www-4157.com" target="_blank">国产精品乱看</a>| <a href="http://119552.com" target="_blank">欧美国产欧美亚洲国产日韩mv天天看完整 </a>| <a href="http://57sa.com" target="_blank">国产精品一区=区</a>| <a href="http://3333347.com" target="_blank">久久永久免费</a>| <a href="http://335848.com" target="_blank">亚洲自啪免费</a>| <a href="http://wwwgay456.com" target="_blank">亚洲高清在线视频</a>| <a href="http://zooxoft.com" target="_blank">久久er99精品</a>| <a href="http://scqike.com" target="_blank">亚洲欧美综合一区</a>| <a href="http://961318.com" target="_blank">日韩一级不卡</a>| <a href="http://www40255.com" target="_blank">亚洲电影一级黄</a>| <a href="http://bizssr.com" target="_blank">国产一区二区高清</a>| <a href="http://687989.com" target="_blank">欧美日韩中文另类</a>| <a href="http://yw133777.com" target="_blank">美女网站久久</a>| <a href="http://yishangsh.com" target="_blank">欧美在线视频一区二区三区</a>| <a href="http://zzchanke.com" target="_blank">aa国产精品</a>| <a href="http://cn1357.com" target="_blank">亚洲人成网站精品片在线观看</a>| <a href="http://cecelife.com" target="_blank">久色婷婷小香蕉久久</a>| <a href="http://taoh228.com" target="_blank">久久精品日产第一区二区</a>| <a href="http://2589999.com" target="_blank">亚洲尤物在线</a>| <a href="http://xfrlyy.com" target="_blank">亚洲一级片在线观看</a>| <a href="http://by4433.com" target="_blank">一区二区欧美精品</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>