青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Sunshine Alike

半完美主義

  C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  35 Posts :: 1 Stories :: 56 Comments :: 0 Trackbacks

常用鏈接

留言簿(15)

積分與排名

  • 積分 - 51074
  • 排名 - 451

最新隨筆

最新評(píng)論

 關(guān)于引擎本身不再多加描述,我也沒(méi)搞明白,但是最近又要用,學(xué)習(xí)ing
首先這次先生成一個(gè)空白窗口,不使用SDK帶的Example。
文件:
MyApplication.h
MyListener.h
main.cpp

首先需要了解一下Ogre程序的基本結(jié)構(gòu),在Ogre里使用一個(gè)叫場(chǎng)景管理器(SceneManager)的類來(lái)管理在屏幕上顯示的各種物體,
這個(gè)類是個(gè)抽象類(class Ogre::SceneManager abstract),只起到定義接口的作用。
不可以直接實(shí)例化這個(gè)類,只能由Root節(jié)點(diǎn)調(diào)用createSceneManager方法來(lái)生成特定類型的SceneManager
OGRE里有很多種場(chǎng)景管理器。有的場(chǎng)景管理器渲染地面,有的場(chǎng)景管理器渲染BSP表等等。

與場(chǎng)景(Scene)相關(guān)的概念:實(shí)體,節(jié)點(diǎn)。
實(shí)體:簡(jiǎn)單的說(shuō)實(shí)體就相當(dāng)于空間中的一個(gè)物體,例如游戲中的一個(gè)角色。
場(chǎng)景節(jié)點(diǎn):要想在場(chǎng)景中使用實(shí)體,必須還要用到節(jié)點(diǎn)(SceneNode),它會(huì)與實(shí)體綁定在一起,當(dāng)控制這個(gè)節(jié)點(diǎn)進(jìn)行各種位移旋轉(zhuǎn)操作時(shí)
其對(duì)應(yīng)的實(shí)體也就跟著相應(yīng)的進(jìn)行操作。
##注:
根據(jù)以前玩游戲的經(jīng)驗(yàn),在游戲(比如飛行射擊)中判斷一個(gè)物體是否被打中也都是以圓點(diǎn)為中心的一個(gè)區(qū)域而非物體(飛機(jī))本身
外殼的形狀可能也是由于這個(gè)原因。
##

接下來(lái)再來(lái)了解一下一個(gè)重要的函數(shù)void MyApplication::go()
這是一個(gè)入口函數(shù),這一次在我的main方法里就只有兩行代碼:
       MyApplication app;
       app.go();
現(xiàn)在來(lái)看看go里有做了些什么事情。
   void go()
   {
       //step 1 to 3 should be in this order
       CreateRoot();
       SetupRenderSystem();
       CreateRenderWindow();

       SetupInputSystem();
       CreateFrameListener();
       StartRenderLoop();
   }
前面的三步需要按特定的順序來(lái)進(jìn)行,后面的則不一定。各個(gè)函數(shù)的功能由函數(shù)名自說(shuō)明了,內(nèi)容也很簡(jiǎn)單。
調(diào)用go后,首先需要?jiǎng)?chuàng)建根節(jié)點(diǎn)m_pRoot = new Root()這是整個(gè)引擎中最核心的一個(gè)對(duì)象,在做其它事情前必須要首先創(chuàng)建它。
接下來(lái)設(shè)置渲染系統(tǒng)SetupRenderSystem() :
       if(!m_pRoot->showConfigDialog())
           exit(0);
Ogre有個(gè)默認(rèn)的設(shè)置對(duì)話框,直接調(diào)用它就可以了,如果用戶取消這一步,那么直接退出程序就好。

創(chuàng)建窗口這一步,可以有多種選擇,因?yàn)椴糠謨?nèi)容跟具體的操作系統(tǒng)相關(guān),可以使用Windows SDK或者M(jìn)FC生成窗口,也可以使用
Ogre默認(rèn)的窗口系統(tǒng),為了簡(jiǎn)便,這里使用Ogre默認(rèn)窗口
       m_pRoot->initialise(true, "MyApplication Rendering Window");

由于是空的窗口,所以不需要生成場(chǎng)景及做相關(guān)的工作。在這次的程序中,將要監(jiān)聽(tīng)一個(gè)鍵盤(pán)事件,按下ESC的時(shí)候退出程序。
這部分工作在接下的兩個(gè)函數(shù)SetupInputSystem和CreateFrameListener中完成。

FrameListener是一個(gè)幀監(jiān)聽(tīng)器,顯示器上的圖像都是一幀一幀的顯示出來(lái)的,我們可以在這切換這些幀的時(shí)候做一些處理工作,
比如,獲取和處理鍵盤(pán)事件。在Ogre的主循環(huán)中大概可能會(huì)是這個(gè)樣子:
  1. Root object調(diào)用frameStarted方法在所有已經(jīng)注冊(cè)的FrameListeners中。
  2. Root object渲染一幀。
  3. Root object調(diào)用frameEnded方法在所有已經(jīng)注冊(cè)的FrameListeners中。

在這里添加一個(gè)MyListener類用來(lái)做這件事情。
class CombatListener : public FrameListener
{
public:
   CombatListener(OIS::Keyboard *pkeyboard)
       : m_pKeyboard(pkeyboard)
   {
   }

   bool frameStarted(const FrameEvent& evt)
   {
       m_pKeyboard->capture();
       return !(m_pKeyboard->isKeyDown(OIS::KC_ESCAPE));
   }

private:
   OIS::Keyboard *m_pKeyboard;
};
同樣的,Ogre也已經(jīng)準(zhǔn)備好了一個(gè)基類,只需要繼承再稍加修改就可以了,其中OIS是Object Oriented Input System
它本身不屬于Ogre,是一個(gè)簡(jiǎn)單易用的跨平臺(tái)開(kāi)源系統(tǒng),可以用它來(lái)處理鍵盤(pán)鼠標(biāo)和游戲手柄等設(shè)備。
這里我在每一幀開(kāi)始的時(shí)候獲取鍵盤(pán)狀態(tài),當(dāng)ESC鍵按下時(shí),返回false,這將導(dǎo)致程序正常退出。

OIS使用一個(gè)統(tǒng)一的InputManager,它比較難配置,但一旦正確地創(chuàng)建之后,非常好使用。 首先在SetupInputSystem方法中加入
       size_t windowHnd = 0;
       std::ostringstream windowHndStr;
       OIS::ParamList pl;
       RenderWindow *win = m_pRoot->getAutoCreatedWindow();

       win->getCustomAttribute("WINDOW", &windowHnd);
       windowHndStr<<windowHnd;
       pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
       m_pInputManager = OIS::InputManager::createInputSystem(pl);
說(shuō)明一點(diǎn),getCustomAttribute方法的功能是用來(lái)獲取特定平臺(tái)的信息,在API上用一個(gè)詞Horrid來(lái)形容這個(gè)方法,哈哈,無(wú)奈D3D需要這些信息。
下面再把下面的代碼回到SetupInputSystem方法中就OK了。
       try
       {
           m_pKeyboard = static_cast<OIS::Keyboard*>(
               m_pInputManager->createInputObject(OIS::OISKeyboard, false));
       }
       catch(const OIS::Exception &e)
       {
           throw Exception(42, e.eText, "MyApplication::SetupInputSystem()");
       }

InputSystem設(shè)置好了,就可以使用幀監(jiān)聽(tīng)器了,在創(chuàng)建幀監(jiān)聽(tīng)器的方法中:
       m_pListener = new MyListener(m_pKeyboard);
       m_pRoot->addFrameListener(m_pListener);
好,到這里程序基本上完成了,剩下只需要啟動(dòng)渲染循環(huán)(StartRenderLoop)就可以讓程序跑起來(lái)了
       m_pRoot->startRendering();


posted on 2009-10-28 22:33 Sunshine Alike 閱讀(846) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 游戲開(kāi)發(fā)

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲电影一级黄| 欧美大胆a视频| 美日韩在线观看| 亚洲欧美网站| 国产精品一区二区三区免费观看| 亚洲精品乱码久久久久久久久| 老司机久久99久久精品播放免费| 欧美亚洲综合久久| 激情综合色综合久久综合| 久久精品亚洲一区二区| 亚洲摸下面视频| 亚洲第一黄色网| 欧美国产精品人人做人人爱| 精品动漫一区二区| 亚洲精品乱码久久久久久蜜桃91 | 午夜视频一区在线观看| 亚洲自拍三区| 欧美 日韩 国产一区二区在线视频 | 欧美精品一区二区三区高清aⅴ| 亚洲国产精品99久久久久久久久| 亚洲国产精品一区在线观看不卡| 国产视频精品免费播放| 久久精品男女| 欧美国产日韩精品免费观看| 国产精品一区=区| 国产精品v欧美精品v日韩| 免费成人av| 亚洲黄色小视频| 亚洲第一久久影院| 久久精品国产亚洲精品| 欧美中文在线观看国产| 欧美日韩综合另类| 亚洲国产高清aⅴ视频| 亚洲成人在线网站| 久热精品在线| 亚洲在线视频一区| 亚洲精品1区| 老司机免费视频久久| 国产精品久久影院| 欧美国产综合一区二区| 好看不卡的中文字幕| 久久aⅴ国产欧美74aaa| 久久一本综合频道| 中文av一区二区| 午夜精品福利一区二区蜜股av| 欧美乱人伦中文字幕在线| 欧美福利小视频| 亚洲免费观看高清在线观看 | 久久久精品动漫| 国产精品私房写真福利视频| 亚洲一本大道在线| 亚洲精品1234| 一本一本大道香蕉久在线精品| 亚洲乱码久久| 久久av红桃一区二区小说| 影音先锋亚洲电影| 国产精品xnxxcom| 久久综合伊人77777蜜臀| 亚洲欧美一区二区三区久久| 亚洲一区二区av电影| 国产综合在线视频| 欧美区二区三区| 久久精品国产77777蜜臀| 99精品免费视频| 欧美激情第9页| 午夜精品一区二区三区在线| 伊人色综合久久天天| 国产一区在线播放| 国产精品嫩草影院av蜜臀| 欧美激情aaaa| 欧美成人午夜激情在线| 国产亚洲成精品久久| 久久中文字幕一区| 久久成人精品无人区| 亚洲免费小视频| 亚洲素人在线| 亚洲激情一区| 亚洲第一精品在线| 久久精品国产免费| 久久国产加勒比精品无码| 亚洲在线视频网站| 午夜精品亚洲| 久久久精品日韩| 久久久久网址| 免费黄网站欧美| 欧美成人国产| 亚洲国产日韩一区| 亚洲人成在线观看| 国产精品性做久久久久久| 最新国产乱人伦偷精品免费网站| 欧美肥婆在线| 一本一本a久久| 亚洲在线第一页| 欧美+日本+国产+在线a∨观看| 美女脱光内衣内裤视频久久影院 | 国产伦精品一区二区三区免费 | 欧美视频二区36p| 国产精品欧美一区二区三区奶水 | 在线精品亚洲一区二区| 亚洲欧洲一区二区三区在线观看 | 一区二区欧美亚洲| 亚洲综合成人婷婷小说| 久久久久国产精品麻豆ai换脸 | 欧美一区二区久久久| 欧美夜福利tv在线| 亚洲福利视频网站| 一道本一区二区| 久久久噜噜噜久久| 国产精品福利网站| 亚洲人成人99网站| 久久字幕精品一区| 亚洲欧美在线网| 欧美日韩亚洲综合一区| 亚洲欧洲日韩综合二区| 久久久国际精品| 欧美一区成人| 亚洲欧美怡红院| 一区二区高清视频在线观看| 久久亚洲春色中文字幕| 亚洲视频精选| 你懂的一区二区| 久久精品首页| 亚洲电影av在线| 欧美不卡福利| 久久久伊人欧美| 99国产精品久久久久久久久久| 亚洲大片在线| 蜜桃视频一区| 亚洲国产一区二区三区a毛片| 免费观看在线综合| 欧美精品激情在线观看| 亚洲小视频在线| 欧美诱惑福利视频| 亚洲国产mv| 一区二区成人精品| 国产精品日产欧美久久久久| 亚洲男女自偷自拍| 久久久久国产一区二区| 亚洲欧洲一级| 午夜在线观看欧美| 亚洲狼人综合| 午夜精品影院| 亚洲美女免费精品视频在线观看| 一区二区欧美视频| 亚洲成人在线视频播放| 亚洲免费观看高清完整版在线观看熊| 欧美午夜欧美| 亚洲国产精品欧美一二99| 欧美国产一区二区| 国产精品任我爽爆在线播放 | 免费观看30秒视频久久| 91久久亚洲| 久久精品亚洲热| 欧美一级成年大片在线观看| 欧美精品在线观看播放| 久久久久久久久伊人| 欧美日韩一区二区三区视频| 欧美高清自拍一区| 亚洲激情专区| 蜜桃av综合| 亚洲第一免费播放区| 精品1区2区3区4区| 亚洲欧美国产另类| 久久久91精品国产一区二区精品| 国产精品高清免费在线观看| 最新成人av在线| 亚洲午夜激情在线| 国产精品私拍pans大尺度在线| 国产精品99久久久久久久vr| 一区二区欧美激情| 久久一二三区| 欧美在线二区| 欧美搞黄网站| 亚洲一区二区三区精品在线 | 亚洲欧美中文日韩v在线观看| 亚洲欧美综合网| 亚洲第一成人在线| 欧美凹凸一区二区三区视频| 亚洲级视频在线观看免费1级| 一本色道久久综合亚洲精品高清| 欧美国产精品v| 亚洲一级在线| 亚洲国产岛国毛片在线| 亚洲自啪免费| 樱花yy私人影院亚洲| 欧美视频一二三区| 久久全国免费视频| 亚洲综合第一页| 亚洲精品影视在线观看| 欧美伊人久久大香线蕉综合69| 激情小说另类小说亚洲欧美| 欧美日韩国产成人在线观看| 欧美一区影院| 99热这里只有成人精品国产| 国产日韩欧美亚洲| 欧美日韩日韩| 欧美成人精品一区二区| 欧美在线一二三区| 欧美亚洲免费| 亚洲欧美日韩精品久久亚洲区 |