• <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,說明不了任何問題。  回復  更多評論
              
            青青国产成人久久91网| 五月丁香综合激情六月久久| 偷窥少妇久久久久久久久| 久久97久久97精品免视看| 欧美亚洲另类久久综合婷婷| 亚洲中文字幕无码一久久区| 欧美亚洲另类久久综合| 人人狠狠综合久久亚洲高清| 人人妻久久人人澡人人爽人人精品| 91久久精品电影| 国产福利电影一区二区三区,免费久久久久久久精 | 久久被窝电影亚洲爽爽爽| 亚洲天堂久久久| 超级97碰碰碰碰久久久久最新 | 久久久国产精品网站| 97久久超碰成人精品网站| 久久精品欧美日韩精品| 久久AV高清无码| 久久久精品久久久久久 | 精品久久久无码中文字幕| 亚洲国产一成久久精品国产成人综合 | 欧美一区二区久久精品| 精品久久久久久亚洲| 亚洲精品国产第一综合99久久| 精品蜜臀久久久久99网站| 色狠狠久久综合网| 久久免费视频一区| 青青久久精品国产免费看| 色综合久久精品中文字幕首页| 好属妞这里只有精品久久| 亚洲人成精品久久久久| av色综合久久天堂av色综合在| 日批日出水久久亚洲精品tv| 久久久久综合中文字幕| 久久99精品久久久久久水蜜桃| 狠狠色婷婷综合天天久久丁香 | 97久久综合精品久久久综合| 天天爽天天狠久久久综合麻豆| 色综合久久中文字幕无码| 久久精品无码一区二区无码| 精品久久一区二区三区|