• <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>
            posts - 72,  comments - 4,  trackbacks - 0
             


            stratagus的ai規(guī)則:

            stratagus這個高仿war2的程序會分時間段來調用ai的處理函數(shù)。它的ai規(guī)則主要是用一些ai函數(shù)來定義,
            比如說某方電腦可以定義對應的ai規(guī)則函數(shù),記得是通過類似aidefine, aineed, aiwait, aiattack的函數(shù)進行ai規(guī)則的定義,比如說aineed 兵種 個數(shù),然后aiwait會陰塞直到程序ai處理到達條件才繼續(xù)執(zhí)行后面的ai規(guī)則函數(shù),這就可以非常方便的定義各種電腦的ai行為,比如說生產(chǎn)出aineed一些農(nóng)民,然后等待,夠出就會aineed兵營之類,等待夠了就aineed多少個兵,aiattack開始嘗試出兵攻擊玩家.

            另外這個游戲的迷霧作法是以地圖塊記錄陣營迷霧表,地圖塊的unit進出會進行刷新,而迷霧簡單地用預處理好的迷霧圖塊(作法跟地表紋理一樣的)進行拼接渲染,這種作法跟當前war3的作法基本一致,只是war3的迷霧圖塊是實時更新的,迷霧可以動態(tài)圓滑過渡(在之前一文章分析過了),而這個迷霧圖則只能按格子跳動,不能圓滑漸變。

             

            另外存下一下以前的跟蹤流程,以備用。

                                      stratagus流程

            一。 腳本Start Game按鈕調用 RunMap(mapname)中執(zhí)行程序中StartMap(map)
            二。 程序中CreateGame后GameMainLoop中游戲循環(huán)處理.

            //---------------------------------------------------------------------------
            一。祥細:
            1. 腳本初始:
               程序通過加載stratagus.lua進行初始設置, 并裝載其它腳本,通過
               DefineUnitType(..)來定義各種類型unit的屬性

            2. 渲染初始:
               InitVideo()

            3. 聲音初始:
               InitSound() && InitMusic()

            4. 加載字體:
               LoadFonts()

            5. 顯示splash:
               ShowTitleScreens

            6. 單位管理器初始:
               UnitManager.Init(); // Units memory management

            7. 界面加載:
               PreMenuSetup();     // Load everything needed for menus

            8. 界面:
               在MenuLoop()中加載guichan.lua,這會運行RunProgramStartMenu() //如果是編輯器則是另一函數(shù)
               創(chuàng)建WarMenu界面,上面Single Player Game按鈕綁定RunSinglePlayerGameMenu()函數(shù),
               響應后里面再創(chuàng)建另一個WarMenu界面,并綁定Start Game函數(shù)為
               RunMap(mapname),該函數(shù)會調用InitGameVariables遍歷調用初始化函數(shù)表InitFuncs[]()中每個函數(shù).
               最后調用程序的StartMap(map)游戲開始

            //---------------------------------------------------------------------------
            二。祥細:
            1. CreateGame中:
               a. 迷霧初始
                  InitVisionTable
               b. .smp地圖初始:
                  執(zhí)行.smp地圖(lua文件來的, 就兩行調用DefinePlayerTypes()定義PlayerType和PresentMap()函數(shù)設置地圖信息)
                  DefinePlayerTypes("person","nobody","nobody","nobody","nobody","person") //neutral||computer||person||nobody||rescue-passive||rescue-active
                  PresentMap("Mysterious Dragon Isle", 2, 128, 128, 1)
               c. 玩家初始:
                  遍歷16個玩家進行CreatePlayer創(chuàng)建(從Player[]取出), ThisPlayer=Players[NetLocalPlayerNumber];
                  應用上述b中設置的PlayerType進行team設置(中立=0,電腦=1,玩家=2+i, PlayerRescuePassive及PlayerRescueActive=2+i,)

               b. InitUnitTypes
                 初始type->BuildingRules, type->stats[player](stats->Costs,stats->Variables)

               c. .sms地圖加載:
                 執(zhí)行.sms地圖(lua文件來的),其中
            用類似以下方法設置幾個玩家資源等信息(如下第一個參數(shù)0表示玩家號, 本地圖有0-5個玩家)
            SetStartView(0, 80, 30)
            SetPlayerData(0, "Resources", "gold", 2000)
            SetPlayerData(0, "Resources", "wood", 1500)
            SetPlayerData(0, "Resources", "oil", 1000)
            SetPlayerData(0, "RaceName", "orc")
            SetAiType(0, "wc2-air-attack")
            SetStartView(1, 0, 0)
            SetPlayerData(1, "Resources", "gold", 2000)
            ...


            然后LoadTileModels("scripts/tilesets/wasteland.lua")(這個函數(shù)同等于直接執(zhí)行l(wèi)ua腳本)
            在wasteland.lua中執(zhí)行了DefineTileset(...)來設置一堆地形中各圖塊資源位置
            并調用BuildTilesetTables()程序進行處理, 接著調用 Load("scripts/scripts.lua")這個會據(jù)當前玩家的playertype來調用不同的ui.lua(human/org)


            之后是一堆
            SetTile(32, 0, 0, 0)
            SetTile(35, 1, 0, 0)
            ...
            作用是HP for walls/ Wood Regeneration

            最后是通過
            unit = CreateUnit("unit-oil-patch", 15, {7, 5})
            這個會據(jù)第一個參數(shù)來找到對應的type并創(chuàng)建出unit對象,然后刷新unit所處在地塊的UnitFieldFlags用于尋路,
            以及MapMarkUnitSight刷新視野, 視野的做法有點怪,他是根據(jù)角色視野來刷新地塊MapField->Visible[屬方]是否可見,
            然后再從unit所在位置的地塊的visible[]來刷新unit->visible[屬方],刷新時判斷
            上次和今次變化,從而得知unit是不是從屬方player視野中進出.


            SetResourcesHeld(unit, 20000)
            unit = CreateUnit("unit-gold-mine", 15, {66, 6})
            SetResourcesHeld(unit, 35000)
            ...
            來創(chuàng)建一些資源

                d.  Map.Init();這個只調用了InitFogOfWar()

                e. PlayersInitAi()      
                   遍歷16方玩家,產(chǎn)生查詢對應aitype信息(有aiscript函數(shù))設置給PlayerAi對象,并將對象綁定給該玩家.
             
                f. InitTriggers()
                   用于注冊條件函數(shù)以及要執(zhí)行的函數(shù)。當前調用SinglePlayerTriggers()腳本函數(shù),只注冊了勝利或失敗條件函數(shù)及對應執(zhí)行處理函數(shù)

                g. InitPathfinder()


            2. GameMainLoop中:


            主要是分時段來執(zhí)行ai處理函數(shù)等,具體不寫了。。。


             

            posted @ 2011-06-24 16:40 flipcode 閱讀(450) | 評論 (0)編輯 收藏

            之前臨時看了下mygui,發(fā)一下跟蹤的信息,以備參考:
            一。 創(chuàng)建每個widget, 用所得皮膚進行初始化,
            一個皮膚可以由子皮膚以及子控件組合成。
            1. 創(chuàng)建皮膚對應的一個貼圖并創(chuàng)建皮膚下所有子皮膚(存入mSubSkinChildo數(shù)組中, 它們都是使用此相同貼圖),并加到mSubSkinChild以及mDrawItems中。
            2. 然后設置該皮膚對應的屬性值。
            3. 創(chuàng)建該皮膚所有子控件(存入widget中的mWidgetChildSkin數(shù)組中)

            二。將所創(chuàng)建的控件加入到對應的layernode中:   
            LayerManager::getInstance().attachToLayerNode(_layer, widget);
            其中會遍歷widget中所有mDrawItems(子皮膚),加到對應的layernode中,
            當前子皮膚(SubSkin)使用該widget中的mTexture來創(chuàng)建mRenderItem(在layernode中有映射表按textrue來歸類, 其中文字放入mFirstRenderItems,其它放入mSecondRenderItems)
            而mRenderItem中也有一個mDrawItems數(shù)組,用來存入SubSkin的. 同時mRenderItem中有mVertexBuffer,當渲染時,會遍歷所有mDrawItems,將它們收集到mVertexBuffer中進行批次渲染.


            三。渲染:
            遍歷所有mLayerNodes進行渲染
            1. 遍歷mFirstRenderItems和mSecondRenderItems中所有RenderItem進行渲染
               在RenderItem中遍歷mDrawItems,調用其doRender()方法,將頂點渲染到mVertexBuffer中.

            2. 渲染mChildItems中所有


            四。 關于文字的渲染:
            simpletext是一個renderitem

            simpletext從edittext中派生
            edittext::updateRawData會使用mTextView生成貼圖uv等數(shù)據(jù)
            每個RenderItem提供一個vertext buf,供其中的數(shù)據(jù)進行填充批次渲染


            文字的渲染由于是一次讀入的(老外就是不考慮中文),如果中文修改范圍直接用的話則加載時必定卡。。。
            而且中文字多,一般不好全部一次存入貼圖中,只能使用貼圖緩存方式處理。

            posted @ 2011-06-24 15:47 flipcode 閱讀(1077) | 評論 (0)編輯 收藏
            2d游戲中可以做到局部更新,3d游戲中這種處理已經(jīng)絕跡了,最近還是嘗試弄了下,
            3d游戲中界面的局部更新問題

            要在3d游戲中使用界面系統(tǒng)的局部更新,需要先準備一塊畫布,然后界面局部更新時刷新到這塊畫布上,這樣每幀只畫畫布
            雖然之前有想過這樣的方法,但一直沒去弄過,最近弄了下,碰到的問題在于使用的帶透明信息的文字渲染上, 如下:
            最近有人再次討論了這個問題,為了說明這個問題我又重新整理了下,新整理如下:
            3d游戲中界面臟矩形碰到的alpha排序問題:
            3d游戲中界面臟矩形碰到的alpha排序問題:
            界面是一張半透明底圖,上面畫一些半透明的字,
            這里測試我們假設只用一個顏色分量(值范圍為0-255)
            如下:
            scene = 100; // 場景,
            tex = 150;   // 貼圖
            text = 200;  // 文字
            a1 = 0.2f;   // 貼圖alpha
            a2 = 0.3f;   // 文字alpha

            下面對正常渲染方式和臟矩形渲染方式分別測試結果:
            【法一】。正常順序渲染方法:
            dest = (scene*(1-a1)+tex*a1)*(1-a2)+text*a2
            = (100*0.2+150*0.8)*0.3+200*0.7
            =42+140
            =182

            【法二】。臟矩形的渲染到貼圖方法:
            目標貼圖rt清為全黑0,alpha為1

            1. 先將tex渲染到目標貼圖
            clr1 = rt*(1-a1)+tex*a1 
                 = tex*a1 
                 = 30
            alpha = a1
                  = 0.2f

            2. 然后再渲染文字:
            clr2 = clr1*(1-a2)+text*a2
                 = 30*0.7f+200*0.3f
                 = 81
            alpha = alpha * a2 
                  = 0.2*0.3
                  = 0.6

            3. 最后將其和場景混合:
            dest = scene*(1-alpha) + clr2*alpha
            =100*0.4 + 81*0.6
            =40+48.6
            =88.6
            posted @ 2011-06-24 11:51 flipcode 閱讀(257) | 評論 (0)編輯 收藏
            最近為公司寫了個性能優(yōu)化曲線工具, 可配置,如圖:


            查了下war3場景同屏面數(shù)在4000-10000面左右, 可以看到單機下war3穩(wěn)定限幀在15到16毫秒(也即60幀左右), 以下是一個簡陋版本載圖:

            同時發(fā)現(xiàn)war3的迷霧似乎4格一個16*16像素的動態(tài)圖(樹陰影也動態(tài)做到上面), 例如:64*64大小地圖分成8*8個fog塊,
            下圖是我載了些圖手動還原迷霧大致如下:




            另外三國的曲線(部分渲染消耗,每一格為1ms, 測試機器比較爛,是集成顯卡)

            另外show下山邊為公司寫的靜態(tài)性能分析工具, 用在cpu的消耗測試還是比較有用的,當然渲染消耗由于涉汲runtime/driver的緩存以及gpu處理等原因是測試不準的.
            posted @ 2011-06-24 09:09 flipcode 閱讀(185) | 評論 (0)編輯 收藏
            ,另外難得今天有空又擺弄了下以前寫的地形引擎,順手載一下圖:





            posted @ 2011-06-18 19:28 flipcode 閱讀(182) | 評論 (0)編輯 收藏

            一。世界分布:
            map中最多有64*64個block(即block[4096])
            每個block對應一個terrain(大小約為533*533)分成16*16個tile(即tile[256], 每個tile大小約為33*33)
            最后每個tile分成8*8個CELL(大小為4*4左右),每個CELL中間附帶一個點,用于
            在渲染時,如果是在tilelod內(nèi)則這個8*8個cell中間加一個點細分繪制,否則不用繪制這細分的三角形.

            二。Tile渲染:  
               每個tile最多可存4層地表紋理,
               當渲染tile時,看有幾層地表就設置對應的不同層的shader,并賦與對應地表貼圖以及對應一張alpha map進行渲染
               求出地表base位置到角色位置距離,看是否超出tile的lod距離,超出則用粗格子,否則用細格子進行繪制。

            posted @ 2010-12-27 09:13 flipcode 閱讀(271) | 評論 (0)編輯 收藏

             

            小場景測試:反折射水,實時陰影,高光+泛光,splatting地表




            posted @ 2010-12-26 00:11 flipcode 閱讀(151) | 評論 (0)編輯 收藏


            男人撐過10秒minigame游戲...,周五晚上一時興致幾個小時弄的測試程序

            地表刷:

            posted @ 2010-12-16 22:29 flipcode 閱讀(201) | 評論 (0)編輯 收藏

            //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            // UI的渲染:
            //         flipcode@msn.com
            //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

            一。批次渲染:
            1. 在界面上的3d模型渲染及特效需要每幀渲染到貼圖上再當UI來畫,否則將會打亂渲染狀態(tài)

            2. 控件及文字按渲染順序生成z值,然后將不透明的按貼圖打包,先批次畫不透明的控件和文字,再關掉z write按排序畫非透明控件和文字.
               優(yōu)化方案:
                  由于透明的控件和文字很可能沒法批次畫(除非它們順序畫時都在同一貼圖上),所以約定所有控件和文字只用alpha test方式
               而不能用alpha blend方式,也就是說控件和文字只能用colorkey(為了效率忍痛去掉類freetype用alpha blend產(chǎn)生的一些自然過渡的效果)
               并且盡量讓所有控件所用圖片都作成一兩張圖上。(文字則是程序為每種字體創(chuàng)建大概兩張貼圖cache, 并先緩存一些最常用的字)
             
            二。去掉UI重疊部份的渲染:
            1. 合并所有控件矩形ui_rect為一個全局多邊形集g_merge_rgn(并集)

            2. 從上往下順序將所有控件矩形ui_rect與g_merge_rgn分別作交集測試, 成功則將交集存回UI控件ui_render_rect_rgn,
               并且如果控件為非透明(控件已在上述“批次渲染”約定為非透明但可有colorkey)時將全局g_merge_rgn減去該ui_render_rect_rgn交集

            3. 從下往上順序遍歷所有所有控件并用控件自己的矩形ui_render_rect_rgn畫出控件

            三。臟矩形渲染:
              有了上述的"去掉UI重疊部份的渲染", 這步就容易了,只要在渲染時判斷一下該控件是否更新過, 如果更新過則將更新過的rect與該ui_render_rect_rgn交集出新的rgn來畫.

            四。關于渲染可能出現(xiàn)的邊線問題:
              一般是紋理在縮放過渡時使用linear采樣方式而控件使用UV尋址貼圖中小格子塊產(chǎn)生的(可在作圖時將格子塊象素外擴一圈,或者程序將UV內(nèi)縮一圈來處理)

            五。最后提下,要先渲染UI,再渲染場景,這樣來避免無效的ps, 另外UI固定部分在渲染場景時可用viewport去掉。

            //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            // 關于漢字輸入相關:
            //         flipcode@msn.com
            //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

            一。創(chuàng)建dialog模式設備:

               為了不用自己渲染輸入法框,也只好犧牲點性能,使用這種非真正獨占的模式的設備。

            二。接收輸入漢字

             1。可以直接使用windows消息的WM_CHAR,漢字高位是大于127的(有符號char<0)自己處理判斷組合一下即可。

               2。也可以使用IME的來處理

            三。漢字長度

             漢字有等寬字和非等寬字(普遍),非等寬字計算長度比較麻煩,需從頭遍歷。。。

            四。非unicode漢字的截斷處理

             這個也比較麻煩,需從頭遍歷,如果使用unicode就沒這個問題

            五。漢字的顯示

             需要貼圖緩存,再批次顯示

            六。表情符號混顯:

             關于表符號混顯問題主要有兩點,一個是排版(具體處理就略過了),一個是表情動畫處理

             表情動畫可以簡單的使用cximage讀取解開各幀再整合到一張紋理上,按幀播放顯示。

             

            七。輸入法定位:

             由于輸入法的處理一般是在消息回調函數(shù)里得到目標wnd句柄,然后定位到這個wnd位置上,如果游戲中不使用windows控件的話,輸入法沒法自動定位到自定義的。只能靠用戶自己拖動。有一個簡單的處理是創(chuàng)建一個不用于顯示的假控件在對應位置讓輸入法得以定位。。。(魔域這個網(wǎng)游真的很邪惡,里面全部使用mfc控件,只是渲染使用directx來接管。。。)

            八。輸入法充許與關閉:

                估計很多人會碰到這個問題,就是只在輸入框打開時才充許有輸入法,如下處理

                 m_hImc = ImmAssociateContext(hWnd,   NULL); 來關閉,再使用ImmAssociateContext(hWnd, m_hImc);   來打開


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/flipcode/archive/2009/06/22/4287894.aspx

            posted @ 2010-11-03 23:15 flipcode 閱讀(253) | 評論 (0)編輯 收藏

            hon的歷史:

            http://zh.wikipedia.org/wiki/S2_Games
            S2 Games是一個專注開發(fā)電腦游戲的游戲開發(fā)機構,由Marc "Maliken" DeForest投資,設在加利福尼亞的

            Rohnert Park。他們的第一作Savage: The Battle for Newerth于2003年夏天發(fā)行,是歷史上第一個RTTS——

            即時戰(zhàn)略射擊游戲。續(xù)作 Savage 2: A Tortured Soul,2008年1月16日首先放出Windows版本。最新作品

            Heroes of Newerth是一個仿照魔獸爭霸III著名場景DotA制作的游戲。

            引擎:
            Silverback
            K2

            大事記
            2004,3個S2 Games成員離開并成立Offset Software
            2006,S2 Games把與零售版本相同的Savage: The Battle for Newerth在自己網(wǎng)站上免費釋放
            2008,年初S2 Games發(fā)布Savage 2: A Tortured Soul;年末設立帳號制度,出現(xiàn)免費帳號
            2009,beta測試Heroes of Newerth
            2009,啟動與Mod DB協(xié)作的活動


            關于Offset Software
            http://www.j2megame.org/index.php/content/view/1230/121.html
            Intel收購游戲廠商Offset Software 
            2008-02-27
              我們目前見到的畫面驚人的游戲引擎中,除了Epic的“虛幻引擎3”,還有就是Crytek的“Cryengine 2”

            ,實際上還有一家公司也曾經(jīng)宣布過自己有畫面驚人的游戲引擎,并在當時引起了不小的爭論。這家公司就是

            Offset Software。目前,在Offset Software公司的官方主頁上,已經(jīng)正式公布了他們已被Intel收購的消息


              2005年左右,Offset Software曾公布過他們獨自研發(fā)的“Offset Engine”引擎,在當時不但光影效果驚

            人,再加上支持圖形化的使用界面、64位HDR光影特性以及其他先進技術,確實營造出了不錯的效果。而且通

            過“Offset Engine”非常直觀化的操作界面,使用者不需要掌握復雜的程序語言,僅需鼠標就可以開啟多種

            特效,使得游戲開發(fā)的過程過程變得異常簡便。

              而《Project offset》則是他們近期開發(fā)的具有奇幻背景的FPS游戲,據(jù)悉Intel收購Offset Software極

            有可能是為了強化自家的3D技術,以期提高將來Intel顯卡的游戲性能。

            關于《Project offset》:
            http://pc.yezizhu.com/news/200903/8035_2.shtml
            奇幻FPS《project offset》展示精彩物理效果發(fā)表時間:2009-03-28 作者:abao 來源:未知查看熱點評論 
              Offset Software史詩式奇幻FPS新作《project offset》在此次GDC會展中公開了一段視頻演示,名字命

            為“Meteor”(流星),展示了精彩的物理效果。該作有可能將會是PC獨占,因為已經(jīng)被Intel收購用來展示

            Larrabee,不過目前還未確認是否取消Xbox 360版本。
             

            hon初步分析(flipcode@msn.com)

            一。物件
            1.紋理:
            a. 一般是兩層貼圖:
               第一層是物件的基本貼圖(256*256),第二層各種物件總是相同的一個奇怪的縷空黑白圖(256*256),
            中間是個黑色形狀圖塊(對應的alpha全白,其它全灰).

            b. 另外有些是3層貼圖:
               第一層是物件的基本貼圖(256*256),第二層各種物件總是相同的一個奇怪的縷空黑白圖(256*256),
            第3層是個team color圖(黑白圖,白色部分混上顏色)

            c. 此外有些物件帶光暈面片(用貼圖*頂點色渲染)
            例如: 塔邊上有一個個發(fā)亮星星/光暈(就是一個個面片,然后用星狀顏色圖/中間發(fā)亮的黑白圖來跟面片頂點

            色相乘)

            2. 面數(shù):
              建筑600左右面(一個dip畫完,其它一些發(fā)光面片再另外按貼圖一起畫)


            3. 渲染:
            物件并不批次渲染,只是按貼圖排序渲染。(但是看到物件上的發(fā)亮相同貼圖的面片會合成一個批次,這可能是

            美術直接作成一個mesh的)

            另外hon的懸崖是直接使用地面網(wǎng)格做的,懸崖對應地表格子可以水平移動并同時拉高,貼圖使用懸崖貼圖,這樣看起來也還可以。

            好處是跟地表一致,渲染處理過渡自然,省面數(shù)。

            二。角色:
            1.紋理:
              一般是兩張紋理,一張是物體本色圖,另一張是team color圖(黑白圖,白色部分混上顏色)
              另外在高效果顯示時,會有法線圖。

            2. 面數(shù):
              兵800左右面(一個dip畫完)
              英雄1200左右(一次dip畫完, 包括手上武器)

            3. 渲染:
              物件并不批次渲染,只是按貼圖排序渲染。
              低效果時只是受漫射光,環(huán)境光,平行光影響, 如下:

              clr=貼圖顏色*頂點色*光照(光照=ambient+dot(N.L)*suncolor);

              高效果時會用法線圖進行光照運算,同時有高光計算.
              另外高效果時似乎還有點光源支持以及一個云貼圖,自遮擋陰影?沒具體分析.

              對于team color是這樣的:

              貼圖顏色 = 原圖色 * (teamcolor圖*teamcolor)
              即SetTexture( Texture0 = 原圖色, Texture1 =teamcolor圖); 然后只draw一次完成.


            以上看來hon的角色非常簡單,是只有一個帶骨架的模型,不可換裝.

            三。陰影:
              使用shadowmap動態(tài)陰影,在我機器上(ati hd3200集成顯卡)比較消耗,打開時fps30-40, 關閉時60-70

            四。地表:
            1. 紋理:
            地表貼圖,最高時使用512*512,32bit,mip為9級

            2. 渲染:
            地表分批次渲染,每次最大不超過1089個頂點, 每批次對應兩層紋理,通過頂點alpha混合過渡(頂點比較密)

            五。界面:
            1. 紋理:
            血條的貼圖由黑底,紅條,黃條,綠條組成

            2.渲染:
            血條的渲染,先畫黑底框,再畫紅條,然后畫黃條,最后畫綠條.當血漸漸少了,紅黃綠3個條同時由右向左縮

            小(紅黃綠alpha漸少,紅少得快,黃其次,紅不變或少得慢), 黑框保持不縮放。

            注:hon的這個血條并不批次渲染,而是每次渲染一個血條的一層.由底向上渲染,渲染完再換一個血條渲染.

            渲染完所有血條之后,這才開始渲染普通界面。(alpah blend方式下使用貼圖*頂點顏色渲染)

            六。后期處理:
               后期渲染,使用全屏泛光,類似nvglow,只是不指定物件alpha通道渲染,而是全屏泛光.
            渲染順序, 先物件,再地表,然后是后期處理


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/flipcode/archive/2010/04/06/5453714.aspx

            posted @ 2010-11-03 23:14 flipcode 閱讀(417) | 評論 (0)編輯 收藏
            僅列出標題
            共8頁: 1 2 3 4 5 6 7 8 
            少妇精品久久久一区二区三区| 国内精品久久久久久久久| 久久久久九九精品影院| 国产精品青草久久久久福利99| 国产一区二区精品久久凹凸| 久久综合视频网| 99久久无色码中文字幕| 国产真实乱对白精彩久久| 日韩va亚洲va欧美va久久| 久久无码高潮喷水| 日本精品久久久中文字幕| 狠狠色丁香久久婷婷综合蜜芽五月 | 久久国产精品一区二区| 久久午夜福利电影| 99久久99这里只有免费费精品| 国产成人无码精品久久久久免费| 香蕉久久永久视频| 一本久久久久久久| 日韩精品久久久肉伦网站| 天天影视色香欲综合久久| 久久99精品国产99久久6男男| 国产精品一区二区久久精品涩爱| 亚洲国产精品久久久久婷婷软件| 亚洲国产精品无码久久久蜜芽 | 久久无码专区国产精品发布| 国产精品熟女福利久久AV| AAA级久久久精品无码片| 午夜人妻久久久久久久久| 亚洲午夜福利精品久久| 精品国产一区二区三区久久蜜臀| 久久国产亚洲精品无码| 亚洲精品美女久久久久99| 久久九九久精品国产免费直播| 久久久久一本毛久久久| 亚洲一本综合久久| 亚洲一区中文字幕久久| 久久久久久综合一区中文字幕 | 日韩影院久久| 日韩电影久久久被窝网| 国产69精品久久久久APP下载| 亚洲伊人久久综合影院|