• <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久久精品综合香蕉| 中文字幕久久久久人妻| 久久美女人爽女人爽| 久久国产香蕉一区精品| 色欲综合久久躁天天躁| 久久精品亚洲日本波多野结衣| 久久青草国产精品一区| 色青青草原桃花久久综合| 99久久精品国产麻豆| 亚洲婷婷国产精品电影人久久| 久久亚洲精品成人AV| 欧美日韩精品久久久久| 久久精品国产精品亚洲毛片| 国产精品青草久久久久福利99| 国内精品综合久久久40p| 99久久久精品| 亚洲午夜久久久久妓女影院| 色综合久久久久网| 粉嫩小泬无遮挡久久久久久| 亚洲欧洲中文日韩久久AV乱码| 久久精品国产99国产精品澳门| 无码人妻久久一区二区三区蜜桃 | 一级做a爰片久久毛片免费陪| 久久精品午夜一区二区福利 | 久久人做人爽一区二区三区| 九九99精品久久久久久| 日产精品99久久久久久| 国内精品久久国产| 欧美性猛交xxxx免费看久久久| 99精品久久精品一区二区| 无码久久精品国产亚洲Av影片| 久久亚洲精品无码播放| 中文字幕亚洲综合久久2| 久久精品国产亚洲77777| 久久亚洲精品成人av无码网站| 伊人久久综合成人网| 日本久久久久亚洲中字幕| 欧美一区二区三区久久综| 无码国内精品久久人妻蜜桃| 亚洲国产精品无码久久SM| 亚洲AV无一区二区三区久久|