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

            戰(zhàn)魂小筑

            討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開(kāi)源項(xiàng)目:https://github.com/davyxu

               :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評(píng)論 :: 0 Trackbacks

            #

            在Windows XP下, 在任何磁盤(pán)里,創(chuàng)建一個(gè)文件,再?gòu)?fù)制粘貼,就會(huì)生成一個(gè)新的拷貝.文件名中有個(gè)詞叫:"復(fù)件"

            但是感覺(jué)這個(gè)詞貌似是學(xué)多了英語(yǔ)后的人硬拼出來(lái)的,時(shí)間長(zhǎng)了,大家習(xí)慣了這個(gè)叫法,這個(gè)詞也就出來(lái)了.

            在Windows Vista或者Windows 7里,這個(gè)詞變成了 "副本", 估計(jì)是微軟也發(fā)現(xiàn)"復(fù)件"這個(gè)詞不是很正規(guī)或者讓人接受而換的

            :)

            posted @ 2010-04-16 17:20 戰(zhàn)魂小筑 閱讀(1756) | 評(píng)論 (1)編輯 收藏

            OGRE 中的3種層次實(shí)現(xiàn)多線程渲染的文檔:

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

             

            ATI有關(guān)多線程效率提升的游戲比較及一些tips

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

            posted @ 2010-04-15 16:06 戰(zhàn)魂小筑 閱讀(1774) | 評(píng)論 (1)編輯 收藏

            從Windows XP SP2通過(guò)Windows Updates 的SP3推送更新到SP3并不是真正意義上的SP3. 至少發(fā)現(xiàn)有以下兼容問(wèn)題:

            1. RenderMonkey 1.82 在這種升級(jí)版本下會(huì)啟動(dòng)會(huì)報(bào)MSXML錯(cuò)誤

            2. VS2010 安裝完成后, C#和WPF工程都無(wú)法正常創(chuàng)建,打開(kāi)vs2008及老的sln,project都會(huì)出現(xiàn)卡死,甚至崩潰的錯(cuò)誤. 估計(jì)也是MSXML的問(wèn)題

             

             

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

            posted @ 2010-04-14 15:53 戰(zhàn)魂小筑 閱讀(1636) | 評(píng)論 (2)編輯 收藏

            名稱(chēng):Chrome Stylist

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

            安裝好后,在StyleList的選項(xiàng)里找到Styles選項(xiàng)卡,將里面其他的刪除,新建一個(gè)Style,點(diǎn)上All Site,在黑色欄里填入一個(gè)你喜歡的名字,在css內(nèi)容里填入

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

            點(diǎn)擊下面的save存盤(pán),刷新其他網(wǎng)站,地址欄最右邊出現(xiàn)彩虹的圖標(biāo)就表示工作正常了

            have fun, :)

            posted @ 2010-04-11 12:49 戰(zhàn)魂小筑 閱讀(2498) | 評(píng)論 (1)編輯 收藏

            假設(shè)我們有3個(gè)工程及其工程類(lèi)型:

            CORE              DLL

            ENGINE           DLL

            GAME             EXE

            D3DRENDER      DLL

            其中D3DRENDER是GAME動(dòng)態(tài)載入的,其需要鏈接CORE,ENGINE

            這是一個(gè)很常見(jiàn)的模式,但是不好的是,因?yàn)镃ORE和ENGINE均是DLL,代碼中的Symbol都被導(dǎo)出才可使用。任何人使用DEPENDENCE工具就可以將DLL中引用的東西查看的清楚,雖然這不至于造成技術(shù)泄漏,但從速度和DLL大小來(lái)說(shuō)都是不劃算的。

            現(xiàn)在很多游戲主exe一般都是10M+甚至20M+的大exe,這都是使用靜態(tài)鏈接而成。但是對(duì)代碼結(jié)構(gòu)也必須做出一定的調(diào)整。所有工程必須都是靜態(tài)庫(kù),這樣才能保證像CORE這樣的靜態(tài)庫(kù)中的全局/靜態(tài)變量不至于被鏈接2份而造成內(nèi)存段邏輯錯(cuò)誤。

            當(dāng)然,使用全靜態(tài)庫(kù)還需要注意一點(diǎn):所有的lib都是在最后的game工程里來(lái)做鏈接。

            posted @ 2010-04-07 16:08 戰(zhàn)魂小筑 閱讀(2224) | 評(píng)論 (2)編輯 收藏

            轉(zhuǎn)載自 獨(dú)立游戲中文論壇

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

            posted @ 2010-04-07 10:36 戰(zhàn)魂小筑 閱讀(2818) | 評(píng)論 (4)編輯 收藏

            RenderTarget完成后,開(kāi)始模擬OGRE的Compositor。

            OGRE的Compositor其實(shí)就是用于解決繪制PostEffect的,簡(jiǎn)單的說(shuō),就是一種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
                        }
                    }
                }
            }

             

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

            而一個(gè)繪制步驟又分別定義:

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

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

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

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

            輸入方式有2中:紋理及場(chǎng)景

            我們可以使用一個(gè)回調(diào)來(lái)對(duì)一個(gè)繪制步驟提供繪制輸入

            繪制效果就是一大堆的Shader,這些shader都是基于一個(gè)quad來(lái)做的,也就是一個(gè)矩形,使用變換后的頂點(diǎn)和一個(gè)紋理坐標(biāo)作為頂點(diǎn)定義

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

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

            當(dāng)然,如果步驟比較多和復(fù)雜時(shí),RT之間跟寄存器一樣,可以反復(fù)使用

            YR7HEX8VAB[67GPOWLNPIBA

            顯示茶壺法線的場(chǎng)景加上 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腳本,還在慢慢加強(qiáng)功能,希望能有一天達(dá)到OGRE的Compositor功能
            posted @ 2010-04-01 18:56 戰(zhàn)魂小筑 閱讀(2853) | 評(píng)論 (1)編輯 收藏

            如果讓你的引擎結(jié)構(gòu)支持多個(gè)RenderTarget繪制及多個(gè)Viewport?這里是我的簡(jiǎn)單設(shè)計(jì):

            同樣適用我的文本設(shè)計(jì)圖標(biāo)準(zhǔn)(+為包含,  <為派生)

             

            RenderTexture

                  RenderTarget

                      <ScreenTarget(引擎啟動(dòng)時(shí),初始化屏幕大小的Viewport)

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

                           +Camera

                           +Viewport

             

            以下是多View繪制的類(lèi)XNA偽代碼

             

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

             

             

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

            RenderView.SwitchRenderTarget(stage, RenderTarget)
            {
                // 保存繪制前的RT
                PreTarget = Device.GetRenderTarget()
                // 設(shè)置為當(dāng)前的RT
                Device.SetRenderTarget( RenderTarget )
             
                // 更新RT攝像機(jī)
                RenderTarget.UpdateCamera()    
                
                // 清空RT
                Device.Clear()
             
                // 繪制回調(diào)
                RenderTarget.OnRender( )
             
                // 恢復(fù)之前的RT
                Device.SetRenderTarget( PreTarget  );
            }
            posted @ 2010-03-29 18:16 戰(zhàn)魂小筑 閱讀(2200) | 評(píng)論 (0)編輯 收藏

            完成自己的shader系統(tǒng)后,翻出之前寫(xiě)過(guò)的代碼中發(fā)現(xiàn)有一個(gè)地方很奇怪

            我的矩陣定義跟OGRE的沒(méi)什么區(qū)別

                    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時(shí),卻必須轉(zhuǎn)置下,才能得到正確的結(jié)果

            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;
                }

            貌似是跟左右手這個(gè)惡心的東西有關(guān)系

            回看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);

            絲毫無(wú)需轉(zhuǎn)置矩陣,Effect接口中也提供有SetMatrixTranspose這類(lèi)方法。所以排除內(nèi)部有自動(dòng)轉(zhuǎn)置的嫌疑。

            詢(xún)問(wèn)過(guò)野豬這個(gè)問(wèn)題,野豬答曰:"轉(zhuǎn)置后傳輸至需要傳3個(gè)vector, 最后一個(gè)是[0 0 0 1]”

            有達(dá)人知道的,可以指點(diǎn)下迷津 :)

            posted @ 2010-03-17 11:08 戰(zhàn)魂小筑 閱讀(2694) | 評(píng)論 (2)編輯 收藏

            自己保留這篇文章:

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

             

            很好的程序員自測(cè)的文章

            posted @ 2010-03-12 22:22 戰(zhàn)魂小筑 閱讀(372) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共26頁(yè): First 14 15 16 17 18 19 20 21 22 Last 
            亚洲一本综合久久| 成人国内精品久久久久一区| 99久久婷婷免费国产综合精品| 久久伊人精品一区二区三区| 亚洲国产成人精品女人久久久| 97精品伊人久久久大香线蕉| 久久久久综合网久久| 青青草国产精品久久久久| 精品久久久久久综合日本| 日本免费一区二区久久人人澡| 99久久国产热无码精品免费| 久久婷婷国产麻豆91天堂| 麻豆精品久久精品色综合| 伊人久久大香线蕉影院95| 久久久99精品成人片中文字幕| 久久久久久一区国产精品| 国内高清久久久久久| 久久男人Av资源网站无码软件| 久久99精品久久久久久动态图| 亚洲一区中文字幕久久| 日韩美女18网站久久精品| 国产A级毛片久久久精品毛片| 久久久久女人精品毛片| 久久久久久噜噜精品免费直播| 久久久这里只有精品加勒比| 日韩精品无码久久久久久| 亚洲综合久久综合激情久久| 久久久久久国产a免费观看黄色大片| 久久精品aⅴ无码中文字字幕不卡| 99久久精品免费看国产一区二区三区 | 99re这里只有精品热久久| 国产精品伦理久久久久久| 久久久久亚洲av成人网人人软件 | 99久久精品免费看国产| 囯产极品美女高潮无套久久久| 成人精品一区二区久久| 亚洲国产精品无码久久久蜜芽| 久久久久亚洲AV成人网人人软件| 久久综合九色综合网站| 偷窥少妇久久久久久久久| 青青青伊人色综合久久|