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

戰(zhàn)魂小筑

討論群:309800774 知乎關(guān)注: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;
    }

貌似是跟左右手這個惡心的東西有關(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);

絲毫無需轉(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)魂小筑 閱讀(2727) 評論(2)  編輯 收藏 引用 所屬分類: 渲染 Shader 引擎

評論

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

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

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

gl是右乘 列矩陣

dx是左乘 行矩陣  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲国产高清自拍| 亚洲一区二区三区激情| 亚洲美女在线国产| 久久嫩草精品久久久久| 久久九九有精品国产23| 国产精品卡一卡二卡三| 亚洲精品欧美极品| 亚洲日本电影在线| 久久综合久久美利坚合众国| 香蕉成人伊视频在线观看| 欧美日韩人人澡狠狠躁视频| 亚洲激情另类| 在线观看日韩精品| 久久久久天天天天| 久久久青草婷婷精品综合日韩 | 欧美有码在线视频| 午夜精品国产精品大乳美女| 欧美三级电影网| 亚洲另类一区二区| 欧美香蕉视频| 欧美成人精品激情在线观看| 国产三区二区一区久久| 亚洲免费婷婷| 欧美在线免费观看| 国产一区导航| 久久精品国产精品亚洲| 久久综合亚洲社区| 国语自产在线不卡| 久久久蜜桃一区二区人| 欧美ab在线视频| 亚洲国产婷婷香蕉久久久久久| 久久露脸国产精品| 欧美波霸影院| 亚洲精品网站在线播放gif| 欧美bbbxxxxx| 在线视频免费在线观看一区二区| 亚洲欧美激情四射在线日| 国产精品毛片a∨一区二区三区|国| 国产精品99久久不卡二区| 先锋影音一区二区三区| 国产一区二区三区日韩欧美| 久久久久国色av免费看影院| 亚洲国产成人av| 亚洲一区二区伦理| 国产精品资源在线观看| 欧美一区二区视频在线观看2020| 欧美h视频在线| 99热在这里有精品免费| 国产精品麻豆va在线播放| 欧美一级播放| 亚洲国产午夜| 午夜亚洲视频| 在线日韩av永久免费观看| 欧美精品一区二区三区视频| 亚洲天堂成人| 欧美 亚欧 日韩视频在线| 亚洲视频999| 好吊日精品视频| 欧美日韩高清不卡| 欧美一区二区高清在线观看| 欧美大片在线看| 午夜一级在线看亚洲| 亚洲国产精品精华液网站| 国产精品久久久久久久浪潮网站| 久久久久女教师免费一区| 午夜日韩电影| 国产精品久久久久久久久久免费看| 亚洲——在线| 欧美第一黄色网| 午夜精品久久99蜜桃的功能介绍| 一区二区三区在线免费播放| 欧美日韩国产在线看| 久久婷婷成人综合色| 在线一区亚洲| 亚洲黄色一区| 久久免费黄色| 亚洲午夜视频在线观看| 亚洲大胆女人| 国产精品夜色7777狼人| 欧美高清在线观看| 久久国产99| 亚洲亚洲精品在线观看 | 亚洲电影视频在线| 国产精品久久久一本精品| 免费不卡视频| 欧美一区二区在线播放| 91久久亚洲| 国产日韩欧美在线一区| 欧美人妖在线观看| 免费成人av在线看| 欧美诱惑福利视频| 亚洲女女女同性video| 亚洲精品国产精品国自产在线| 另类天堂av| 久久国产精品久久久久久| 亚洲午夜免费福利视频| 亚洲毛片一区| 亚洲伦理精品| 亚洲国产小视频在线观看| 国语自产精品视频在线看抢先版结局 | 国产精品成人va在线观看| 欧美激情第五页| 欧美激情麻豆| 欧美日韩不卡一区| 欧美电影在线播放| 欧美成人精品不卡视频在线观看| 欧美一区午夜视频在线观看| 欧美在线国产精品| 亚洲欧美一区二区原创| 亚洲免费视频观看| 亚洲综合色在线| 欧美在线观看视频在线| 久久er精品视频| 久久久五月婷婷| 另类av一区二区| 欧美粗暴jizz性欧美20| 欧美激情aⅴ一区二区三区| 欧美人交a欧美精品| 欧美日韩免费观看中文| 国产精品久久久久久久一区探花| 国产精品h在线观看| 国产欧美日韩三区| 韩国成人理伦片免费播放| 1000部精品久久久久久久久| 亚洲高清资源| 一区二区三区导航| 午夜精品一区二区三区电影天堂 | 亚洲第一黄色| 日韩视频免费观看| 亚洲女人天堂av| 久久久亚洲国产天美传媒修理工| 麻豆精品91| 国产精品久久久久久超碰| 国产亚洲高清视频| 亚洲精品1区2区| 亚洲性夜色噜噜噜7777| 久久精品视频一| 欧美成人午夜激情视频| 99精品国产热久久91蜜凸| 亚洲欧美日韩在线高清直播| 久久久久在线| 欧美色综合网| 一区二区三区无毛| 亚洲天堂成人在线视频| 久久久久久久成人| 亚洲精品一区二区三区av| 亚洲欧美视频在线| 亚洲第一网站| 亚洲第一综合天堂另类专| 日韩视频在线一区二区| 欧美一区二区精品| 欧美国产一区视频在线观看| 国产欧美视频一区二区| 亚洲黄色免费电影| 欧美一区二区三区视频在线 | 性做久久久久久| 美女主播精品视频一二三四| 国产精品乱码久久久久久| 亚洲国产精品视频一区| 久久成人一区| 亚洲精品国精品久久99热| 久久久青草婷婷精品综合日韩 | 99国产精品久久久| 久久精品二区三区| 国产伦理一区| 亚洲夜间福利| 久久综合狠狠综合久久综合88| 麻豆乱码国产一区二区三区| 99天天综合性| 欧美紧缚bdsm在线视频| 在线观看亚洲一区| 欧美一级久久久| 亚洲色图在线视频| 老鸭窝91久久精品色噜噜导演| 国产精品婷婷| 亚洲欧美日韩综合国产aⅴ| 亚洲精品国产日韩| 嫩模写真一区二区三区三州| 今天的高清视频免费播放成人 | 亚洲午夜激情| 亚洲经典在线| 欧美黄色一区| 最新亚洲视频| 欧美国产第一页| 久久在线视频| 亚洲国产另类久久久精品极度| 久久精品视频在线| 香港久久久电影| 国产主播一区二区三区| 久久久噜久噜久久综合| 欧美一区二区观看视频| 国产一区二区三区最好精华液| 亚欧成人在线| 欧美一级午夜免费电影| 国产乱码精品一区二区三区不卡| 午夜精品偷拍| 欧美在线二区| 在线观看一区二区精品视频|