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

的筆記

隨時隨地編輯

Ogre中grass渲染動態草體

 

Ogregrass渲染動態草體

 

關鍵詞:

StaticGeometry、靜態幾何體

 

“看起來似乎靜態幾何體是活動物體(Moveable Object)的反義詞,但事實上也不全是:通常來說靜態幾何體會由很多不再活動的活動物體來構成。”(Pro OGRE 3D Programming

中文翻譯版本0.2.0

 

靜態物體的幾個缺點(Pro OGRE 3D Programming中文翻譯版本0.2.0):

 

•巨大的靜態物體需要在使用前被構建,通常這是一個緩慢的過程,所以不能在每一幀都執行。

 

靜態幾何體將按著放入物體的材質來進行分類,并且把材質相同的集合體放置到同一個渲染設置當中(換句話說,也就是放到同一個簇中)。但這并不表示只要把一組幾何體打包成一個靜態物體就能神奇的把它們捆綁到一個渲染設置中。

 

•在靜態幾何體中“靜態”的含義是:一旦物體被放入靜態幾何體中,你就不能在單獨移動它了。任何對靜態幾何體的世界變換都會應用到所有里面包含的物體上。

 

•靜態幾何體會比同樣大小的活動物體占用更多的內存。靜態幾何體會為每一個實體創建一個網格模型數據的拷貝。

 

•就算在你的視野里(視截體)中看到了整個靜態幾何體的一小部分,甚至包括在你身后的整個數據都會傳到圖形硬件中渲染。

 

ogre_src_v1-7-2\Samples\Grass\include\Grass.h

這個注釋很機械,夠參考用了:http://xmchang.bokee.com/4277630.html

 

StaticGeometry的數據分析見后面的“底層數據結構分析”。

 

 

StaticGeometry對象作為動態草坪,然后在上面附加手繪的grass mesh

 

步驟:

1.       創建手繪mesh,命名為“grass”,并加載到Etity中。這是一個創建用戶自定義mesh的方法,稍后再說。

2.       構造靜態幾何體,并設置它的參數。

     StaticGeometry* mField = mSceneMgr->createStaticGeometry("Field");

 

3.       將草體Entity加到StaticGeometry靜態幾何體中,也就是往field中種草

                   mField->addEntity(grass, pos, ori, scale);

 

4.       執行創建。烘焙草體?

         mField->build(); // build our static geometry (bake the grass into it)

 

5.       草體隨風搖擺。幀循環中

         waveGrass(evt.timeSinceLastFrame);  // wave the grass around slowly to simulate wind

 

手動創建mesh(需補充。。。)

草體搖動的代碼不是很懂。不是很熟悉靜態幾何體的結構。(需補充。。。)

 

 

PagedGeometry中的草體

 

奧米格得,那不是2句話就能說清楚的,還用了cg。靜止的樹如下渲染:

1.       創建PagedGeometry對象

PagedGeometry*     trees = new PagedGeometry();

2.       創建TreeLoader3D對象,用于加載樹,并加載到PG中。

     TreeLoader3D *treeLoader = new TreeLoader3D(trees, TBounds(0, 0, 1500, 1500));

     trees->setPageLoader(treeLoader);    //Assign the "treeLoader" to be used to load geometry for the PagedGeometry instance

3.       準備好地形高度表,方便種樹嘛

     //Setup the height function (so the Y values of trees can be calculated when they are placed on the terrain)

     HeightFunction::initialize(sceneMgr);

4.       種樹了。隨機在一個區域種樹,世界里沒有一顆相同的樹。

 for (int i = 0; i < 20000; i++){

       yaw = Degree(Math::RangeRandom(0, 360));

 

       position.x = Math::RangeRandom(0, 1500);

       position.z = Math::RangeRandom(0, 1500);

       position.y = HeightFunction::getTerrainHeight(position.x, position.z);

 

       scale = Math::RangeRandom(0.5f, 0.6f);

 

       treeLoader->addTree(myEntity, position, yaw, scale);

 }

 

5.       幀循環中更新LOD

     //[NOTE] PagedGeometry::update() is called every frame to keep LODs, etc. up-to-date

     trees->update();

 

 

 

 

類關系

class BatchedGeometry: public Ogre::MovableObject

class WindBatchedGeometry: public BatchedGeometry

 

總結:

很迷惑,似乎是用的MovableObject,為什么不用StaticGeometryPG實現了一套完整的樹木森林渲染方式,得單獨理解。暫且放下,看看ogitor如何實現的。

 

 

Ogitor中的草體

Ogitor 0.4中也是是用的pagedgeometry 1.1.0,和上面分析時使用的一個版本。

#define PAGEDGEOMETRY_VERSION       "1.1.0"

 

Ogitor中還用到了moc,暫記之。

 

CPGInstanceManager

用于管理pagedgeometry

    class   CBaseEditor: public Ogre::GeneralAllocatedObject

    class   CPGInstanceManager : public CBaseEditor, public MouseListener

 

    class   CPGInstanceEditor : public CBaseEditor

 

 

加載樹的代碼和上面的介紹一樣,這里找

bool CPGInstanceManager::load(bool async)

 

update在這里

bool CPGInstanceManager::update(float timePassed)

 

總之還是可以借鑒的。

  

底層數據結構分析

---------------------------------------------------------------------------------------------------------------

內存種類

 enum MemoryCategory

 {

       /// General purpose

       MEMCATEGORY_GENERAL = 0,

       /// Geometry held in main memory

       MEMCATEGORY_GEOMETRY = 1,

       /// Animation data like tracks, bone matrices

       MEMCATEGORY_ANIMATION = 2,

       /// Nodes, control data

       MEMCATEGORY_SCENE_CONTROL = 3,

       /// Scene object instances

       MEMCATEGORY_SCENE_OBJECTS = 4,

       /// Other resources

       MEMCATEGORY_RESOURCE = 5,

       /// Scripting

       MEMCATEGORY_SCRIPTING = 6,

       /// Rendersystem structures

       MEMCATEGORY_RENDERSYS = 7,

 

      

       // sentinel value, do not use

       MEMCATEGORY_COUNT = 8

 };

 

     This allocation policy uses nedmalloc

     (http://nedprod.com/programs/portable/nedmalloc/index.html).

     class NedPoolingPolicy

 

     template <MemoryCategory Cat> class CategorisedAllocPolicy : public NedPoolingPolicy{};

 

     typedef CategorisedAllocPolicy<Ogre::MEMCATEGORY_GEOMETRY> GeometryAllocPolicy;

|

     typedef AllocatedObject<GeometryAllocPolicy> GeometryAllocatedObject;

|

     typedef GeometryAllocatedObject      BatchedGeometryAlloc;

 

值得注意的是,nedprod宣稱: there is no faster portable memory allocator out there! 

Ned似乎是作者的名字。

 

 

Policy模式

 


PagedGeometry插件分析
http://sxoo0305.blog.163.com/blog/static/10132887201061154455372/

posted on 2011-05-07 13:48 的筆記 閱讀(1140) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品综合| 国产精品网曝门| 亚洲视频精品| 一本久道久久久| 一本久久综合亚洲鲁鲁| 制服诱惑一区二区| 这里只有精品视频| 午夜精品久久一牛影视| 久久久久国产一区二区| 久久综合狠狠综合久久激情| 欧美jizz19hd性欧美| 欧美激情在线免费观看| 欧美日韩三级在线| 国产精品一区毛片| 欧美在线视频二区| 国产伦精品一区二区三区视频孕妇| 亚洲精品在线三区| 一区二区三区精品视频| 午夜精品一区二区三区电影天堂 | 欧美大片免费观看| 欧美视频一区二区三区…| 国产日韩欧美精品在线| 亚洲日本aⅴ片在线观看香蕉| 一区二区三区日韩在线观看| 久久久人成影片一区二区三区| 亚洲第一中文字幕| 99精品国产一区二区青青牛奶| 亚洲男人影院| 欧美精品成人91久久久久久久| 国产精品乱码妇女bbbb| 亚洲人成在线观看网站高清| 欧美在线免费观看视频| 亚洲伦理久久| 欧美96在线丨欧| 激情文学综合丁香| 亚洲欧美日韩专区| 欧美高清视频一区二区三区在线观看| aa成人免费视频| 欧美国产日韩一区二区三区| 韩国自拍一区| 欧美在线啊v| 国产精品99久久久久久久久久久久| 另类专区欧美制服同性| 国产日本欧美一区二区| 亚洲砖区区免费| 亚洲乱码国产乱码精品精98午夜| 噜噜噜躁狠狠躁狠狠精品视频 | 欧美在线中文字幕| 一区二区不卡在线视频 午夜欧美不卡' | 一本色道久久99精品综合 | 欧美日韩日本国产亚洲在线 | 亚洲三级影片| 免费永久网站黄欧美| 欧美永久精品| 国内免费精品永久在线视频| 久久国产手机看片| 亚洲欧美日韩中文播放| 国产精品视频| 国产精品二区在线| 制服丝袜亚洲播放| 亚洲蜜桃精久久久久久久 | 国产又爽又黄的激情精品视频| 亚洲一区制服诱惑| 99这里只有精品| 欧美午夜不卡| 亚洲男同1069视频| 99精品视频免费在线观看| 欧美日韩一级片在线观看| 99国产精品视频免费观看一公开| 欧美激情一区三区| 欧美精品一级| 一区二区三区免费观看| 一本大道久久a久久综合婷婷| 欧美日韩视频专区在线播放 | 欧美激情视频一区二区三区免费| 亚洲二区在线视频| 亚洲国产日韩欧美综合久久| 欧美成人蜜桃| 亚洲影院免费| 久久福利资源站| 亚洲人成免费| 亚洲一区二区三区高清| 国产视频一区在线观看一区免费| 久久久久久久性| 麻豆成人综合网| 亚洲一区二区精品视频| 午夜日本精品| 亚洲人成网站999久久久综合| 亚洲电影网站| 欧美精品福利在线| 欧美影院成人| 欧美77777| 欧美在线免费视频| 欧美88av| 久久成人av少妇免费| 老司机凹凸av亚洲导航| 一区二区免费在线视频| 亚洲欧美日本精品| 永久久久久久| av成人老司机| 激情综合色综合久久| 欧美韩国在线| 国产精品久久二区二区| 欧美高清在线一区二区| 国产精品毛片在线看| 欧美成年视频| 国产欧美日韩免费| 亚洲精品视频二区| 亚洲丶国产丶欧美一区二区三区 | 亚洲一区二区三区精品视频 | 久久疯狂做爰流白浆xx| 99精品欧美一区二区三区综合在线| 亚洲天堂网在线观看| 亚洲日本成人网| 久久精品伊人| 欧美日韩卡一卡二| 欧美电影专区| 狠狠色香婷婷久久亚洲精品| 一区二区高清| 日韩一二三在线视频播| 久久久99久久精品女同性| 亚洲欧美第一页| 欧美视频在线免费看| 亚洲国产成人久久| 亚洲第一视频| 看欧美日韩国产| 久久影院午夜论| 国产在线一区二区三区四区| 亚洲伊人观看| 欧美在线视频二区| 国产精品亚洲аv天堂网| 亚洲免费观看| 一区二区三区偷拍| 欧美午夜无遮挡| a4yy欧美一区二区三区| 亚洲视频在线视频| 国产精品sss| 国产精品99久久久久久久vr| 中文高清一区| 欧美日韩另类视频| 一区二区三区精品视频| 亚洲欧美日韩国产综合在线 | 国产精品视频一二三| 亚洲综合激情| 欧美一激情一区二区三区| 国产精品私人影院| 性感少妇一区| 鲁鲁狠狠狠7777一区二区| 国语精品中文字幕| 久久久成人精品| 亚洲第一在线综合网站| 夜夜嗨av色一区二区不卡| 欧美日本中文字幕| 亚洲午夜影视影院在线观看| 久久国产精品免费一区| 亚洲欧洲美洲综合色网| 欧美三级在线视频| 亚洲午夜免费视频| 久久久噜噜噜久久| 亚洲片区在线| 国产精品久久久久久一区二区三区| 亚洲欧美激情在线视频| 久久嫩草精品久久久精品| 91久久精品国产91久久| 欧美色精品天天在线观看视频| 午夜欧美大尺度福利影院在线看| 久久久久久久尹人综合网亚洲 | 久久国产精品一区二区| 亚洲人成啪啪网站| 国产精品v欧美精品v日韩精品| 欧美一区二区三区视频免费播放 | 亚洲视频1区2区| 国产午夜精品全部视频播放 | 一二三四社区欧美黄| 国产女人aaa级久久久级| 欧美国产一区二区在线观看| 亚洲一区二区三区精品视频 | 亚洲第一页在线| 欧美午夜精品伦理| 老色鬼精品视频在线观看播放| 夜夜嗨av一区二区三区中文字幕 | 亚洲一区尤物| 亚洲国产美女精品久久久久∴| 国产精品成人一区二区三区吃奶| 久久国内精品视频| 中文av一区特黄| 亚洲欧洲一区二区在线播放| 久久这里只有精品视频首页| 亚洲一区在线看| av成人国产| 亚洲欧洲在线看| 韩国久久久久| 国产精品成av人在线视午夜片| 免费在线国产精品| 久久久91精品国产一区二区三区| 亚洲在线成人| 亚洲一品av免费观看| 妖精成人www高清在线观看| 亚洲高清免费在线| 欧美激情网友自拍|