• <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>
            隨筆 - 85  文章 - 47  trackbacks - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            First, think what you want these matrices do.
            Let we have transformation matrices A and B . We want to transform vector V by both and get vector V'.
            But above is not enough to specify what we want to do, as
            first transform by A then transform by B
            and
            first transform by B then transform by A
            are different. You can just try to play with rotations in real world.(get a cube, paint x,y,z on sides, etc.)

            Now, more on how it's done:

            first transform by A then transform by B
            It is easy to see that this is accomplished by:
            In openGL's convention:
            V'=B*(A*V)
            Note that it is same as
            V'=(B*A)*V
            so you can do it as
            C=B*A;
            V'=C*V;
            In DX's convention:
            V'=(V*A)*B
            C=A*B;
            V'=V*C;
            (note: real operations done on memory is the same. It's just matter how we map matrix indices to memory)
            As you see, V*A*B and B*A*V is kind of symmetrical. Same for consequently applied transforms like V*A*B*C*D*E*F or F*E*D*C*B*A*V

            Now, write it down for "transform by B then transform by A" yourself to remember it better.

            When you render something , you want points to be transformed by
            matrix of object
            matrix of parent object
            matrix of grandparent object ...
            matrix of camera
            (and done by API, projection matrix)
            From there you can find what order of multiplications you want. In OGL, you need to
            m=matrix_of_camera*matrix_of_grandparent_objectmatrix_of_parent object*matrix_of_object;
            ...
            then if you'll glLoadMatrix, OpenGL will do
            vertice=m*vertice;

            Some more notes: Let you have spacecraft with spacecraft-to-world matrix M
            And you use OpenGL convention.
            For example, to turn spacecraft around spacecraft's local X direction, you need to
            M=M*axis_angle_to_matrix(Vector(1,0,0),angle);
            (note: you need to reorthonormalize matrix if you do that incrementally)
            To turn spacecraft around global X direction, you need to
            M=axis_angle_to_matrix(Vector(1,0,0),angle)*M;


            On openGL:

            This sequence

            glMatrixMode(GL_MODELVIEW);
            glMultMatrix(A);
            glMultMatrix(B);
            glMultMatrix(C);
            ... render your mesh ...
            works as if your mesh would be transformed by C,then B, then A
            It makes lot of sense, if you for example want to render a robot with matrices giving positions of child nodes (fingers) relativelty to parent (arm), and arm are responsible for positioning fingers, you can do
            RenderArm(){
            glPushMatrix();
            glMultMatrix(matrix_of_first_finger);
            RenderFinger();
            glPopMatrix();
            glPushMatrix();
            glMultMatrix(matrix_of_second_finger);
            RenderFinger();
            glPopMatrix();
            }
            and so-on(simplified example)
            Then, you can have
            glPushMatrix();
            glMultMatrix(matrix_of_arm);
            RenderArm();
            glPopMatrix();

            and it will work properly.

            If you have more questions, ask.
            posted on 2008-04-30 22:05 w2001 閱讀(1401) 評論(2)  編輯 收藏 引用

            FeedBack:
            # re: OpenGL中的矩陣計算[未登錄] 2009-09-04 19:22 joe
            you english is really...bad...

            please write in chinese, that will be more helpful~  回復  更多評論
              
            # re: OpenGL中的矩陣計算 2009-09-09 19:31 w2001
            轉載,與本人水平無關。english止一工具耳,看得懂就達到目的了,至于badgood,說明不了任何問題。  回復  更多評論
              
            精品国产乱码久久久久软件| 亚洲伊人久久大香线蕉综合图片| 国产精品久久久久久五月尺| 亚洲国产一成久久精品国产成人综合| 一级做a爰片久久毛片毛片| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久久久亚洲av无码专区| 久久精品亚洲一区二区三区浴池| 国产精品一区二区久久 | 天天躁日日躁狠狠久久| 久久综合九色综合97_久久久| 热综合一本伊人久久精品 | 99久久人妻无码精品系列| 久久久精品国产亚洲成人满18免费网站 | 久久综合久久美利坚合众国 | 人妻丰满?V无码久久不卡| 三上悠亚久久精品| 久久精品国产男包| 国内精品久久久久久久coent| 性色欲网站人妻丰满中文久久不卡 | 久久久久se色偷偷亚洲精品av| 久久国产精品-国产精品| 欧美国产成人久久精品| segui久久国产精品| 欧美伊香蕉久久综合类网站| 久久久久久精品成人免费图片| 精品久久久久久国产三级| 丰满少妇人妻久久久久久| 久久久久亚洲av成人网人人软件| 欧美777精品久久久久网| 久久久国产精品亚洲一区| 久久人人爽人人爽人人片av麻烦| 久久AⅤ人妻少妇嫩草影院| 久久香蕉国产线看观看99| 久久精品国产亚洲AV无码娇色| 性做久久久久久久| 久久久久久久人妻无码中文字幕爆| 成人久久免费网站| 色诱久久久久综合网ywww| 久久国语露脸国产精品电影| 亚洲人成无码网站久久99热国产|