• <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>
            隨筆-38  評論-23  文章-0  trackbacks-0
            在學習opengl過程中。我是用了《交互式的計算機圖形學 自頂向下的分析》 這本書著實不錯。是一本理論兼opengl實踐的圖形學教程。

                 在學習上,我總會是雜亂無章的學。為什么呢。我一般是在需要某個理論的時候才會去深究理論內部的各種詳細機制,當然前提必須是你對這方面知識必須有一點的了解,不需要了解的足夠深入。其實我想這也是讀書的一種方法吧。對于看書我向來先很粗糙的瀏覽整書一遍,大概就只看一些概念,了解這書的主要內容 方向等。第二遍則是詳細的理解內容,某些時候有些內容都是很有之后才有心去看的。

                 其實今天在總結這個的時候,并不是在用opengl而是在使用osg設計一個項目人物汽車車等漫游類《可能應用在手機,汽車導航上》的時候,想起總結這的。我其實是想畫些圖來寫這份總結可能會更容易理解的.然而實在懶...

             

                 在圖形學的顯示流程:

                  三維圖形->模型視圖變換->投影變換->三維裁剪->視口->屏幕圖形顯示

             

                 三維->二維的變換,總的來理解只是三維的物體在一系列的變換之后決定了屏幕上某些像素位置的顏色值。最后這些顏色組成了一幅圖畫。就是我們所看到得最終屏幕二維圖形了。

             

                 在大概了解這種流程之后,模型視圖變換 無疑將成為決定我們所將看到的圖像的輪廓。

                 模型視圖變換 應該來講是包含兩個變換的:模型變換,視圖變換。為什么將他們合在一起呢? 在照相機成像系統中 若固定相機不動移動模型會 等價于 固定模型不動移動相機。

                 考究如下內容:

                

                 glMatrixMode(GL_MODELVIEW);

                 glLoadIdentity();                   //當前矩陣設置為單位矩陣

                 glRotatef(45.0f,0.0,0.0,1.0); //按[0.0,0.0,1.0]為軸旋轉45度

                 glTranslatef(2.0,2.0,2.0);     // 平移至 [2.0,2.0,2.0]

                 glBegin(...);                       // 畫某些東西
                    ...
                    ...
                    ...
                 glEnd();

             

                 有兩種方式理解:一種是局部坐標系的理解,一種是全局坐標系的理解。

                 如果按照上面那些內容從上到下的理解的方式就是局部坐標系的理解。opengl變換上的實現其實是個矩陣的乘法。按照局部坐標系的理解 上面代碼的變換是按照這樣的順序執行的:

            先將局部坐標系繞z軸旋轉45度,在將局部坐標系的原點平移至[2.0,2.0,2.0],然后在局部坐標系內畫物體。

                  假設 旋轉步驟的矩陣為R,平移部分的矩陣為T 當前矩陣為C。

                  new_C=old_C*R*T 這是一個矩陣右乘操作

                  理論上來講 這就是一個坐標系的變換過程,R*T 這個矩陣其實就是將原先的坐標系變換到現在的坐標系,這個時候原先坐標系的點p將變換成p1,p1=(R*T)*p。

                  而按照全局坐標系的理解,它的變換過程則是相反的,這也是相當的好理解的.在當前世界坐標系中畫好該物體之后,我必須將它移動到正確的位置。那必須得先平移物體到[2.0,2.0,2.0],然后將物體繞z軸旋轉45度。這是一個相反的變換過程,然而這個與前面的是等價的 為什么?

                  考慮世界坐標系下點p,經過平移操作后 p11=T*p; 在經過旋轉操作后 p1=R*P11=R*(T*p)  這是矩陣的一個左乘操作 先變換的在后面. 所以說new_C=(old_c*(R*(T))) 左乘 所以說這是一個等價的過程.

             

                  一般來將,我們考慮的時候總是世界坐標系考慮旋轉平移等操作的.所以在寫變換的時候最好的方式就是將 變換步驟一直左乘,而代碼中則按左乘后結果矩陣的順序寫代碼。

             

                  其次在理解以上的變換過程中模型變換的原理,我們可以很好的理解gluLookAt(eye,center,up)的視圖變換的過程,現在只考慮模型不動,照相機移動的過程,且是在全局坐標系下的移動過程.

                 opengl默認照相機框架 是視點在原點 y軸為向上方向 z軸負方向為視線方向

             

                 gluLookAt的目的在于使得視點移動到eye位置 并看向center。

                 則gluLookAt的過程先平移至eye,而center->eye(center指向eye)則為z方向設為z(Zx,Zy,Zz),Up方向為y軸方向,y,z的叉積則為x軸方向.則只需將它們都旋轉到位就行了

             

                所以這個時候模型變換矩陣就為《相對于模型來講 相機移動到eye等價于模型移動到-eye.

                |Xx Xy Xz  0|        |1   0   0   -eyex|

                |Yx Yy Yz  0|    *  |0   1  0    -eyey|

                |Zx  Zy Zz  0|         |0   0  1    -eyez|

                |0   0   0     1|         |0   0  0       1   |

            posted on 2009-07-14 21:38 米游 閱讀(761) 評論(0)  編輯 收藏 引用 所屬分類: OpenGL/OSG
            9久久9久久精品| 欧美久久亚洲精品| 久久精品国产2020| 久久久久亚洲AV成人网人人网站| 国产69精品久久久久APP下载| 亚洲国产另类久久久精品小说| 久久99精品国产自在现线小黄鸭| 国产成人综合久久精品尤物| 久久91精品国产91| 久久婷婷国产麻豆91天堂| 久久精品无码av| AV无码久久久久不卡蜜桃| 亚洲性久久久影院| 欧美亚洲国产精品久久蜜芽| 久久精品国产久精国产一老狼| 国产高潮久久免费观看| 欧美大香线蕉线伊人久久| 久久国产一片免费观看| 久久精品亚洲精品国产色婷| 久久亚洲国产成人影院网站| 国产精品欧美久久久天天影视| 国色天香久久久久久久小说| 久久高潮一级毛片免费| 97久久精品无码一区二区天美| 亚洲精品99久久久久中文字幕| AV无码久久久久不卡蜜桃| 无码人妻精品一区二区三区久久久 | 久久久无码人妻精品无码| 人人狠狠综合88综合久久| 国产成人精品久久| 精品一区二区久久| 久久久久亚洲AV无码麻豆| 日韩乱码人妻无码中文字幕久久| 久久午夜免费视频| 亚洲精品国产自在久久| 亚洲国产成人久久一区WWW| 久久人人爽人人澡人人高潮AV | 奇米影视7777久久精品人人爽 | 亚洲国产成人精品无码久久久久久综合 | 99久久精品国产一区二区| 亚洲日本va午夜中文字幕久久 |