• <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 閱讀(1394) 評論(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,說明不了任何問題。  回復  更多評論
              
            亚洲Av无码国产情品久久| 亚洲国产另类久久久精品黑人| 2021国产精品午夜久久| 久久午夜无码鲁丝片秋霞 | 精品久久久噜噜噜久久久| 国产精品热久久无码av| 狠狠色狠狠色综合久久| 久久久久久久国产免费看| 999久久久免费精品国产| 色妞色综合久久夜夜| 国产精品久久国产精品99盘| 久久久久九九精品影院| 久久无码人妻一区二区三区午夜 | 亚洲中文久久精品无码ww16 | 国产一区二区三区久久精品| 久久久久亚洲AV片无码下载蜜桃 | 久久久久亚洲AV无码网站| 亚洲欧洲久久av| 国产精品女同一区二区久久| 久久天天躁狠狠躁夜夜avapp| 国产精品久久网| 久久久av波多野一区二区| 一本久久精品一区二区| 国内精品久久久久久久涩爱| 久久99精品国产麻豆宅宅| 久久国产欧美日韩精品| 色天使久久综合网天天| 久久久人妻精品无码一区| 久久亚洲天堂| 久久av高潮av无码av喷吹| 日本免费一区二区久久人人澡 | 久久夜色精品国产网站| 伊人久久大香线蕉精品不卡| 日韩久久无码免费毛片软件| 久久婷婷五月综合97色直播| 一本久久a久久精品综合夜夜| Xx性欧美肥妇精品久久久久久| 国产精品久久久久国产A级| 久久国产亚洲高清观看| 精品久久久久久无码中文字幕一区| 伊人久久久AV老熟妇色|