• <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ī)圖形學(xué) SQL Server

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

            公告

            QQ:30743734
            EMain:mybios@qq.com

            常用鏈接

            留言簿(16)

            我參與的團(tuán)隊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 371288
            • 排名 - 67

            最新評論

            閱讀排行榜

            評論排行榜

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

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

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

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

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

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



            ????
            //?渲染需要Cache隊列
            ????void?RenderCache(void)
            ????
            {
            ????????
            //?從新Cache隊列
            ????????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隊列
            ????void?ClearCacheList(void)
            ????
            {
            ????????m_vtGUIRenderQuad.clear();
            ????}

            protected:

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

            ????VectorGUIRenderQuad?m_vtGUIRenderQuad;????
            //?渲染隊列
            ????bool?m_bDirty;?//?需要重新Cache需要渲染的項目
            }
            ;



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

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

            Feedback

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

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

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


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

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

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

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

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

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

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

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

            久久精品人妻一区二区三区| 久久久精品国产免大香伊| 久久香综合精品久久伊人| av色综合久久天堂av色综合在 | 久久精品午夜一区二区福利| 2021久久精品国产99国产精品| 精品久久久久久中文字幕人妻最新| 无码国内精品久久人妻蜜桃| 精品久久久久久成人AV| 久久国产乱子伦精品免费午夜| 无码任你躁久久久久久老妇| 国产激情久久久久久熟女老人| 久久99国产精一区二区三区| 久久天天躁狠狠躁夜夜2020| 亚洲愉拍99热成人精品热久久 | 久久精品国产2020| 久久久综合九色合综国产| 久久精品国产2020| 久久伊人五月天论坛| 成人免费网站久久久| 亚洲伊人久久成综合人影院 | 中文字幕乱码久久午夜| 丁香狠狠色婷婷久久综合| 国产精品久久久久免费a∨| 国产精品久久久久乳精品爆 | 99国内精品久久久久久久| 无遮挡粉嫩小泬久久久久久久 | 久久亚洲美女精品国产精品| 精品国产青草久久久久福利 | 中文字幕久久精品无码| 欧美麻豆久久久久久中文| 国产成人久久精品区一区二区| 亚洲人成电影网站久久| 久久久久亚洲AV成人网人人网站| 国产韩国精品一区二区三区久久| 亚洲国产日韩欧美综合久久| 国产精品内射久久久久欢欢| 日本久久久精品中文字幕| 久久综合给合久久国产免费| 人妻少妇久久中文字幕| 亚洲国产精品无码久久98|