锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Ogre涓夊熀鐭?br>
SceneManager 鍦烘櫙綆$悊鍣?br>
灞忓箷涓婃樉紺虹殑鎵鏈変笢瑗塊兘鏈夊満鏅鐞嗗櫒鏉ョ鐞嗐傚綋寰鍦烘櫙涓坊鍔犵墿浣撴椂錛屽満鏅鐞嗗櫒浼氳褰曠墿浣撶殑浣嶇疆錛屽綋娣誨姞鎽勫儚鏈烘潵瑙傚療鏌愪釜鍦烘櫙鏃訛紝鍦烘櫙綆$悊鍣ㄤ細璁板綍鎽勫儚鏈虹殑浣嶇疆銆侽gre閲屾湁澶氱鍦烘櫙綆$悊鍣?br>
Entity 瀹炰綋
涓涓疄浣撴槸鍙互鍦ㄥ満鏅腑娓叉煋鐨勭墿浣撲箣涓銆傚彲浠ユ妸瀹炰綋鐞嗚В涓轟換浣曚竴涓?D妯″瀷銆備竴涓満鍣ㄤ漢鍙互浣夸竴涓疄浣擄紝涓鏉¢奔鍙互鏄竴涓疄浣擄紝澶у湴鑽夊師鍙互鏄竴涓潪甯稿ぇ鐨勫疄浣撱?span style="color: red;">鐏厜錛屾憚鍍忔満錛岀矑瀛愶紝騫垮憡鐗岀瓑涓嶈兘鎴愪負瀹炰綋銆?/span>
Ogre涓綘涓嶈兘鐩存帴灝嗕竴涓疄浣撴斁鍏ュ満鏅腑錛岃屾槸灝嗗疄浣撲笌鍦烘櫙鑺傜偣緇戝湪涓璧鳳紝榪欎釜鍦烘櫙鑺傜偣鍒欏寘鎷簡瀹炰綋鐨勬柟浣嶄俊鎭?br>
SceneNode 鍦烘櫙鑺傜偣
鍦烘櫙鑺傜偣灝嗘寔緇窡韙笌瀹冪粦鍦ㄤ竴璧風殑瀹炰綋鐨勬柟浣嶃傚綋浣犲垱寤轟簡涓涓疄浣撴椂錛屽畠鐩村埌涓庝竴涓満鏅妭鐐圭粦瀹氬悗鎵嶄細琚覆鏌撱傚悓鏍鳳紝涓涓満鏅妭鐐逛篃涓嶈兘鍗曠嫭鐨勫湪灞忓箷涓婃樉紺哄嚭鏉ワ紝鍙湁涓庝竴涓疄浣撶粦瀹氬悗鎵嶈兘鍦ㄥ睆騫曚笂鏄劇ず銆?span style="color: red;">涓涓満鏅妭鐐瑰彲浠ョ粦瀹氬涓疄浣擄紝鍦烘櫙鑺傜偣鍚屾牱鍙互鍜屽叾浠栧満鏅妭鐐圭粦瀹氾紝浣嗘槸涓涓疄浣撲笉鑳借澶氫釜鍦烘櫙鑺傜偣緇戝畾銆?/span>
姣忎釜鍦烘櫙綆$悊鍣ㄩ兘鏈変竴涓牴鑺傜偣錛岃屽満鏅妭鐐歸兘鏄湪鏍硅妭鐐圭殑鍩虹涓婂緩绔嬶紝鍏朵綅緗繪槸鐩稿浜庢牴鑺傜偣鐨勩?br>
瀹炶返
瑕佸垱寤轟竴涓疄浣擄紝鍙互璋冪敤SceneManager鐨刢reateEntity鏂規硶錛?br>
Entity* entity1 = mSceneMgr->createEntity("athene1", "athene.mesh");
鎴戜滑鍙互涓鴻繖涓疄浣撲唬琛ㄧ殑緗戞牸妯″紡鎸囧畾涓涓潗璐細
entity1->setMaterialName("Examples/Athene/NormalMapped");
鍒涘緩浜嗕竴涓疄浣撳悗錛岃繕瑕佸垱寤轟竴涓満鏅妭鐐逛笌瀹冪粦瀹氳搗鏉ワ細
SceneNode* node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode("athene1");
鐒跺悗灝嗗疄浣撳拰鍦烘櫙鑺傜偣緇戝畾錛?br>
node1->attachObject(entity1);
瑕佹敼鍙樺疄浣撳湪鍦烘櫙涓殑浣嶇疆錛屽彲浠ヤ嬌鐢ㄤ笌涔嬬粦瀹氱殑鍦烘櫙鑺傜偣鐨剆etPosition鏂規硶錛?br>
鍚屾牱錛岃繕鍙互浣跨敤鍦烘櫙鑺傜偣鐨則ranslate鏂規硶杈懼埌鐩稿悓鐨勭洰鐨勶細
瑕佸緱鍒板満鏅妭鐐圭殑鐖惰妭鐐癸紝鍙互璋冪敤getParentNode:
瑕佸緱鍒板満鏅妭鐐圭殑鍚嶇О錛屽彲浠ヨ皟鐢╣etName:
鍥犱負鍦烘櫙鑺傜偣鐨勭Щ鍔ㄩ兘鏄浉瀵逛簬鐖惰妭鐐圭殑錛屾墍浠ュ緢瀹規槗瀹炵幇涓や釜鑺傜偣涓璧風Щ鍔細
SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "AtheneNode1" );
ode1->attachObject( entity1 );
Entity *entity2 = mSceneMgr->createEntity( "Athene2", "Athene.mesh" );
SceneNode *node2 = node1->createChildSceneNode( "AtheneNode2", Vector3( 50, 0, 0 ) );
node2->attachObject( entity2 );
緙╂斁
浣跨敤鍦烘櫙鑺傜偣鍙互瀵圭綉鏍兼ā鍨嬭繘琛岀緝鏀撅細
鏃嬭漿
榪樺彲浠ュ緗戞牸妯″瀷榪涜鏃嬭漿錛屽叾涓瓂aw鏄痀杞寸殑鏃嬭漿錛宲itch鏄疿杞寸殑鏃嬭漿錛宺oll鏄痁杞寸殑鏃嬭漿錛?br>
node1->pitch(Degree(-90));
node1->roll(Degree(-90));
]]>
mSn->translate(mPosition * evt.timeSinceLastFrame, Node::TS_WORLD);
鍒氬紑濮嬪涔燨gre,鍋氫簡涓緢綆鍗曠殑demo,鐢ㄩ敭鐩樼殑涓婁笅宸﹀彸鎺у埗涓涓漢鐗╂ā鍨嬪洓澶勮蛋鍔ㄣ傞昏緫寰堢畝鍗曪紝浣嗘槸瀹炵幇鍒版兂瑕佺殑鏁堟灉鍗磋垂浜嗕竴鐣懆鎶樸?br> 涓寮濮嬬敤涓涓猇ector3 mPosition鍙橀噺淇濆瓨浜虹墿鐨勪綅緗紝鐒跺悗Real mWalkSpeed淇濆瓨浜虹墿鐨勭Щ鍔ㄩ熷害錛屽湪涓婁笅宸﹀彸鐨勬寜閿搷搴斾唬鐮佷腑鍒嗗埆
鍐欎笂澶勭悊浜虹墿鍚勬柟鍚戠Щ鍔ㄧ殑浠g爜錛?/span>
1 bool DemoFrameListener::keyPressed(const OIS::KeyEvent &arg)
2
{
3 switch (arg.key)
4
{
5 // 鎸変笅Escape閿紝閫鍑虹▼搴忋?/span>
6 case OIS::KC_ESCAPE:
7 mContinue = false;
8
9 // W銆丼銆丄銆丏鎺у埗浜虹墿琛岃蛋銆?/span>
10 case OIS::KC_UP:
11 case OIS::KC_W:
12 mPosition.z -= mWalkSpeed;
13 mSn->setDirection(Vector3::NEGATIVE_UNIT_Z);
14 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
15 mAnimationState = mEntity->getAnimationState("Walk");
16 break;
17 case OIS::KC_S:
18 case OIS::KC_DOWN:
19 mPosition.z += mWalkSpeed;
20 mSn->setDirection(Vector3::UNIT_Z);
21 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
22 mAnimationState = mEntity->getAnimationState("Walk");
23 break;
24 case OIS::KC_A:
25 case OIS::KC_LEFT:
26 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
27 mAnimationState = mEntity->getAnimationState("Walk");
28 mSn->setDirection(Vector3::UNIT_X);
29 break;
30 case OIS::KC_D:
31 case OIS::KC_RIGHT:
32 // 鍙栧緱妯″瀷鐨?Walk"鍔ㄧ敾闆嗐?/span>
33 mAnimationState = mEntity->getAnimationState("Walk");
34 mSn->setDirection(Vector3::NEGATIVE_UNIT_X);
35 break;
36 }
37
38 return true;
39}
40
mSn->translate(mPosition * evt.timeSinceLastFrame, Node::TS_LOCAL);
鍙﹀
mSn->translate(mPosition * evt.timeSinceLastFrame, Node::TS_LOCAL);
]]>