• <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>

            C++優(yōu)雅之旅

            探索C++

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              15 隨筆 :: 0 文章 :: 20 評論 :: 0 Trackbacks
            本系列文章部分內(nèi)容來源于http://ogre3d.cn 的Ogre系列教程的中文翻譯版,加上一些我自己學(xué)習(xí)時的筆記。

            Ogre三基石

            SceneManager 場景管理器

                屏幕上顯示的所有東西都有場景管理器來管理。當(dāng)往場景中添加物體時,場景管理器會記錄物體的位置,當(dāng)添加攝像機(jī)來觀察某個場景時,場景管理器會記錄攝像機(jī)的位置。Ogre里有多種場景管理器

            Entity 實體

                一個實體是可以在場景中渲染的物體之一。可以把實體理解為任何一個3D模型。一個機(jī)器人可以使一個實體,一條魚可以是一個實體,大地草原可以是一個非常大的實體。燈光,攝像機(jī),粒子,廣告牌等不能成為實體。
                Ogre中你不能直接將一個實體放入場景中,而是將實體與場景節(jié)點綁在一起,這個場景節(jié)點則包括了實體的方位信息。

            SceneNode 場景節(jié)點
              
                場景節(jié)點將持續(xù)跟蹤與它綁在一起的實體的方位。當(dāng)你創(chuàng)建了一個實體時,它直到與一個場景節(jié)點綁定后才會被渲染。同樣,一個場景節(jié)點也不能單獨(dú)的在屏幕上顯示出來,只有與一個實體綁定后才能在屏幕上顯示。一個場景節(jié)點可以綁定多個實體,場景節(jié)點同樣可以和其他場景節(jié)點綁定,但是一個實體不能被多個場景節(jié)點綁定。
                每個場景管理器都有一個根節(jié)點,而場景節(jié)點都是在根節(jié)點的基礎(chǔ)上建立,其位置總是相對于根節(jié)點的。

            實踐

                要創(chuàng)建一個實體,可以調(diào)用SceneManager的createEntity方法:
               
            // 創(chuàng)建一個實體, 加載Athena網(wǎng)格。
            Entity
            * entity1 = mSceneMgr->createEntity("athene1""athene.mesh");
                createEntity的第一個參數(shù)為實體指定了一個唯一的標(biāo)識符,第二個參數(shù)表示要加載的資源名稱,在這里是一個名為athene的網(wǎng)格模型。

                我們可以為這個實體代表的網(wǎng)格模式指定一個材質(zhì):
            // 設(shè)置網(wǎng)格材質(zhì)。
            entity1->setMaterialName("Examples/Athene/NormalMapped");

                創(chuàng)建了一個實體后,還要創(chuàng)建一個場景節(jié)點與它綁定起來:
            // 創(chuàng)建一個子場景節(jié)點。
            SceneNode* node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode("athene1");
                與實體一樣,場景節(jié)點的名字也是唯一的,在這里是athene1。

                然后將實體和場景節(jié)點綁定:
            // 將實體綁定到場景節(jié)點上。
            node1->attachObject(entity1);
                綁定之后實體就會被渲染出來,默認(rèn)情況下實體會被渲染到世界坐標(biāo)的原點(0, 0, 0)處。

                要改變實體在場景中的位置,可以使用與之綁定的場景節(jié)點的setPosition方法:
            node1->setPosition(3000);
                這樣場景節(jié)點就相對于根節(jié)點往X軸正方向移動了10個單位。

                同樣,還可以使用場景節(jié)點的translate方法達(dá)到相同的目的:
            node1->translate(Vector3(3000));
                setPosition位置的改變是相對于父節(jié)點的,translate則可以設(shè)置變換相對于哪個坐標(biāo)系。

                要得到場景節(jié)點的父節(jié)點,可以調(diào)用getParentNode:
            SceneNode* parentNode = node1->getParentSceneNode();
                
                要得到場景節(jié)點的名稱,可以調(diào)用getName:
            String nodeName = nod1->getName();

                因為場景節(jié)點的移動都是相對于父節(jié)點的,所以很容易實現(xiàn)兩個節(jié)點一起移動:
            Entity *entity1 = mSceneMgr->createEntity( "Athene1""Athene.mesh" );
            SceneNode 
            *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "AtheneNode1" );
            ode1
            ->attachObject( entity1 );

            Entity 
            *entity2 = mSceneMgr->createEntity( "Athene2""Athene.mesh" );
            SceneNode 
            *node2 = node1->createChildSceneNode( "AtheneNode2", Vector3( 5000 ) );
            node2
            ->attachObject( entity2 );
                這樣一來,node1就成了node2的父節(jié)點,移動node1會使node2跟著一起移動,而移動node2不會影響node1。

            縮放

                使用場景節(jié)點可以對網(wǎng)格模型進(jìn)行縮放:
            node1->scale(1.51.51.5);
                scale的三個參數(shù)分別對應(yīng)x, y, z方向上的縮放比例,上面的例子將網(wǎng)格模型放大到1.5倍。

            旋轉(zhuǎn)

                還可以對網(wǎng)格模型進(jìn)行旋轉(zhuǎn),其中yaw是Y軸的旋轉(zhuǎn),pitch是X軸的旋轉(zhuǎn),roll是Z軸的旋轉(zhuǎn):
            node1->yaw(Degree(-90));
            node1
            ->pitch(Degree(-90));
            node1
            ->roll(Degree(-90));



            posted on 2009-05-20 11:48 林公子 閱讀(1197) 評論(0)  編輯 收藏 引用 所屬分類: OGRE
            国产麻豆精品久久一二三| 久久精品中文字幕一区| 午夜精品久久久久久久久| 久久精品国产久精国产果冻传媒| 久久久久99精品成人片试看| 国产91色综合久久免费| 伊人久久大香线蕉综合网站| 日韩精品久久久久久免费| 久久精品99无色码中文字幕| 欧美黑人又粗又大久久久| 93精91精品国产综合久久香蕉| 要久久爱在线免费观看| 久久99国产精品久久99| 亚洲国产天堂久久综合| 亚洲嫩草影院久久精品| 人妻久久久一区二区三区| 性做久久久久久久久老女人| 久久这里只有精品久久| 久久精品夜夜夜夜夜久久| 欧美一区二区久久精品| 国产精品成人久久久久三级午夜电影 | 国产亚洲成人久久| 性欧美大战久久久久久久久| 99久久99久久精品国产| 9久久9久久精品| 久久久久久久久久久久中文字幕| 国产免费久久精品99re丫y| 久久久精品久久久久久| 国产毛片久久久久久国产毛片 | 久久国产精品一区| 国产ww久久久久久久久久| 久久国产精品久久精品国产| 久久久老熟女一区二区三区| 久久午夜伦鲁片免费无码| 波多野结衣AV无码久久一区| 伊人热热久久原色播放www| 少妇被又大又粗又爽毛片久久黑人| 51久久夜色精品国产| 天天爽天天爽天天片a久久网| 久久国产精品久久国产精品| 国产69精品久久久久777|