• <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 - 4,comments - 6,trackbacks - 0
            http://www.gamedev.net/community/forums/topic.asp?topic_id=412504

            No... In true, PVWp is wrong because P,V and W (as Direct3D defines) were created to satisfy the [row vector]*[matrix] multiplying order. In other words, the content of a transformation matrix could be different depending on the multiplying rule.

            For example, consider a translation matrix:

            For a [row vector]*[matrix] multiplying order, it is described as:
            1 0 0 0
            0 1 0 0
            0 0 1 0
            x y z 1
            

            For a [matrix]*[column vector] multiplying order, it is described as:
            1 0 0 x
            0 1 0 y
            0 0 1 z
            0 0 0 1
            

             


            I don't know the math details you're attempting to work out... I'm really bad at formal math theory. I do however know the D3D details of what's going on. Perhaps if I explain what D3D is doing, it'll help you.

            Matrix in memory normally.
            11 12 13 14
            21 22 23 24
            31 32 33 34
            41 42 43 44

            Normally a vector * matrix such a D3DXMatrixTransform will do:
            outx = vec dot (11,21,31,41)
            outy = vec dot (12,22,32,42)
            outz = vec dot (13,23,33,43)
            outw = vec dot (14,24,34,44)

            When you give a matrix to a shader, it is transposed, which offers a small optimization for most matrices, which I'll explain in a bit. After it's transposed, it's stored in 4 constant registers (or 3... I'll get to that).

            c0 = 11,21,31,41
            c1 = 12,22,32,42
            c2 = 13,23,33,43
            c3 = 14,24,34,44

            Next, in the shader performing a "mul(vec,mat)" will do this:
            v0 = input register containing position
            r0 = temp register
            dp4 r0.x, v0, c0 // (r0.x = v0 dot c0)
            dp4 r0.y, v0, c1
            dp4 r0.z, v0, c2
            dp4 r0.w, v0, c3

            As you can see, this is the same as D3DXMatrixTransform. Why does D3D perform a hidden transpose? To save precious constant space. You can declare your matrix as float4x3 and the transformation becomes:
            dp4 r0.x, v0, c0
            dp4 r0.y, v0, c1
            dp4 r0.z, v0, c2
            mov r0.w, (some constant holding 1)

            Any time the matrix isn't a projection, ie: for world, worldview, view, and bones especially, you can drop a constant without affecting the results, as it's always a (0,0,0,1) vector. Back in shader 1.1 with only 96 constants, it was a big deal. If you had 20 bone matrices, that would be either 80 or 60 constants. Personally, I'd take the 60, leaving more room for lights, fog, texture transforms, etc. It also takes time to upload all those useless (0,0,0,1) vectors to the video card, which is another small savings.

            posted on 2010-07-20 11:25 MDnullWHO 閱讀(516) 評論(0)  編輯 收藏 引用
            中文成人久久久久影院免费观看| 色婷婷综合久久久久中文| 久久99精品国产| 久久精品无码一区二区三区免费| 久久乐国产精品亚洲综合| 99精品国产综合久久久久五月天| 久久精品国产亚洲AV无码偷窥| 久久狠狠一本精品综合网| 久久99热这里只有精品国产| 精品久久久久久中文字幕| 欧美一区二区久久精品| 人人狠狠综合久久亚洲婷婷| 欧美亚洲国产精品久久久久| 国产美女久久久| 亚洲国产另类久久久精品小说| 四虎国产精品免费久久5151 | 热99re久久国超精品首页| 精品国产日韩久久亚洲| 国产成人精品久久一区二区三区av| 亚洲国产日韩欧美久久| 狠狠综合久久综合中文88| 久久久一本精品99久久精品66| 久久久久久A亚洲欧洲AV冫| 亚洲一本综合久久| 久久久久久久久无码精品亚洲日韩 | 亚洲国产精品久久| 久久久久亚洲av成人网人人软件| 99久久精品国产一区二区| 久久免费高清视频| 97久久精品国产精品青草| 久久精品人人槡人妻人人玩AV | 狠狠88综合久久久久综合网| 偷偷做久久久久网站| 久久精品国产AV一区二区三区| 久久本道久久综合伊人| 亚洲狠狠久久综合一区77777 | 成人亚洲欧美久久久久| 久久最近最新中文字幕大全| 久久精品嫩草影院| 激情综合色综合久久综合| 久久久久国产精品嫩草影院|