锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 杞細(xì)http://www.shnenglu.com/lovedday/archive/2008/07/01/22890.html 鍚戦噺鐨勭偣縐細(xì) 涓婇潰鐨刢osα鍙畝鍐欐垚錛?nbsp;cosα = u . v / (|u||v|) OGRE婧愮爜鎴愬姛緙栬瘧璁?/span>081227 Made by welflau 1 涓嬭澆鏈鏂扮殑OGRE婧愮爜鍖?/span> 2 鐩存帴瑙e帇鍒?/span>D鐩樻牴鐩綍涓?br> 3 鎵撳紑sln 鎴戣鏄殑VS2005 鎵撳紑鍚?/span> 4 緙栬瘧鐢熸垚OgreMain 5 浼?xì)鍑洪敊锛寴q樻病涓?/span>Dependencies 鍥犱負(fù)閾炬帴鍣ㄤ腑鏄劇ず浜嗘湁闄勫姞搴?/strong> 6 涓嬭澆ogre-dependencies 娉ㄦ剰瑕佷笅杞芥渶鏂扮増 涓嬭澆鍦板潃錛?/strong> http://sourceforge.net/project/showfiles.php?group_id=2997 涓嬩竴涓〉闈㈤夋嫨 7 瑙e帇鍒?/span>D:\ogre-l.6.0\ogre 瑙e帇瀹屽悗錛屽啀閲嶆柊緙栬瘧鐢熸垚 OgreMain緙栬瘧寰楄涓孌墊椂闂?/span> 鑰屼笖緙栬瘧鍚?/span>Obj鏂囦歡鏈?/span> 銆愭敞鎰忋戣繕鏈変竴涓?/span>Samples鏂囦歡澶逛篃瑕佽鐩栧埌Ogre鐩綍涓?/span> 閲岄潰鏄墽琛屾椂鎵闇鐨?/span>dll鏂囦歡 緇堜簬緙栬瘧瀹屽悗錛屼笉榪囪繕鏄湁閿欙紝灝戞枃浠?/span> 鎴戝幓 Dependencies\include\zzip 鐩綍涓嬬湅鐨勭‘娌¤繖涓枃浠?/span> 鎴戝張涓嬩簡Dependencies鍏朵粬鐗堟湰OgreDependencies_VC8SP1_Eihort_20070323 鍙戠幇鏈夎鏂囦歡 涓嬭澆綰㈡鎵紺洪偅涓寘錛?/span>OgreDependencies_VC8SP1_Eihort_20071227.zip 瑙e帇鍒?/span>OGRE鐩綍D:\ogre-l.6.0\ogre涓嬪埌閲嶆柊瑕嗙洊涓閬?/span> 鍐嶇紪璇戠敓鎴?/span> 緇堜簬鎴愬姛鐢熸垚 鐢熸垚鐨?/span>lib鍜?/span>dll濡備笅鍥?/span> 鍏朵腑OgreMain鐢熸垚鐨勭洰鏍囨枃浠舵湁 銆愭父鎴忓紑鍙戙戙愬師鍒涙暀紼嬭繛杞姐慦elfGame銆愮7璁層?08120803鎸夐挳棰滆壊鍙帶) 銆愭父鎴忓紑鍙戙戙愬師鍒涙暀紼嬭繛杞姐慦elfGame銆愮6璁層?08120702鍔犲叆鐨偆瀵硅瘽妗? 銆愭父鎴忓紑鍙戙戙愬師鍒涙暀紼嬭繛杞姐慦elfGame銆愮5璁層?WelfGame(08120302涓夌淮鎿嶄綔) 銆愭父鎴忓紑鍙戙戙愬師鍒涙暀紼嬭繛杞姐慦elfGame銆愮4璁層?08120301瀵煎叆涓夌淮鏁版嵁鏂囦歡 .x錛?/font> 銆愭父鎴忓紑鍙戙慦elfGame銆愮3璁層?08120203鍥懼儚閫忔槑鍙?qiáng)棰滆?
鍋囪鍚戦噺u(ux, uy)鍜?strong>v(vx, vy)錛?strong>u鍜?strong>v涔嬮棿鐨勫す瑙掍負(fù)α錛屼粠涓夎褰㈢殑杈硅鍏崇郴絳夊紡鍑哄彂錛屽彲浣滃嚭濡備笅綆鍗曟帹瀵鹼細(xì)
|u - v||u - v| = |u||u| + |v||v| - 2|u||v|cosα
===>
錛?strong>ux - vx錛?sup>2 + (uy - vy)2 = ux2 + uy2 +vx2+vy2- 2|u||v|cosα
===>
-2uxvx - 2uyvy = -2|u||v|cosα
===>
cosα = (uxvx + uyvy) / (|u||v|)
榪欐牱錛屽氨鍙互鏍規(guī)嵁鍚戦噺u鍜?strong>v鐨勫潗鏍囧艱綆楀嚭瀹冧滑涔嬮棿鐨勫す瑙掋?br>
瀹氫箟u鍜?strong>v鐨勭偣縐繍綆楋細(xì) u . v = (uxvx + uyvy)錛?/p>
褰?strong>u . v = 0鏃訛紙鍗?strong>uxvx + uyvy = 0錛夛紝鍚戦噺u鍜?strong>v鍨傜洿錛涘綋u . v > 0鏃訛紝u鍜?strong>v涔嬮棿鐨勫す瑙掍負(fù)閿愯錛涘綋u . v < 0鏃訛紝u鍜?strong>v涔嬮棿鐨勫す瑙掍負(fù)閽濊銆?br>
鍙互灝嗚繍綆椾粠2緇存帹騫垮埌3緇淬?/p>
鍚戦噺鐨勫弶縐細(xì)
鍋囪瀛樺湪鍚戦噺u(ux, uy, uz), v(vx, vy, vz), 姹傚悓鏃跺瀭鐩翠簬鍚戦噺u, v鐨勫悜閲?strong>w(wx, wy, wz).
鍥犱負(fù)w涓?strong>u鍨傜洿錛屽悓鏃?strong>w涓?strong>v鍨傜洿錛屾墍浠?strong>w . u = 0, w . v = 0; 鍗?br>
uxwx + uywy + uzwz = 0;
vxwx + vywy + vzwz = 0;
鍒嗗埆鍓婂幓鏂圭▼緇勭殑wy鍜?strong>wx鍙橀噺鐨勭郴鏁幫紝寰楀埌濡備笅涓や釜絳変環(huán)鏂圭▼寮忥細(xì)
(uxvy - uyvx)wx = (uyvz - uzvy)wz
(uxvy - uyvx)wy = (uzvx - uxvz)wz
浜庢槸鍚戦噺w鐨勪竴鑸В褰㈠紡涓猴細(xì)
w = (wx, wy, wz) = ((uyvz - uzvy)wz / (uxvy - uyvx), (uzvx - uxvz)wz / (uxvy - uyvx), wz)
= (wz / (uxvy - uyvx) * (uyvz - uzvy, uzvx - uxvz, uxvy - uyvx))
鍥犱負(fù)錛?br>
ux(uyvz - uzvy) + uy(uzvx - uxvz) + uz(uxvy - uyvx)
= uxuyvz - uxuzvy + uyuzvx - uyuxvz + uzuxvy - uzuyvx
= (uxuyvz - uyuxvz) + (uyuzvx - uzuyvx) + (uzuxvy - uxuzvy)
= 0 + 0 + 0 = 0
vx(uyvz - uzvy) + vy(uzvx - uxvz) + vz(uxvy - uyvx)
= vxuyvz - vxuzvy + vyuzvx - vyuxvz + vzuxvy - vzuyvx
= (vxuyvz - vzuyvx) + (vyuzvx - vxuzvy) + (vzuxvy - vyuxvz)
= 0 + 0 + 0 = 0
鐢辨鍙煡錛屽悜閲?uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)鏄悓鏃跺瀭鐩翠簬鍚戦噺u鍜?strong>v鐨勩?br>
涓烘錛屽畾涔夊悜閲?strong>u = (ux, uy, uz)鍜屽悜閲?v = (vx, vy, vz)鐨勫弶縐繍綆椾負(fù)錛?strong>u x v = (uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)
涓婇潰璁$畻鐨勭粨鏋滃彲綆鍗曟鎷負(fù)錛氬悜閲?strong>u x v鍨傜洿浜庡悜閲?strong>u鍜?strong>v銆?/p>
鏍規(guī)嵁鍙夌Н鐨勫畾涔夛紝娌縳鍧愭爣杞寸殑鍚戦噺i = (1, 0, 0)鍜屾部y鍧愭爣杞寸殑鍚戦噺j = (0, 1, 0)鐨勫弶縐負(fù)錛?br>
i x j = (1, 0, 0) x (0, 1, 0) = (0 * 0 - 0 * 1, 0 * 0 - 1 * 0, 1 * 1 - 0 * 0) = (0, 0, 1) = k
鍚岀悊鍙綆?strong>j x k:
j x k = (0, 1, 0) x (0, 0, 1) = (1 * 1 - 0 * 0, 0 * 0 - 0 * 1, 0 * 0 - 0 * 0) = (1, 0, 0) = i
浠ュ強(qiáng)k x i:
k x i = (0, 0, 1) x (1, 0, 0) = (0 * 0 - 1 * 0, 1 * 1 - 0 * 0, 0 * 0 - 0 * 0) = (0, 1, 0) = j
鐢卞弶縐殑瀹氫箟錛屽彲鐭ワ細(xì)
v x u = (vyuz - vzuy, vzux - vxuz, vxuy - vyux) = - (u x v)
]]>銆愬師鍒涖戙怬GRE浜洪棬鏁欑▼銆慜GRE婧愮爜鎴愬姛緙栬瘧璁?81227
Posted on 2008-12-28 17:54 鍒樻枃宄?/a> 闃呰(1814) 璇勮(7) 緙栬緫 鏀惰棌 寮曠敤
鍘熷笘錛?a href="http://www.shnenglu.com/welflau/archive/2009/02/24/70570.html">http://www.shnenglu.com/welflau/archive/2009/02/24/70570.html
8 鍙兘鏄増鏈笉瀵瑰啀鍒?/span>OGRE瀹樻柟緗戠珯
http://www.ogre3d.org/index.php?option=com_content&task=view&id=412&Itemid=132
]]>
浣跨敤 cegui 鏉ュ埗浣滅晫闈?, 涓嶈鍦ㄤ綍縐嶅鉤鍙頒笅 , 鏈夊熀鏈殑涓夊ぇ姝ラ瑕佸仛 :
1, 鍒涘緩涓涓?CEGUI::Render 瀹炰緥
2, 鍒涘緩 CEGUI::System 瀵硅薄
3, 璋冪敤鍚勭鏂規(guī)硶鏉ユ覆鏌撶敤鎴風(fēng)晫闈?
絎竴姝?, 鍦ㄦ垜浣跨敤鐨?ogre 鐜涓嬩嬌鐢ㄤ互涓嬩唬鐮佹潵鍒涘緩 CEGUI::Render 瀹炰緥
Ogre3D
CEGUI::OgreCEGUIRenderer* myRenderer =
new CEGUI::OgreCEGUIRenderer(myRenderWindow);
絎簩姝ョ浉褰撶畝鍗?, 鍙嬌鐢?
new CEGUI::System(myRenderer);
絎笁姝ワ紝鍩烘湰涓婃潵璁詫紝澶ч儴鍒嗗鉤鍙頒笅錛屽 direct3D, OpenGL, 鎴戜滑鍦ㄦ覆鏌撳驚鐜殑灝鵑儴璋冪敤
CEGUI::System::renderGUI 鏉ュ紑濮嬬晫闈㈢殑娓叉煋銆傚鏋滄垜浠嬌鐢?ogre3d 寮曟搸錛岃繖涓姝ヤ笉闇瑕?
鎴戜滑鏄劇ず鐨勬墽琛屻傚洜涓?ogre 寮曟搸宸茬粡鑰冭檻浜嗐?
闄や簡榪欎笁澶ф涔嬪錛屾垜浠繕鏈変竴浜涘伐浣滆鍋氾紝棣栧厛錛屾垜浠渶瑕佸姞杞芥暟鎹枃浠訛紝騫朵笖瀹屾垚鍒濆鍖栧伐浣溿?
CEGUI 浣跨敤浜嗚澶氱被鍨嬬殑鏂囦歡銆?CEGUI 浣跨敤涓涓О涓?ResourceProvider 鐨勫府鍔╁璞★紝鐢ㄥ畠鏉ュ仛涓烘牳蹇?CEGUI 搴撲笌澶栭儴鏂囦歡鍔犺澆緋葷粺鐨勬帴鍙c傞氳繃瀹炵幇涓涓壒瀹氱殑 ResourceProvider 瀵硅薄錛?cegui 鐨勬覆鏌撴ā鍧楀氨鍙互涓庡閮ㄧ郴緇熺殑璧勬簮綆$悊鍣ㄣ佹枃浠跺姞杞藉瓙緋葷粺鏃犵紳鍦伴泦鎴愩?CEGUI 闇瑕佺殑鏁版嵁鏂囦歡渚垮彲浠ラ氳繃澶栭儴緋葷粺鎻愪緵鐨勫姛鑳芥潵榪涜鍔犺澆銆?CEGUI 涓殑澶ч儴鍒嗘枃浠舵槸浠?XML 鐨勬枃浠舵牸寮忔潵淇濆瓨鐨勩傜己鐪佹儏鍐典笅錛?CEGUI 鍦ㄥ唴閮ㄤ嬌鐢?Xerces-C++ 搴撴潵鍒嗘瀽 XML 鏂囦歡錛屼嬌鐢?schema 鏉ュ xml 榪涜鏍¢獙錛?schema 鏂囦歡浠ユ爣鍑嗙殑 .xsd 鎵╁睍鍚嶆潵淇濆瓨 . 璁稿鏂囦歡鏈川涓婇兘鏄?XML 鏍煎紡鐨勬枃浠訛紝浣嗘槸鏍規(guī)嵁鍏舵剰涔変笉鍚岋紝鍒嗗埆浣跨敤浜嗕笉鍚岀殑鏂囦歡鎵╁睍鍚嶃?
.Imageset 鏂囦歡鍙皢涓騫呭浘鍍忕湅鍋氳嫢騫插皬鍥懼儚鐨勯泦鍚堛傛崲鍚嶈瘽璇達(dá)紝灝辨槸灝嗕竴騫呭浘鍍忕殑鏌愪釜鍖哄煙鐪嬪仛涓騫呯嫭绔嬬殑鍥劇墖鏉ヤ嬌鐢ㄣ?
.Font 瀹氫箟浜嗗湪 CEGUI 涓墍浣跨敤鐨勫瓧浣撶被鍨嬨?
.scheme 銆鍙互灝嗚澶氭暟鎹粍鍚堝湪涓璧蜂嬌鐢紝瀹冧篃鏄杞戒笌娉ㄥ唽 widget 鏈鏂逛究鐨勬柟娉曘傚湪涓涓?.scheme 鏂囦歡涓彲浠ュ寘鎷笅鍒楀嚑縐嶆暟鎹細(xì)
Imagest,font, window Set, window Alias
window set 鎸囧畾浜嗚杞芥ā鍧楋紙 .dll 絳夛級鐨勫悕縐幫紝鍜屼竴緇勫彲浠ユ敞鍐屽埌緋葷粺涓殑 widget.
window alias 鎻愪緵浜嗗埆鍚嶇殑鍔熻兘錛屽疄鐜板凡緇忔敞鍐岀殑 window/widget 鐨勫艦寮忎笂鐨勯殣钘忋?
.Layout 銆鍖呭惈浜嗙獥鍙e竷灞鐨?xml 琛ㄧず銆傛瘡涓祵濂楃殑 'window' 鍏冪礌瀹氫箟浜嗚鍒涘緩鐨?window 鎴栨槸 widget."Property" 鍏冪礌瀹氫箟浜嗙獥鍙g殑璁劇疆涓庡睘鎬у箋?
.config 鏄彲渚涢夋嫨鐨勯厤緗枃浠訛紝浠栧彲鎸囧畾涓浜涚己鐪佺殑灞炴с?
鎴戜滑浣跨敤 CEGUI 鏉ュ埗浣滃浘褰㈢晫闈紝鑷沖皯瑕佷嬌鐢ㄤ互涓嬩笁縐嶆枃浠訛細(xì)
.imageset, .Font . Scheme;
褰撶劧錛屾垜浠煡閬撳湪涓涓?Scheme 涓槸鍙互鍖呮嫭 imageset 涓?Font 鐨勩?
CEGUI::SchemeManager::getSingleton().loadScheme(“../datafiles/schemes/TaharezLook.scheme”);
// load in a font. The first font loaded automatically becomes the default font.
CEGUI::FontManager::getSingleton().createFont(“../datafiles/fonts/Commonwealth-10.font”);
瀵逛簬 ogre 鐨勪嬌鐢ㄨ呮潵璁詫紝搴旇鍦?resources.cfg 灝嗚繖浜涜祫婧愭墍鍦ㄧ殑鐩綍鍔犺繘鍘匯?
鎴戜滑鍙敤涓嬮潰鐨勮鍙ユ潵鎸囧畾 cegui 鎵闇瑕佺殑緙虹渷鐨?font 涓?cursor 璧勬簮銆?
鍦?cegui 鐨勬蹇甸噷錛屾瘡涓?widget 閮芥槸涓涓?window, 浠庣紪紼嬬殑瑙掑害鏉ヨ錛屾瘡涓?widget 綾婚兘鏄粠鍚屼竴涓浉鍚岀殑 window 鍩虹被緇ф壙鑰屾潵鐨?. 鍥犳錛?widget 涓?window 鏈夌潃鍩烘湰鐩稿悓鐨勮涓恒?
紿椾綋鐨勮澶氬睘鎬т笌璁劇疆鍦ㄧ獥鍙e眰鏍?wèi)涓婃槸鍙互閬椾紶鐨勩傞珮涓綰х獥鍙g殑灞炴т笌琛屼負(fù)浼?xì)濯勫搷鍒颁笅涓綰х獥鍙g殑灞炴т笌琛屼負(fù)銆備緥濡傞檮鐫鍦ㄦ煇涓?window 涓婄殑 window 涓?widget 浼?xì)琚?window 褰卞搷銆傚綋鐖剁獥鍙h destroy 鏃訛紝瀹冩墍闄勫睘鐨勬墍鏈夌殑瀛愮獥鍙d笌 widget 涔熼兘灝嗚 destroy.
鍒涘緩 CEGUI 紿楀彛錛屾垜浠彲浠ヤ嬌鐢ㄤ袱縐嶅艦寮忥紝涓鏄?C 錛嬶紜浠g爜錛屼簩鏄紪杈?XML layout 鏂囦歡銆?
娉ㄦ剰錛氬湪 CEGUI 涓紝鎵鏈夌殑 window 閮芥槸鐢?WindowManager singleton object 鏉ョ粺涓鍒涘緩鐨勩傛垜浠鍏堝緱鍒拌繖涓璞★細(xì)
using namespace CEGUI;
WindowManager& wmgr = WindowManager::getSingleton();
涓鑸潵璁詫紝鎴戜滑鎬繪槸鍒涘緩涓涓?DefaultWindow 鏉ュ仛涓烘垜浠皢浣跨敤鐨勭獥鍙g殑 Root, 鍦ㄨ繖縐嶆柟寮忎笅錛屾垜浠細(xì)鏈夋瘮杈冨ソ鐨勭伒媧繪с?
Window* myRoot = wmgr.createWindow(“DefaultWindow”, “root”);
System::getSingleton().setGUISheet(myRoot);
createwindows() 鍑芥暟鎵浣跨敤鐨勭涓涓弬鏁幫紝鎸囨槑浜嗗皢瑕佸垱寤虹殑紿楀彛綾誨瀷錛屽畠涓鑸槸鍦ㄦ垜浠嬌鐢ㄧ殑 .scheme 鏂囦歡涓墍娉ㄥ唽榪囩殑錛屽綋鐒惰繕鏈変竴浜涚郴緇熷畾涔夌殑錛屾繪槸鏈夋晥鐨勭獥鍙g被鍨嬪涓婇潰鎵鎻愬埌鐨?DefaultWindow.DefualtWindow 鏄笉鍙鐨勶紝瀹冨彧鏄仛涓烘墍鏈夌獥鍙g殑 root 鏉ヤ嬌鐢ㄣ?
涓鑸垜浠繪槸瑕佸垱寤轟竴涓?Framewindow, 瀹冨彲浠ュ寘鎷叾浠栫獥鍙d笌 widget 錛屾湰韜篃鏄彲瑙嗙殑銆?
FrameWindow* fWnd = (FrameWindow*)wmgr.createWindow(“TaharezLook/FrameWindow”, “testWindow”);
涔嬪悗錛屾垜浠皢鍒涘緩鐨勭獥鍙f寕鍒?root 涓婏紝褰㈡垚涓涓眰嬈″叧緋匯?
myRoot->addChildWindow(fWnd);
緙栬緫 xml layout 鏂囦歡錛屽彲浣跨敤涓撻棬鎻愪緵鐨勫埗浣滃伐鍏楓傚叿浣撶殑浣跨敤鏂規(guī)硶鍙互鍙傞槄鐩稿叧鏂囨。錛岃繖閲岃涓涓嬪浣曚嬌鐢ㄥ埗浣滃ソ鐨?xml layout 鏂囦歡銆?
using namespace CEGUI;
Window* myRoot = WindowManager::getSingleton().loadWindowLayout(“test.layout”);
System::getSingleton().setGUISheet(myRoot);
棣栧厛錛屽皢 layout 鏂囦歡瑁呰澆榪涙潵錛屽啀鎸囧畾鏍圭粨鐐廣?
CEGUI 鏈韓渚︽祴鐢ㄦ埛杈撳叆錛岃繖浜涗笉鏄?CEGUI 鐨勮矗浠伙紝鑰屾槸紼嬪簭鐨勫憳鐨勮矗浠匯傚綋鏈夌敤鎴峰閮ㄨ緭鍏ユ椂錛屾垜
浠彲浠ラ夋嫨灝嗚繖浜涙秷鎭憡鐭?CEGUI 錛岃繖鏍?CEGUI 鎵嶄細(xì)鍝嶅簲銆?
鍦?ceguir::System 綾諱腑瀹氫箟浜嗕竴緇勫嚱鏁幫紝瀹冧綔涓烘垜浠繘琛屾秷鎭紶閫掔殑鎺ュ彛銆?
bool injectMouseMove(float delta_x, float delta_y);
bool injectMousePosition(float x_pos, float y_pos);
bool injectMouseLeaves(void);
bool injectMouseButtonDown(MouseButton button);
bool injectMouseButtonUp(MouseButton button);
bool injectKeyDown(uint key_code);
bool injectKeyUp(uint key_code);
bool injectChar(utf32 code_point);
bool injectMouseWheelChange(float delta);
bool injectTimePulse(float timeElapsed);
榪欎簺鍑芥暟鐨勮繑鍥炲艱鏄庝簡 CEGUI 鏄惁宸茬粡灝嗕紶鍏ョ殑娑堟伅 consume 鎺変簡銆?
CEGUI 浣跨敤鍥炶皟鏈哄埗鏉ヨ繘琛屾秷鎭鐞嗐傚彲浠ヤ負(fù)鏌愪釜紿椾綋鐨勭壒瀹氫簨浠舵敞鍐屼竴涓嚱鏁幫紝褰撶獥浣撲簨浠跺彂鐢熸椂錛?CEGUI 浼?xì)鑷姩璋冪敤鎵娉ㄥ唽鐨勫嚱鏁般?
bool TutorialApplication::handlePopMenu(constCEGUI::EventArgs& e)
锝?
// 銆傘傘傘傘傝繘琛屼簨浠跺搷搴?
锝?
void setupEventHandlers(void)
{
CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();
wmgr .getWindow((CEGUI::utf8*)"MyButton")->subscribeEvent(
CEGUI ::PushButton::EventClicked, CEGUI::Event::Subscriber(&TutorialApplication::handlePopMenu, this));
}
EventClicked :: 緋葷粺棰勫畾涔夌殑浜嬩歡 . subscribeEvent:: 娉ㄥ唽鍑芥暟錛屽畠浜嬩歡涓庡搷搴斿嚱鏁拌仈鎺ュ湪涓璧楓?
鍦?ogre 紼嬪簭涓紝褰撲睛鍚櫒鏀跺埌閿洏錛岄紶鏍囨秷鎭椂錛岄鍏堢粡榪囬傚綋鐨勮漿鎹紙 CEGUI 鍙互璇嗗埆錛夊啀浼犻掔粰 CEGUI 銆備笅闈㈣繖涓嚱鏁版墽琛岄紶鏍囬敭鏍囪瘑杞崲銆?
CEGUI::MouseButton convertOgreButtonToCegui(int buttonID)
{
switch (buttonID)
{
case MouseEvent::BUTTON0_MASK:
return CEGUI::LeftButton;
case MouseEvent::BUTTON1_MASK:
return CEGUI::RightButton;
case MouseEvent::BUTTON2_MASK:
return CEGUI::MiddleButton;
case MouseEvent::BUTTON3_MASK:
return CEGUI::X1Button;
default:
return CEGUI::LeftButton;
}
}
灝?CEGUI 闇瑕佺煡閬撶殑閿洏錛岄紶鏍囨秷鎭憡鐭ュ畠銆傚嵆鍦?OGRE 澶勭悊榪欎簺娑堟伅鏃墮氱煡 CEGUI 銆備互涓嬭繖鍑芥暟璇存槑浜嗙敤娉曘?
void mouseMoved (MouseEvent *e)// 榧犳爣縐誨姩
{
CEGUI::System::getSingleton().injectMouseMove(
e->getRelX() * mGUIRenderer->getWidth(),
e->getRelY() * mGUIRenderer->getHeight());
e->consume();
}
void mousePressed (MouseEvent *e)// 榧犳爣鎸変笅
{
CEGUI::System::getSingleton().injectMouseButtonDown(
convertOgreButtonToCegui(e->getButtonID()));
e->consume();
}
void mouseReleased (MouseEvent *e)// 榧犳爣寮硅搗
{
CEGUI::System::getSingleton().injectMouseButtonUp(
convertOgreButtonToCegui(e->getButtonID()));
e->consume();
}
void keyPressed(KeyEvent* e)// 閿寜涓?
{
CEGUI::System::getSingleton().injectKeyDown(e->getKey());
CEGUI::System::getSingleton().injectChar(e->getKeyChar());
e->consume();
}
void keyReleased(KeyEvent* e)// 閿脊璧?
{
CEGUI::System::getSingleton().injectKeyUp(e->getKey());
e->consume();
}
鍦?CEGUI 涓嬌鐢ㄤ腑鏂囩殑闂錛?nbsp; 鐜板湪鎬葷粨浜嗕竴涓嬪湪 CEGUI 涓樉紺轟腑鏂囬渶瑕佹敞鎰忕殑浜嬮」 :
1 銆佸皢 simhei.ttf copy to \ogrenew\Samples\Media\gui
2 銆佸皢 simhei-12.font 鎷峰埌涓婄洰褰曞唴瀹逛負(fù)
<?xml version="1.0" ?>
<Font Name="SimHei-12" Filename="simhei.ttf" Type="Dynamic" Size="12" NativeHorzRes="800" NativeVertRes="600"
AutoScaled="true">
<GlyphSet Glyphs=" 浣犲ソ涓栫晫閫鍑烘紨紺烘覆鏌撳埌鏂版潗璐ㄥ緩緙栬緫紿楀彛 " /> 錛?<---- 鑷繁瑕佺敤鍒扮殑姹夊瓧錛?
</Font>
娉ㄦ剰澶у皬鍐欙紒錛?GlyphSet Glyphs 鏄湪紼嬪簭涓鐢ㄥ埌鐨勬眽瀛楋紝瀹冩槸璁?cegui 棰勭敓鎴愪竴涓瓧絎﹀浘鍍忛泦鐢ㄧ殑錛堟兂褰撶劧鐨?:-P 錛夊鏋滀慨鏀逛簡榪欎釜鏂囦歡錛屾敞鎰忚鐢?Unicode 錛?UTF-8 錛夌殑緙栫爜鏉ヤ繚瀛橈紝鍦?vc7.1 涓細(xì)鏂囦歡 -> 楂樼駭淇濆瓨閫夐」 鐨?nbsp; 緙栫爜 鏍忎腑閫夋嫨銆?
3 銆佸湪 TaharezLook.scheme 涓?
<Font Name="Tahoma-12" Filename="tahoma-12.font" /> 鍚庡姞鍏?
<Font Name="SimHei-12" Filename="simhei-12.font" /> 娉ㄦ剰澶у皬鍐?
浠ヤ笂鏄竴浜涘噯澶囧伐浣?
4 銆佸湪鑷繁鐨勫簲鐢ㄤ腑璁劇疆榛樿瀛椾綋
mGUISystem->setDefaultFont((CEGUI::utf8*)"Tahoma-12"); 鏀逛負(fù)
mGUISystem->setDefaultFont((CEGUI::utf8*)"SimHei-12");
5 銆佸湪鑷繁鐨勫簲鐢ㄧ▼搴忎腑灝卞彲浠ユ妸鐩稿叧鐨?Text 灞炴ц涓轟腑鏂囦簡錛屽錛?
item = new CEGUI::ListboxTextItem((CEGUI::utf8*)" 閫鍑?", 6);
鍚屾牱瑕佹敞鎰忕殑鏄淇濆瓨涓?Unicode 錛?UTF-8 錛夌殑緙栫爜銆傚悓鏃惰繖浜涘瓧瑕佹槸鍦?simhei-12.font 涓畾涔夎繃鐨勫瓧錛屽綋鐒朵篃鍙互璞¢偅涓?CEGUIChieseDemo
閭f牱鐢ㄥ姩鎬佺敓鎴愬錛?
gfont->defineFontGlyphs(gfont->getAvailableGlyphs() + (utf8*)" 褰撳墠鏈浣?jīng)_潖騫沖潎鐨勬鏋剁巼涓夎 ");
緙栬瘧鑷繁鐨勭▼搴忥紝搴旇灝卞彲浠ョ湅鍒頒腑鏂囦簡錛岀綏鍡︿竴涓嬶紝璁頒綇鍙鏈夋眽瀛楀嚭鐜扮殑鏂囦歡灝變繚瀛樹負(fù) Unicode 錛?UTF-8 錛夌紪鐮佺殑錛侊紒錛?
鍘熸枃http://www.game798.com/html/2007-12/5156.htm
絎竴鐗?span> by SuperMegaMau
榪欎釜鏁欑▼鍖呮嫭鐨勪唬鐮佸拰綆楁硶鏄綔鑰呰嚜宸辯殑緇忛獙,涔熻涓嶆紜垨涓嶆庝箞鍑嗙‘,濡傛灉鍙戠幇闂璇風(fēng)籂姝c?/span>
鍐呭
|
浠嬬粛
鎴戠浉淇℃垜涓嶆槸絎竴浜鴻嚜闂浣曠敤OgreOde鍒涘緩涓涓繍鍔ㄨ鑹層傛悳绱㈣鍧涘拰wiki鍚庯紝鎴戞剰璇嗗埌榪欐槸涓涓緢鏈夌敤鐨勪俊鎭傝繖涓暀紼嬭В閲婁簡濡備綍鍒涘緩涓涓彲浠ュ湪鍦板艦涓婅璧扮殑榪愬姩瑙掕壊錛堝寘鎷叾瀹?span>meshes錛屽鏍?wèi)鍜屾埧灞嬪Q夈?/span>
鍒涘緩鐗╃悊妯″瀷
鎴戞寜鐓у湪Monster鐨勬柟娉曠敤涓嬪浘浠h〃涓涓鑹詫細(xì)
涓嬮潰,鎴戝亣璁句綘瀵?span>Ogre鐨?span>SceneNodes, meshes 鍜?span>AlignedBoxes閮芥湁鎵浜嗚В錛屽茍涓斾細(xì)鐢?span>SceneManager鍒涘緩鍦板艦銆?/span>
鍒涘緩瑙掕壊
棣栧厛鍒涘緩涓涓?span>SceneNode鏉ユ斁瑙掕壊鐨?span>mesh錛屽湪榪欎釜渚嬪瓙涓垜鐢ㄤ簡Ogre渚嬪瓙涓殑蹇嶈呮ā鍨嬨傚垱寤轟袱涓?span>SceneNode騫舵妸瀹冧滑榪炲湪涓璧楓傚悗闈㈡垜浼?xì)瑙i噴湄?fù)浠涔堟槸涓や釜Node銆?/span>
Entity* ninja = mSceneMgr->createEntity("ninja","ninja.mesh");
SceneNode* ninjaNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("ninja");
SceneNode* modelNode = ninjaNode->createChildSceneNode("ninja_model");
modelNode->attachObject(ninja);
ninjaNode->setScale(0.05,0.05,0.05);
RootSceneNode ninjaNode modelNode
涔熻浣犲凡緇忔敞鎰忓埌錛?span>ninjaNode琚緝鏀懼緱寰堝皬錛岃繖鏄洜涓哄鏋?span>mesh寰堝ぇ鐨勮瘽娓叉煋鐨勯熷害灝卞彉寰堟參錛堜笉鐭ラ亾涓轟粈涔堬級銆?/span>
鑾峰彇 AABB(AxisAlignedBox, 杞村榻愬寘鍥寸洅)
鐜板湪鐢?span>AxisAlignedBox鑾峰彇mesh鐨勫ぇ灝忋?/span>
AxisAlignedBox aab = modelNode->getAttachedObject("ninja")->getBoundingBox();
Ogre::Vector3 min = aab.getMinimum()*ninjaNode->getScale();
Ogre::Vector3 max = aab.getMaximum()*ninjaNode->getScale();
Ogre::Vector3 center = aab.getCenter()*ninjaNode->getScale();
Ogre::Vector3 size(fabs(max.x-min.x),fabs(max.y-min.y),fabs(max.z-min.z));
float radius = (size.x>size.z)?size.z/2.0f:size.x/2.0f;
鍒涘緩涓涓柊絀洪棿
鎴戜滑闇瑕佸垱寤轟竴涓柊絀洪棿鎶婅鑹叉斁鍦ㄥ叾涓紝騫朵笖鍙栨秷鍐呴儴紕版挒媯嫻嬨?/span>
OgreOde::SimpleSpace* dollSpace = new OgreOde::SimpleSpace(_world->getDefaultSpace());
dollSpace->setInternalCollisions(false);
鍒涘緩鐞冧綋(鑵塊儴)
鐜板湪鏈変簡涓や釜SceneNodes錛?span> "ninjaNode" 鍜?span> "modelNode"銆?span>ninjaNode鏄唬琛ㄤ綘瑙掕壊鐨勮妭鐐癸紝modelNode鏄綘鐪熸璐?span>mesh鐨勫湴鏂廣傝繖涔堝仛鏄洜涓?span>mesh鐨勪腑蹇冩繪槸鍦?span>OgreOde::Body鐨勪腑蹇冿紝鎵浠ユ垜浠敤ninjaNode鏉ュ垱寤虹鎾炰綋鐨勪綅緗紝鐒跺悗鏍規(guī)嵁ninjaNode鍜?span>OgreOde::Body鏉ヨ幏寰?span>mesh鐨勬紜綅緗?/span>
宸﹁竟鍥炬槸鐢ㄤ竴涓?span>SceneNode鎵寰楀埌鐨勬晥鏋滐紝鍙寵竟鏄敤涓や釜SceneNode銆備綘鍙互娉ㄦ剰鍒幫紝宸﹁竟鐨勮鑹叉?zhèn)瑡巩鍦ㄥ崐绌轰腑銆備笅闈唬鐮佸垱寤轟簡涓涓悆浣撲唬琛ㄨ鑹茬殑鑴氶儴銆傛垜浠渶瑕佷竴涓?span>SphereGeometry鍜屼竴涓?span>TransformGeometry 灝嗙悆浣撴斁鍒版紜綅緗?/span>
璇戞敞錛氭敞閲婁負(fù)鎴戠殑鐚滄兂錛屽叿浣撲笉鐭ラ亾姝ラ榪欎箞澶嶆潅錛屾榪庣籂姝c?span>
錛?錛?span> 鍒涘緩涓涓鎾炰綋錛屽懡鍚嶄負(fù)feet
錛?錛?span> 璁劇疆紕版挒浣撲負(fù)鐞冨艦鐗╀綋錛屽崐寰勪負(fù)AABB鑾峰緱鐨勫崐寰?/span>
錛?錛?span> SphereGeometry錛屽崐寰勪負(fù)AABB鑾峰緱鐨勫崐寰?/span>
錛?錛?span> TransformGeometry錛岀┖闂翠負(fù)鍒氭墠鍒涘緩鐨勭┖闂?span>, TransformGeometry浼間箮鏄負(fù)浜嗗寘鍚煇鐗瑰畾褰㈢姸鐨勫嚑浣曚綋
錛?錛?span> 鏀瑰彉modelNode鐩稿浜?span>ninjiaNode鐨勪綅緗紝浠ヤ究璁╄剼鍗犲埌鍦頒笂
錛?錛?span> 璁?span>TransformGeometry鍖呭惈涓涓?span>OgreOde::Body鍜屼竴涓嚑浣曚綋
錛?錛?span> 灝?span>Ogre::Body綺樺埌ninjaNode涓?/span>
鎬鐤戝垱寤?span>SphereGeometry鏄惁鍙槸璁?span>Ogre::Body鍏瘋薄鍖?/span>
OgreOde::Body* dollFeetBody = new OgreOde::Body("feet");
dollFeetBody->setMass(OgreOde::SphereMass(70*2.5,radius));
OgreOde::SphereGeometry* feetGeom = new OgreOde::SphereGeometry(radius);
OgreOde::TransformGeometry* feetTrans = new OgreOde::TransformGeometry(dollSpace);
modelNode->translate(Vector3(0,-radius/ninjaNode->getScale().y,0));
feetTrans->setBody(dollFeetBody);
feetTrans->setEncapsulatedGeometry(feetGeom);
ninjaNode->attachObject(dollFeetBody);
鍒涘緩妞悆浣?span>
瀵逛簬瑙掕壊鐨勪笂鍗婅韓鐢ㄤ竴涓き鐞冧綋鏉ヨ〃紺恒?span>
璇戞敞錛氬拰涓婇潰涓鏍楓?/span>
錛?錛?span> 鍒涘緩Ogre::Body
錛?錛?span> 璁劇疆Ogre::Body褰㈢姸錛屽彟澶栬緗笉琚噸鍔涘獎鍝嶏紝
錛?錛?span> 鍒涘緩TransformGeometry錛岀┖闂翠負(fù)鍒氭墠鍒涘緩鐨勭┖闂?/span>
錛?錛?span> 鍒涘緩CapsuleGeometry錛屽崐寰勪負(fù)AABB鑾峰緱鍗婂緞
錛?錛?span> 璁劇疆CapsuleGeometry浣嶇疆鍜屾柟鍚戝拰闃誨凹
錛?錛?span> 璁?span>TransformGeometry鍖呭惈Ogre::body
錛?錛?span> 璁?span>TransformGeometry鍖呭惈CapsuleGeometry
錛?錛?span> 灝?span>Ogre::Body綺樺埌ninjiaNode涓?/span>
OgreOde::Body* dollTorsoBody = new OgreOde::Body("torso");
dollTorsoBody->setMass(OgreOde::CapsuleMass(70*2.5,radius,Vector3::UNIT_Y,radius));
dollTorsoBody->setAffectedByGravity(false);
dollTorsoBody->setDamping(0,50000);
OgreOde::TransformGeometry* torsoTrans = new OgreOde::TransformGeometry(dollSpace);
OgreOde::CapsuleGeometry* torsoGeom = new OgreOde::CapsuleGeometry(radius,size.y-4*radius,dollSpace);
torsoGeom->setPosition(Ogre::Vector3(0,size.y-((size.y-4*radius)/2+2*radius),0)); //can't find a good way to explain this
torsoGeom->setOrientation(Quaternion(Degree(90),Vector3::UNIT_X));
torsoTrans->setBody(dollTorsoBody);
torsoTrans->setEncapsulatedGeometry(torsoGeom);
ninjaNode->attachObject(dollTorsoBody);
榪欎釜鍑犱綍浣撳拰鑴氱殑鍑犱綍浣撳湪鍚屼竴涓┖闂達(dá)紝鎵浠ユ垜浠鍙栨秷鍐呴儴紕版挒媯嫻嬨傝闃誨凹璁劇疆楂樹簺錛屽茍涓斿彇娑堥噸鍔涳紝涓嶇劧瀹冧細(xì)浠庨偅涓悆浣撲笂鎺変笅鏉ャ?/span>
鍒涘緩鍏寵妭
鍓╀笅鐨勪簨鎯呭氨鏄皢涓や釜紕版挒浣撹繛鍦ㄤ竴璧蜂簡銆備竴涓粸榪炶繛鎺ョ殑浠h〃鏄嚜琛岃濺鍓嶈疆銆?span>
OgreOde::HingeJoint* joint = new OgreOde::HingeJoint();
joint->attach(dollTorsoBody,dollFeetBody);
joint->setAxis(Ogre::Vector3::UNIT_X); //set the rotation axis
娉ㄦ剰錛?/span>涓嶈蹇樿璁板綍鎵鏈夌鎾炰綋鍜岃繛鎺ョ殑浣嶇疆浠ヤ究浣犱箣鍚庤兘寰楀埌瀹冧滑銆備綘鍙互鐢?span>ogre鍫嗘爤鎴栬呭垱寤轟綘鑷繁鐨勩?/span>
縐誨姩瑙掕壊
浣犲彲浠ラ氳繃涓嶅悓鏂規(guī)硶縐誨姩鎴栬呮棆杞綘鐨勮鑹詫紝鎴戝喅瀹氶氳繃鏀瑰彉紕版挒浣撴柟鍚戣屼笉鏄柦鍔犲姏鎴栬呭姏鐭┿?/span>
鍓嶅悗縐誨姩
涓嬮潰浠g爜鍙互鏀懼湪鎸夐敭鍝嶅簲閲屾墽琛岋紝璞?span>KC_UP銆傜幇鍦ㄤ綘闇瑕佽幏鍙栫鎾炰綋錛屼粠鍫嗘爤鎴栬?span>hashTable涓幏寰楋紝鐒跺悗鑾峰彇瀹冪殑鏂瑰悜銆傛垜鐢細(xì)
璇戞敞錛氱寽鎯沖爢鏍堝氨鏄綘涓哄睆騫曚笂鎵鏈夌墿浣撴墍鍒涘緩鐨?span>Ogre::Body鐨勪竴涓垪琛ㄣ?span>
OgreOde::Body* torso = torsoBodies->getObject("ninja");
Quaternion q = torso->getOrientation();
鐒跺悗璧嬩簣鑴氫竴涓閫熷害銆?span>
OgreOde::Body* feet = feetBodies->getObject("ninja");
feet->wake();
feet->setAngularVelocity(q*Ogre::Vector3(10*cos(1),0,10*sin(1)));
10鏄垜浠敤鐨勮閫熷害錛屽繀欏諱箻浠ヤ笁瑙掑嚱鏁頒互渚胯瑙掕壊鍚戞紜殑鏂瑰悜鍓嶈繘銆?/span>
宸﹀彸杞姩
涓嬮潰浠g爜鍚屾牱鏀懼湪鎸夐敭鍝嶅簲涓墽琛岋紝姣斿KC_RIGHT銆?span>
OgreOde::Body* torso = torsoBodies->getObject("ninja");
Quaternion q1 = torso->getOrientation();
Quaternion q2(Degree(-4),Ogre::Vector3::UNIT_Y);
torso->setOrientation(q1*q2);
鐢?span>Degree(-4)璁╄鑹插悜鍙寵漿鍔紝鐢ㄦ鏁板悜宸﹁漿鍔ㄣ備篃璁鎬綘宸茬粡娉ㄦ剰鍒幫紝鎴戞繪槸浠庢き鐞冧綋鑾峰彇鎴栬呰緗柟鍚戙傛垜娌℃湁澶鎯籌紝鎴戞兂濡傛灉浣犱粠鑴氱殑鐞冧綋鏉ヨ幏鍙栧拰璁劇疆涔熷簲璇ユ病鏈変粈涔堥棶棰樸?/span>
娉ㄦ剰錛?/span>濡傛灉浣犳澗寮鎸夐敭錛屼綘蹇呴』鎶婇熷害璁劇疆涓?span>0鏉ュ仠姝㈣繍鍔ㄣ?/span>
feetbody->setAngularVelocity(Vector3(0,0,0));
feetBody->setLinearVelocity(Vector3(0,feetBody->getLinearVelocity().y,0));
璁╄鑹茬埇璧鋒潵
鏈鍚庯紝鎴戜滑瑕佺‘瀹氫綘鐨勮鑹蹭笉鎽斿掞紝鎵浠ユ垜浠渶瑕佷笉鏃墮噸鏂拌瀹氫粬鐨勫瀭鐩存柟鍚戙?span>
OgreOde::Body* torso = torsoBodies->getObject("ninja");
Quaternion q = torso->getOrientation();
Vector3 x = q.xAxis();
Vector3 y = q.yAxis();
Vector3 z = q.zAxis();
torso->wake();
torso->setOrientation(Quaternion(x,Vector3::UNIT_Y,z));
闂
閮ㄥ垎浠g爜娌℃湁鎴戞兂璞$殑閭d箞濂姐傛垜閲嶆柊璁懼畾鍨傜洿鏂瑰悜浼?xì)璁╄鑹叉湁濂囨殑琛屼負(fù)銆傝櫧鐒舵垜璁劇疆浜嗛熷害涓?span>0錛屼絾鏄鑹插湪涓浜涗笉瑙勫垯鐨勮〃闈笂浠嶇劧鏃犳硶鍋滀笅鏉ャ?span>