青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

戰(zhàn)魂小筑

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

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

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

我的矩陣定義跟OGRE的沒什么區(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時,卻必須轉(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;
    }

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

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

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

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

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

posted on 2010-03-17 11:08 戰(zhàn)魂小筑 閱讀(2706) 評論(2)  編輯 收藏 引用 所屬分類: 渲染 Shader 引擎

評論

# re: 討論:shader與矩陣轉(zhuǎn)置[未登錄] 2010-03-18 09:40 清風
OGRE使用的是列主矩陣,簡單說就是左乘列向量,而你在HLSL中的寫法是行向量左乘矩陣,自然需要轉(zhuǎn)置  回復  更多評論
  

# re: 討論:shader與矩陣轉(zhuǎn)置 2010-03-18 10:50 Goteet
ogre和opengl一樣用的列主矩陣吧  回復  更多評論
  

# re: 討論:shader與矩陣轉(zhuǎn)置 2010-07-02 16:03 ZealKing
行矩陣和列矩陣的區(qū)別吧

gl是右乘 列矩陣

dx是左乘 行矩陣  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日韩精品| 蜜桃av噜噜一区二区三区| 一区二区精品在线观看| 欧美国产激情二区三区| 亚洲人成网站色ww在线| 午夜精品久久久久久久99热浪潮 | 蘑菇福利视频一区播放| 国产欧美一区二区三区视频| 亚洲午夜精品视频| 亚洲精品视频二区| 欧美精品久久久久a| 亚洲黑丝在线| 亚洲第一色在线| 蜜桃久久av一区| 亚洲国产日韩欧美在线图片| 久久综合婷婷| 久久久久久噜噜噜久久久精品 | 亚洲精品在线视频观看| 欧美高清在线视频观看不卡| 久久综合久久综合九色| 亚洲国产精品成人| 欧美成人一区二免费视频软件| 久久精品欧洲| 亚洲国产mv| 亚洲国产高潮在线观看| 欧美国产亚洲另类动漫| 一区二区三区高清在线| 一区二区三区国产| 国产欧美一级| 免费看精品久久片| 欧美国产一区在线| 亚洲午夜精品久久| 欧美一区二区三区在线视频| 狠狠做深爱婷婷久久综合一区| 狼人天天伊人久久| 欧美激情在线| 亚洲欧美日韩一区在线观看| 午夜免费在线观看精品视频| 激情综合久久| 亚洲精品欧美一区二区三区| 国产精品视频99| 老司机午夜免费精品视频| 另类亚洲自拍| 一区二区日韩欧美| 欧美在线一区二区| 亚洲精选一区二区| 亚洲欧美日韩中文在线制服| 亚洲电影在线观看| 一本到高清视频免费精品| 国自产拍偷拍福利精品免费一| 亚洲盗摄视频| 国产区亚洲区欧美区| 欧美国产专区| 国产欧美日韩不卡| 亚洲精品社区| 尤物yw午夜国产精品视频| 日韩一级在线| 亚洲国产网站| 欧美亚洲免费高清在线观看| 99re6热只有精品免费观看| 亚洲欧美日韩国产一区二区三区| 亚洲国产精品一区二区www在线| 一区二区三区在线观看欧美| 亚洲欧美国产一区二区三区| 国产一区二区三区四区老人| 亚洲国产天堂网精品网站| 国产女人水真多18毛片18精品视频| 欧美国产大片| 韩国一区二区三区在线观看| 一区二区三区四区国产| 亚洲激情视频网| 欧美在线啊v| 亚洲欧美日韩中文视频| 欧美国产三级| 欧美激情第三页| 狠狠久久亚洲欧美专区| 亚洲综合视频一区| 亚洲性感激情| 欧美日韩国产在线播放| 欧美激情精品久久久久久黑人 | 亚洲国产导航| 欧美在线视频全部完| 午夜精品久久久久99热蜜桃导演| 欧美另类极品videosbest最新版本| 久久在线播放| 国产色爱av资源综合区| 亚洲一区二区三区在线| 亚洲女ⅴideoshd黑人| 欧美日韩免费一区二区三区| 欧美刺激性大交免费视频| 精品999成人| 久久大香伊蕉在人线观看热2| 久久激情久久| 国产在线观看91精品一区| 欧美一区日本一区韩国一区| 久久精品女人| 国产一区二区三区四区hd| 久久国产精品久久久久久久久久| 久久久精品999| 狠狠综合久久| 欧美承认网站| 99在线精品视频| 校园春色综合网| 国产午夜精品理论片a级探花 | 91久久极品少妇xxxxⅹ软件| 久久久久国产精品一区| 欧美.www| 99热在这里有精品免费| 欧美三区视频| 欧美一级久久久| 欧美国产免费| 亚洲视频精品在线| 国产小视频国产精品| 久久综合999| 99精品视频免费观看| 欧美中文字幕久久| 在线免费精品视频| 欧美日韩免费在线| 亚洲欧美视频一区| 欧美福利电影网| 亚洲一区二区视频在线| 国产亚洲一区二区三区在线播放| 久久精品观看| 亚洲人成在线观看网站高清| 欧美在线一级va免费观看| 亚洲国产第一页| 国产精品国产三级欧美二区| 久久精品盗摄| 一区二区三区 在线观看视频 | 国产精品久久久久久久久婷婷| 亚洲综合国产精品| 欧美大胆成人| 欧美一级午夜免费电影| 亚洲第一偷拍| 国产精品日韩精品欧美在线 | 激情小说另类小说亚洲欧美| 欧美久久久久| 久久国产视频网站| 99国产精品国产精品毛片| 久久综合伊人77777蜜臀| 亚洲午夜影视影院在线观看| 在线播放中文字幕一区| 国产精品久久久久久影视 | 国产日本亚洲高清| 欧美极品一区二区三区| 久久国产精品亚洲77777| 一本色道久久综合亚洲91| 美女亚洲精品| 久久精品日产第一区二区| 亚洲无线视频| 亚洲精品视频免费观看| 国产亚洲综合精品| 国产精品盗摄久久久| 欧美大片免费观看| 久久精品人人做人人综合| 亚洲综合国产精品| 一区二区福利| 亚洲精品视频在线看| 欧美激情第8页| 毛片一区二区三区| 久久狠狠久久综合桃花| 欧美一站二站| 亚洲欧美卡通另类91av| 亚洲作爱视频| 亚洲精品影视在线观看| 亚洲国产乱码最新视频| 亚洲第一精品夜夜躁人人爽| 狠狠爱www人成狠狠爱综合网| 国产精品一区视频网站| 欧美视频不卡| 欧美丝袜一区二区| 欧美午夜不卡影院在线观看完整版免费 | 久久久另类综合| 先锋影音国产精品| 亚洲欧美综合精品久久成人| 亚洲小说欧美另类婷婷| 亚洲一区二区免费在线| 亚洲小少妇裸体bbw| 亚洲欧美日韩一区| 欧美一区二区三区免费在线看| 亚洲欧美亚洲| 欧美一区二区视频网站| 久久国产毛片| 免费不卡在线视频| 欧美激情影院| 亚洲日本在线视频观看| 99精品欧美| 亚洲一区二区三区免费在线观看| 亚洲在线成人| 久久国产欧美精品| 免费影视亚洲| 欧美日韩视频一区二区三区| 国产精品v欧美精品v日韩| 国产欧美日韩在线观看| 伊人久久大香线| 亚洲欧洲精品成人久久奇米网| 一区二区不卡在线视频 午夜欧美不卡在 | 99在线精品视频| 亚洲天堂av电影| 午夜日韩在线观看|