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

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 370171
            • 排名 - 67

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            前段時(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),于是我簡(jiǎ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對(duì)象,當(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) 閱讀(4903) 評(píng)論(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ù)  更多評(píng)論
              

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

            # 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ù)  更多評(píng)論
              

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

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

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

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

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

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

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

            97香蕉久久夜色精品国产 | 亚洲综合婷婷久久| 狠狠干狠狠久久| 久久久久国产精品麻豆AR影院| 伊人色综合久久天天人守人婷| 色综合久久无码中文字幕| 久久国产精品-国产精品| 一本综合久久国产二区| 99国产欧美精品久久久蜜芽 | 久久国产免费| 亚洲AV日韩AV天堂久久| 国产毛片久久久久久国产毛片| 久久综合亚洲鲁鲁五月天| 国产精品成人无码久久久久久 | 久久99精品国产麻豆| 久久久这里有精品中文字幕| 久久ww精品w免费人成| 偷窥少妇久久久久久久久| 99久久成人18免费网站| 国产精品美女久久久久| 精品国产乱码久久久久久人妻 | 久久精品国产91久久综合麻豆自制 | 久久精品国产半推半就| 伊人久久大香线蕉av不卡| 日韩电影久久久被窝网| 久久综合狠狠综合久久激情 | 久久精品国产2020| 色综合久久久久综合99| 99久久亚洲综合精品成人| 91精品国产91久久久久福利| 奇米影视7777久久精品| 中文字幕日本人妻久久久免费 | 久久亚洲国产成人精品无码区| 久久99国产精品久久99| 99久久99久久精品免费看蜜桃| 亚洲午夜久久久久妓女影院| 久久久久久免费视频| 中文字幕人妻色偷偷久久| 亚洲中文字幕无码久久精品1 | 99久久免费国产特黄| 99精品久久久久中文字幕|