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

            游戲開發 C++ Cocos2d-x OpenGL DirectX 數學 計算機圖形學 SQL Server

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

            公告

            QQ:30743734
            EMain:mybios@qq.com

            常用鏈接

            留言簿(16)

            我參與的團隊

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 370201
            • 排名 - 67

            最新評論

            閱讀排行榜

            評論排行榜

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

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

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

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

            class?GAMECORE_EXPORT?GUIRenderCache
            {
            protected:
            ????
            //?不允許顯式創建,只可以繼承
            ????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對象,當窗口的某個屬性(如WindowText)改變時,就會把m_bDirty標記設置成true。每幀渲染的時候調用RenderCache。那么如果窗口的屬性沒有改變,就只需要把m_vtGUIRenderQuad的東西渲染出來;如果屬性改變了(即m_bDirty為true),則調用DoCache,由繼承類(如Static/Button等)改寫這個函數,計算貼圖坐標、三角形坐標等等東西都放在這個函數里。總的來說,Cache之后速度會比Cache之前快起碼一半以上。

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

            Feedback

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

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

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


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

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

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

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

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

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

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

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

            欧美精品九九99久久在观看| 久久精品国产影库免费看| 国产99久久久国产精品~~牛| 久久久久久狠狠丁香| 亚洲伊人久久成综合人影院| 亚洲午夜久久久久久久久久| 99久久精品免费看国产| 欧美日韩精品久久久免费观看| 国产麻豆精品久久一二三| 性做久久久久久免费观看| 2020久久精品国产免费| 久久中文字幕人妻熟av女| 国产精品国色综合久久| 亚洲日韩欧美一区久久久久我| 精品国产乱码久久久久久1区2区| 久久伊人亚洲AV无码网站| www.久久热.com| 欧美丰满熟妇BBB久久久| 青青草国产97免久久费观看| 国内精品人妻无码久久久影院| 一级A毛片免费观看久久精品| 国产一级持黄大片99久久| 日韩精品久久久久久免费| 久久福利片| 精品久久久久久无码国产| 国产精品久久精品| 国产精品国色综合久久| 久久亚洲精品无码AV红樱桃| 伊人色综合久久天天网| 一本色综合久久| 久久午夜福利无码1000合集| 99久久精品这里只有精品| 久久99热精品| 亚洲欧美日韩精品久久| 丁香久久婷婷国产午夜视频| 精品久久久久久综合日本| 国产亚洲精久久久久久无码 | 久久777国产线看观看精品| 久久精品国产第一区二区三区| 亚洲国产一成人久久精品| 久久久久久久人妻无码中文字幕爆|