• <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 閱讀(518) 評論(0)  編輯 收藏 引用
            国产成人久久精品一区二区三区| 青草国产精品久久久久久| 久久久无码一区二区三区| 日韩一区二区三区视频久久| 国内精品久久久久久中文字幕 | .精品久久久麻豆国产精品| 精品久久久久久久国产潘金莲| 少妇久久久久久被弄到高潮| 亚洲人成网站999久久久综合| 久久精品一区二区三区中文字幕| 久久精品无码专区免费| 美女久久久久久| 久久精品极品盛宴观看| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 日韩中文久久| 精品久久久久久中文字幕大豆网| 国产精品99久久久久久宅男| 99久久久久| 四虎国产精品免费久久| 成人久久免费网站| 久久国产精品久久国产精品| 久久黄视频| 日本人妻丰满熟妇久久久久久| 99久久久精品| 亚洲国产成人久久综合碰| 久久精品亚洲一区二区三区浴池| 久久美女网站免费| 2021久久精品免费观看| 丰满少妇人妻久久久久久| 日韩va亚洲va欧美va久久| 亚洲第一极品精品无码久久| 国产精品免费看久久久香蕉| 国产毛片欧美毛片久久久| 国产一久久香蕉国产线看观看| 久久综合久久鬼色| 久久精品国产亚洲AV无码麻豆| 精品久久久久久无码中文字幕 | 久久久久久伊人高潮影院| 色偷偷888欧美精品久久久| 久久强奷乱码老熟女网站| 久久精品免费一区二区三区|