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

            李錦俊(mybios)的blog

            游戲開發(fā) C++ Cocos2d-x OpenGL DirectX 數(shù)學(xué) 計(jì)算機(jī)圖形學(xué) SQL Server

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

            公告

            QQ:30743734
            EMain:mybios@qq.com

            常用鏈接

            留言簿(16)

            我參與的團(tuán)隊(duì)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 370226
            • 排名 - 67

            最新評論

            閱讀排行榜

            評論排行榜

            前段時(shí)間看了很多很多的3D相關(guān)的基礎(chǔ)書,感覺上學(xué)到了很多東西,但是不知道做什么好。后來,用DXUT做了兩個(gè)小游戲,連連看和紙牌,雖然都是2D的,但是感覺上還是覺得自己進(jìn)步了。

            接下來的一段日子里,是時(shí)候繼續(xù)學(xué)3D的東西了,于是萌生了個(gè)做游戲引擎的想法。我是個(gè)想做就做的人,雖然我也知道自己是不自量力,但是,只要我肯去做,即使做不好,也起碼能學(xué)到東西啊,把學(xué)過的東西拿來用一番,就能有感覺了。

            說說引擎部分的構(gòu)建,引擎部分的FrameWork主要參考了GPG3的1.2那個(gè)框架模式,采用Unicode編譯,感覺上那個(gè)模式比較好用,但是太復(fù)雜了點(diǎn),于是我簡化了他,基本上只保留了任務(wù)系統(tǒng)。使用平臺(tái)無關(guān)的插件方式把Win32和Direct3D9的模塊做了出來(當(dāng)然只封裝了一小部分函數(shù)),把Ogre的基礎(chǔ)庫全部拿來主義(哈哈,主要就是數(shù)學(xué)庫、工具庫等等)。而聲音引擎也留了接口,很好擴(kuò)展了。

            然后,現(xiàn)在正在做GUI部分,主要還是說說GUI的渲染部分吧。GUI其中有兩個(gè)我認(rèn)為比較關(guān)鍵的地方,其一是渲染文字部分,其二是渲染窗口部分。下面說說我的做法
            文字渲染部分:
            我的做法是使用FreeType2讀取TTF文件,然后當(dāng)要渲染文字的時(shí)候,看哪個(gè)用到的文字就load哪個(gè)文字,先獲得這個(gè)文字的大小,然后在貼圖中找到一個(gè)空閑的區(qū)域(我的貼圖大小是512×512,也可以設(shè)置),然后blt到貼圖中,真正渲染的時(shí)候就把這個(gè)貼圖紋理坐標(biāo)貼到兩個(gè)三角形上就完成了一個(gè)文字的渲染了。
            在貼圖中找空閑區(qū)域我有個(gè)比較特別的做法,就是每個(gè)需要渲染的文字維護(hù)一個(gè)RefCount引用計(jì)數(shù),例如一個(gè)屏幕里10個(gè)“我”字,那么“我”的引用計(jì)數(shù)就是10,當(dāng)“我”字不需要再渲染的時(shí)候(引用計(jì)數(shù)為0),此文字的貼圖區(qū)域就可以被其他文字所覆蓋。
            窗口渲染部分:

            class?GAMECORE_EXPORT?GUIRenderCache
            {
            protected:
            ????
            //?不允許顯式創(chuàng)建,只可以繼承
            ????GUIRenderCache(void);
            public:
            ????
            virtual?~GUIRenderCache(void);

            ????
            //?添加到渲染隊(duì)列
            ????void?AddCache(const?GUIRenderQuad&?quad)
            ????
            {
            ????????m_vtGUIRenderQuad.insert(GUIRenderQuadPtr(
            new?GUIRenderQuad(quad)));
            ????}



            ????
            //?渲染需要Cache隊(duì)列
            ????void?RenderCache(void)
            ????
            {
            ????????
            //?從新Cache隊(duì)列
            ????????if(m_bDirty)
            ????????
            {
            ????????????ClearCacheList();
            ????????????DoCache();
            ????????????m_bDirty?
            =?false;
            ????????}

            ????????
            //?添加到渲染器
            ????????for(VectorGUIRenderQuad::const_iterator?iter?=?m_vtGUIRenderQuad.begin()?;?iter?!=?m_vtGUIRenderQuad.end()?;?iter?++)
            ????????
            {
            ????????????Systems::GetSingleton().GetGUIRendererSystem()
            ->AddCache(*iter);
            ????????}

            ????}

            ????
            //?清空cache隊(duì)列
            ????void?ClearCacheList(void)
            ????
            {
            ????????m_vtGUIRenderQuad.clear();
            ????}

            protected:

            ????
            //?Cache需要渲染的項(xiàng)目
            ????virtual?void?DoCache(){};

            ????VectorGUIRenderQuad?m_vtGUIRenderQuad;????
            //?渲染隊(duì)列
            ????bool?m_bDirty;?//?需要重新Cache需要渲染的項(xiàng)目
            }
            ;



            每個(gè)Window(一個(gè)Window是一個(gè)抽象類,Static/Button/Dialog等等所有窗口都是繼承于Window)都繼承于GUIRenderCache對象,當(dāng)窗口的某個(gè)屬性(如WindowText)改變時(shí),就會(huì)把m_bDirty標(biāo)記設(shè)置成true。每幀渲染的時(shí)候調(diào)用RenderCache。那么如果窗口的屬性沒有改變,就只需要把m_vtGUIRenderQuad的東西渲染出來;如果屬性改變了(即m_bDirty為true),則調(diào)用DoCache,由繼承類(如Static/Button等)改寫這個(gè)函數(shù),計(jì)算貼圖坐標(biāo)、三角形坐標(biāo)等等東西都放在這個(gè)函數(shù)里。總的來說,Cache之后速度會(huì)比Cache之前快起碼一半以上。

            好了,睡覺去了。
            posted on 2006-12-19 21:30 李錦俊(mybios) 閱讀(4904) 評論(10)  編輯 收藏 引用 所屬分類: 3D引擎開發(fā)

            Feedback

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2006-12-20 02:00 P.Dragon
            偶正在學(xué)習(xí)游戲編程,可以交個(gè)朋友嗎??
            偶的blog. http://www.tws8.net  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2006-12-20 12:12 LOGOS
            支持,慢慢來,能寫些東西總比我什么都不寫的好  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2006-12-21 00:27 李錦俊
            To LOGOS:
            謝謝支持。
            寫點(diǎn)東西只是為了筆記一下,以后自己看著也可以一笑置之。呵呵


            TO P.Dragon:
            你的Blog不錯(cuò),收藏了,呵呵
            可以加我
            QQ:30743734
            MSN:Mybios@hotmail.com
            EMain:mybios@21cn.com  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2006-12-22 09:33 HAOIW
            我現(xiàn)在也在學(xué)習(xí)編程
            可以交個(gè)朋友嗎??
            我的QQ 490082378
            郵箱 haoiw@126.com  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2006-12-22 15:30 小山日志
            偶也在學(xué)游戲編程,現(xiàn)期是看看2D的,在寫“潛艇大戰(zhàn)”^_^  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2006-12-22 20:30 李錦俊
            @小山日志
            祝你成功:)  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2007-03-05 19:10 csdn.wuyazhe(我的寶貝叫阿刺)
            不錯(cuò)。交流一下,QQ:32610303  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2007-10-16 17:41 littlewater
            這么一說估計(jì)做一個(gè)LIST就比較方便了嘛……
            我以前也做了一個(gè)簡單的窗口機(jī)制,不過做到一半沒有繼續(xù)了……
              回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2008-01-04 09:52 小七
            你好 我也是在研究3D的gui部分,很喜歡做游戲,希望以后大家一起研究,QQ354257900  回復(fù)  更多評論
              

            # re: 這段時(shí)間開發(fā)3D引擎啊,正在做GUI部分 2008-02-01 16:27 tanglehua
            很高興看到這篇文章,受益良多.本人也想做游戲方面的開發(fā),這是我的郵箱tlhad@126.com,可以多交流一下.  回復(fù)  更多評論
              

            午夜精品久久久久久99热| 国产一级做a爰片久久毛片| 久久AV无码精品人妻糸列| 久久精品黄AA片一区二区三区| 日本道色综合久久影院| 亚洲а∨天堂久久精品9966| 久久国产精品无码一区二区三区 | 欧美精品一区二区精品久久| 人妻无码久久精品| 亚洲国产精品久久久久| 天天躁日日躁狠狠久久| 久久影视国产亚洲| 国产精品成人99久久久久 | 亚洲精品午夜国产va久久| 国产欧美久久一区二区| A级毛片无码久久精品免费| 狠狠综合久久综合中文88| 国产精品久久自在自线观看| 性欧美丰满熟妇XXXX性久久久| 欧美粉嫩小泬久久久久久久| 伊人色综合久久天天| 99久久99这里只有免费的精品| 久久久久久久久久久久久久| 欧美一级久久久久久久大| 国产精品美女久久久网AV| 久久99国产精品久久久| 成人综合伊人五月婷久久| 亚洲va国产va天堂va久久| 伊人久久综合精品无码AV专区| 亚洲日本va午夜中文字幕久久| 久久青青草原精品国产软件| 国产精品九九久久免费视频| 亚洲国产精品久久久久婷婷软件| 99久久久精品免费观看国产| 久久久精品国产sm调教网站 | 日韩精品久久无码中文字幕| 18禁黄久久久AAA片| 怡红院日本一道日本久久| 久久久国产精品福利免费| 情人伊人久久综合亚洲| 91精品国产综合久久香蕉|