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

            戰魂小筑

            討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

            #

            在Windows XP下, 在任何磁盤里,創建一個文件,再復制粘貼,就會生成一個新的拷貝.文件名中有個詞叫:"復件"

            但是感覺這個詞貌似是學多了英語后的人硬拼出來的,時間長了,大家習慣了這個叫法,這個詞也就出來了.

            在Windows Vista或者Windows 7里,這個詞變成了 "副本", 估計是微軟也發現"復件"這個詞不是很正規或者讓人接受而換的

            :)

            posted @ 2010-04-16 17:20 戰魂小筑 閱讀(1758) | 評論 (1)編輯 收藏

            OGRE 中的3種層次實現多線程渲染的文檔:

            http://isdlibrary.intel-dispatch.com/vc/1632/Threading_OGRE3D.pdf

             

            ATI有關多線程效率提升的游戲比較及一些tips

            http://developer.amd.com/assets/ATIMThread.pdf

            posted @ 2010-04-15 16:06 戰魂小筑 閱讀(1776) | 評論 (1)編輯 收藏

            從Windows XP SP2通過Windows Updates 的SP3推送更新到SP3并不是真正意義上的SP3. 至少發現有以下兼容問題:

            1. RenderMonkey 1.82 在這種升級版本下會啟動會報MSXML錯誤

            2. VS2010 安裝完成后, C#和WPF工程都無法正常創建,打開vs2008及老的sln,project都會出現卡死,甚至崩潰的錯誤. 估計也是MSXML的問題

             

             

            解決方法:安裝Windows 更高版本或者直接使用原生Windows SP3

            posted @ 2010-04-14 15:53 戰魂小筑 閱讀(1641) | 評論 (2)編輯 收藏

            名稱:Chrome Stylist

            地址:https://chrome.google.com/extensions/detail/pabfempgigicdjjlccdgnbmeggkbjdhd?hl=zh-cn

            安裝好后,在StyleList的選項里找到Styles選項卡,將里面其他的刪除,新建一個Style,點上All Site,在黑色欄里填入一個你喜歡的名字,在css內容里填入

            html, body, * {
            font-family: "微軟雅黑" ! important;
            }

            點擊下面的save存盤,刷新其他網站,地址欄最右邊出現彩虹的圖標就表示工作正常了

            have fun, :)

            posted @ 2010-04-11 12:49 戰魂小筑 閱讀(2503) | 評論 (1)編輯 收藏

            假設我們有3個工程及其工程類型:

            CORE              DLL

            ENGINE           DLL

            GAME             EXE

            D3DRENDER      DLL

            其中D3DRENDER是GAME動態載入的,其需要鏈接CORE,ENGINE

            這是一個很常見的模式,但是不好的是,因為CORE和ENGINE均是DLL,代碼中的Symbol都被導出才可使用。任何人使用DEPENDENCE工具就可以將DLL中引用的東西查看的清楚,雖然這不至于造成技術泄漏,但從速度和DLL大小來說都是不劃算的。

            現在很多游戲主exe一般都是10M+甚至20M+的大exe,這都是使用靜態鏈接而成。但是對代碼結構也必須做出一定的調整。所有工程必須都是靜態庫,這樣才能保證像CORE這樣的靜態庫中的全局/靜態變量不至于被鏈接2份而造成內存段邏輯錯誤。

            當然,使用全靜態庫還需要注意一點:所有的lib都是在最后的game工程里來做鏈接。

            posted @ 2010-04-07 16:08 戰魂小筑 閱讀(2230) | 評論 (2)編輯 收藏

            轉載自 獨立游戲中文論壇

            UDK是unrealengine develpoment kit 的縮寫,簡單來說就是大名鼎鼎的虛幻3引擎的免費商業版本.不過虛幻3畢竟還是4年前的dx9的入門級引擎,在商業上取得
            巨大成功,技術上也顯得落后.目前Epic想榨干虛幻3的最后一點潛力,于是干脆發布了這個免費版本.任何人都可以用UDK開發游戲,但是如果游戲牟利的話每年還是要向
            Epic交納一定數量的技術授權費用的.先不管這個,還是來看看它的官方視頻教程吧.
              [attach]44[/attach]
            鏈接如下:  
            http://udn.epicgames.com/Three/VideoTutorials.html
            一共5個教程 從引擎配置介紹開始,到關卡和人物編輯器,以及最后一個完整的小游戲的制作,對于入門來說完全足夠了.
            視頻說的還比較詳細,聽力不好的同學可以對照下開發文檔 http://www.udk.com/documentation 里面基本說的很詳細.
            最后附上UDK的下載地址: March 2010 UDK Beta (548 MB .exe) 
            好了,UDK對于初學者來說還是比較適合的.對于游戲的開發人員來說引擎的整體架構還是很值得學習的.希望你學的愉快.

            posted @ 2010-04-07 10:36 戰魂小筑 閱讀(2824) | 評論 (4)編輯 收藏

            RenderTarget完成后,開始模擬OGRE的Compositor。

            OGRE的Compositor其實就是用于解決繪制PostEffect的,簡單的說,就是一種RenderTarget的流程控制腳本

            這是OGRE compositor文件的片段

            compositor Bloom
            {
                technique
                {
                    // Temporary textures
                    texture rt_output target_width target_height PF_R8G8B8
                    texture rt0 target_width_scaled 0.25 target_height_scaled 0.25 PF_R8G8B8
                    texture rt1 target_width_scaled 0.25 target_height_scaled 0.25 PF_R8G8B8
             
                    target rt_output
                    {
                        // Render output from previous compositor (or original scene)
                        input previous
                    }
             
                    target rt0
                    {
                        // Start with clear texture
                        input none
                        // Horizontal blur pass
                        pass render_quad
                        {
                            // Renders a fullscreen quad with a material
                            material Ogre/Compositor/BrightPass2
                            input 0 rt_output
                        }
                    }
             
                    target rt1
                    {
                        // Start with clear texture
                        input none
                        // Horizontal blur pass
                        pass render_quad
                        {
                            // Renders a fullscreen quad with a material
                            material Ogre/Compositor/BlurV
                            input 0 rt0
                        }
                    }
             
                    target rt0
                    {
                        // Start with clear texture
                        input none
                        // Horizontal blur pass
                        pass render_quad
                        {
                            // Renders a fullscreen quad with a material
                            material Ogre/Compositor/BlurH
                            input 0 rt1
                        }
                    }
             
                    target_output
                    {
                        // Start with clear output
                        input none
                        // Draw a fullscreen quad
                        pass render_quad
                        {
                            // Renders a fullscreen quad with a material
                            material Ogre/Compositor/BloomBlend2
                            input 0 rt_output
                            input 1 rt0
                        }
                    }
                }
            }

             

            大概我們知道,一個Compositor分為資源定義與繪制步驟(target xxx)

            而一個繪制步驟又分別定義:

            1. (輸入)繪制的是什么東西?

            2. (效果)繪制成什么樣子?

            3. (輸出)往哪里繪制?

            輸出方式在這個例子有2種:紋理(RT)和屏幕

            輸入方式有2中:紋理及場景

            我們可以使用一個回調來對一個繪制步驟提供繪制輸入

            繪制效果就是一大堆的Shader,這些shader都是基于一個quad來做的,也就是一個矩形,使用變換后的頂點和一個紋理坐標作為頂點定義

            不過這里是不需要做vertexshader的,僅僅ps足矣。

            繪制的最后,是將前面繪制的RT(紋理)混合起來

            當然,如果步驟比較多和復雜時,RT之間跟寄存器一樣,可以反復使用

            YR7HEX8VAB[67GPOWLNPIBA

            顯示茶壺法線的場景加上 Blur 的PostEffect

            <?xml version="1.0" encoding="gb2312" ?>
            <Compositor name = "bloom" >
              <Resource>
                <RenderTarget name ="rt_source" size="screenquad" />
                <RenderTarget name ="rt0" size="screenquad" />
                <RenderTarget name ="rt1" size="screenquad" />
              </Resource>
              <Step target="rt_source">
                <Geometry type ="callback" callback = "rt_input"/>
              </Step>
              <Step target="rt0">
                <Geometry type = "screenquad"/>
                <Effect name ="material\blurH.xml">
                  <Texture name ="mTexture" value ="rt_source" />
                </Effect>
              </Step>
              <Step target="rt1">
                <Geometry type = "screenquad"/>
                <Effect name ="material\blurV.xml">
                  <Texture name ="mTexture" value ="rt_source" />
                </Effect>
              </Step>
              <Step>
                <Geometry type = "screenquad"/>
                <Effect name ="material\combine.xml">
                  <Texture name ="mTexture1" value ="rt0" />
                  <Texture name ="mTexture2" value ="rt1" />
                </Effect>
              </Step>
            </Compositor>
            這是我的引擎里的Compositor腳本,還在慢慢加強功能,希望能有一天達到OGRE的Compositor功能
            posted @ 2010-04-01 18:56 戰魂小筑 閱讀(2856) | 評論 (1)編輯 收藏

            如果讓你的引擎結構支持多個RenderTarget繪制及多個Viewport?這里是我的簡單設計:

            同樣適用我的文本設計圖標準(+為包含,  <為派生)

             

            RenderTexture

                  RenderTarget

                      <ScreenTarget(引擎啟動時,初始化屏幕大小的Viewport)

                      +RenderView (對于一個RT,可以是屏幕,可以是紋理RT,所以可以擁有 1~n個切分視圖 )

                           +Camera

                           +Viewport

             

            以下是多View繪制的類XNA偽代碼

             

            Engine.Run()
            {
                Device.Clear()
             
                // 保存當前全屏Viewport
                ScreenViewport = Device.CurrentViewport
             
                Device.BeginScene()    
             
                // 遍歷當前屏幕RT下的所有View
                foreach RenderView in ScreenRT
                {
                    // 未激活的View不用繪制
                    if RenderView not active then continue
             
                    // 將View對應的Viewport提交到設備        
                    RenderView.CommitViewport()
             
                    // 渲染回調
                    foreach RenderEventListener in RenderEventListenerList
                    {
                        RenderEventListener.OnRenderFrame()
                    }
                }
             
                Device.EndScene()
             
                 Device.Present()
             
                Device.CurrentViewport = ScreenViewport // 恢復全屏viewport
            }

             

             

            以下是RT間嵌套繪制的偽代碼:

            RenderView.SwitchRenderTarget(stage, RenderTarget)
            {
                // 保存繪制前的RT
                PreTarget = Device.GetRenderTarget()
                // 設置為當前的RT
                Device.SetRenderTarget( RenderTarget )
             
                // 更新RT攝像機
                RenderTarget.UpdateCamera()    
                
                // 清空RT
                Device.Clear()
             
                // 繪制回調
                RenderTarget.OnRender( )
             
                // 恢復之前的RT
                Device.SetRenderTarget( PreTarget  );
            }
            posted @ 2010-03-29 18:16 戰魂小筑 閱讀(2203) | 評論 (0)編輯 收藏

            完成自己的shader系統后,翻出之前寫過的代碼中發現有一個地方很奇怪

            我的矩陣定義跟OGRE的沒什么區別

                    union 
                    {
                        struct
                        {
                            float m11, m12, m13, m14;
                            float m21, m22, m23, m24;
                            float m31, m32, m33, m34;
                            float m41, m42, m43, m44;
                        };
                        float m[4][4];
                    };

               乘法也跟OGRE的一模一樣,但在將view及project乘好的矩陣送給HLSL時,卻必須轉置下,才能得到正確的結果

            mSkinnedEffect.mMatrix.mValue = (camera.mViewMatrix * camera.mProjectMatrix).Transpose();

            shader:

            float4 localpos = mul(In.Position, skinTransform);

             

                OGRE中有這么一段代碼及注釋:

                const Matrix4& AutoParamDataSource::getProjectionMatrix(void) const
                {
                    if (mProjMatrixDirty)
                    {
                        // NB use API-independent projection matrix since GPU programs
                        // bypass the API-specific handedness and use right-handed coords
                        if (mCurrentRenderable && mCurrentRenderable->getUseIdentityProjection())
                        {
                            // Use identity projection matrix, still need to take RS depth into account.
                            RenderSystem* rs = Root::getSingleton().getRenderSystem();
                            rs->_convertProjectionMatrix(Matrix4::IDENTITY, mProjectionMatrix, true);
                        }
                        else
                        {
                            mProjectionMatrix = mCurrentCamera->getProjectionMatrixWithRSDepth();
                        }
                        if (mCurrentRenderTarget && mCurrentRenderTarget->requiresTextureFlipping())
                        {
                            // Because we're not using setProjectionMatrix, this needs to be done here
                            // Invert transformed y
                            mProjectionMatrix[1][0] = -mProjectionMatrix[1][0];
                            mProjectionMatrix[1][1] = -mProjectionMatrix[1][1];
                            mProjectionMatrix[1][2] = -mProjectionMatrix[1][2];
                            mProjectionMatrix[1][3] = -mProjectionMatrix[1][3];
                        }
                        mProjMatrixDirty = false;
                    }
                    return mProjectionMatrix;
                }

            貌似是跟左右手這個惡心的東西有關系

            回看DirectXSDK中提供的BasicHLSL例子

                    mWorld = g_mCenterWorld * *g_Camera.GetWorldMatrix();
                    mProj = *g_Camera.GetProjMatrix();
                    mView = *g_Camera.GetViewMatrix();
             
                    mWorldViewProjection = mWorld * mView * mProj;
             
                    V( g_pEffect->SetMatrix( "g_mWorldViewProjection", &mWorldViewProjection ) );

            shader:

            Output.Position = mul(vAnimatedPos, g_mWorldViewProjection);

            絲毫無需轉置矩陣,Effect接口中也提供有SetMatrixTranspose這類方法。所以排除內部有自動轉置的嫌疑。

            詢問過野豬這個問題,野豬答曰:"轉置后傳輸至需要傳3個vector, 最后一個是[0 0 0 1]”

            有達人知道的,可以指點下迷津 :)

            posted @ 2010-03-17 11:08 戰魂小筑 閱讀(2698) | 評論 (2)編輯 收藏

            自己保留這篇文章:

            http://static.icybear.net/[CN]Programmer%20competency%20matrix.htm

             

            很好的程序員自測的文章

            posted @ 2010-03-12 22:22 戰魂小筑 閱讀(375) | 評論 (0)編輯 收藏

            僅列出標題
            共26頁: First 14 15 16 17 18 19 20 21 22 Last 
            无码精品久久一区二区三区| 久久免费小视频| 婷婷综合久久狠狠色99h| 人妻精品久久久久中文字幕一冢本| 热RE99久久精品国产66热| 久久婷婷五月综合色99啪ak| 亚洲综合久久久| 国内精品久久久久久久久电影网| 亚洲成色WWW久久网站| 精品视频久久久久| 久久不见久久见免费视频7| 久久最新免费视频| 99久久精品国产一区二区| 国产精品久久久久aaaa| 久久精品国产亚洲αv忘忧草| 亚洲国产精品久久久久久| 亚洲欧美精品一区久久中文字幕 | 性欧美大战久久久久久久久 | 少妇被又大又粗又爽毛片久久黑人 | 超级97碰碰碰碰久久久久最新| 国产精品无码久久综合| 久久久久久国产精品美女| 久久91精品久久91综合| 亚洲va久久久噜噜噜久久天堂| 久久er热视频在这里精品| 久久人人爽人人爽人人爽| 免费国产99久久久香蕉| 亚洲va久久久噜噜噜久久男同 | 亚洲中文久久精品无码| 久久强奷乱码老熟女网站| 久久国产免费观看精品| 久久99久久99精品免视看动漫| 亚洲级αV无码毛片久久精品| 青春久久| 中文字幕无码久久精品青草 | 欧美性大战久久久久久| 99久久精品影院老鸭窝| 99久久精品国产高清一区二区 | 精品久久久久久国产潘金莲| 国产三级久久久精品麻豆三级| 亚洲AV无码久久|