看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《hoson (林老師賣的冰淇淋)》之銘言: : 各位先進大家好 想請問openGL glFrustum 設定的問題 : 1. : glMatrixMode (GL_PROJECTION); : glFrustum(-320.0 , 320.0 , -240.0 , 240.0 , 659 , 1000); : glMatrixMode (GL_MODELVIEW); : glLoadIdentity() : glTranslatef (0, 0, -670); : glColor3f (1.0, 0.5, 0.1); : glutSolidTeapot (50); : 這時候茶壺畫出來很正常 也在螢幕的正中間 : 2. 但是 : glMatrixMode (GL_PROJECTION); : glFrustum(0.0 , 640.0 , 0.0 , 480.0 , 659 , 1000); //這裡跟改座標 : glMatrixMode (GL_MODELVIEW); : glLoadIdentity() : glTranslatef (320, 240, -670); //想要在螢幕中心顯示 : glColor3f (1.0, 0.5, 0.1); : glutSolidTeapot (50); : 雖然的確在螢幕正中心畫出茶壺 可是茶壺卻有點變型 : 有點像是 視角改變所產生的perspective的變形 : 想請問在 glFrustum(0.0 , 640.0 , 0.0 , 480.0 , 659 , 1000);的設定下 : 要怎麼去決定 3D物體的座標 才能正確顯示3D圖 : 謝謝~ glFrustum()的功能, 是決定你的View Volumn範圍用的.... 當然, 其實也就是你的3D scene裡投影到View Plane的方式.... 你原本的View Volumn設定是-320 ~ +320, 用簡單圖解X-Z平面: \ / \ / \ / \ / \ / \ / --> X eye 當你改成0 ~ 640的設定之後, 你的View Volumn與投影方式是這樣: | / | / | / | / | / | / --> X eye 因此會有類似perspective投影的扭曲歪斜發生是自然的.... 所以問題在你幹麻要用這樣子歪斜的投影方式來呈現scene呢?? 純粹只是改參數練習玩玩看??還是是否有什麼特定想法要實作?_? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.41.4 ※ 編輯: VictorTom 來自: 220.134.41.4 (05/13 13:19)
VictorTom:忽然覺得有必要修正自己的話, 所以補在推文下面好了.... 05/13 13:33
VictorTom:glFrustrum(或glOrtho)其實都只是依參數產生一個matrix 05/13 13:34
VictorTom:並且multiply在current matrix上, 所以本質上其實和 05/13 13:34
VictorTom:glTranslate()這種function是一模一樣的, 它只是產生一 05/13 13:35
VictorTom:個transform matrix; 只是實務上通常會用在Projection 05/13 13:35
VictorTom:matrix上, 然後照參數設定, 通常會產生決定ViewVolumn 05/13 13:36
VictorTom:的最終計算結果, 因為經VS套入這些matrix的計算後會使得 05/13 13:36
VictorTom:在ViewVolumn外的部份被clip掉; 同樣的它影響投影的結果 05/13 13:37
VictorTom:也只是因為它常作用在Projection Matrix上, 其實拿來 05/13 13:37
VictorTom:乘進Texture Matrix也可以達成一些特效的. 所以本質上 05/13 13:38
VictorTom:都只是個matrix production, 只是應用在哪個matrix以產 05/13 13:38
VictorTom:生什麼樣的效果. 而glFrustrum/glOrtho甚至 05/13 13:39
VictorTom:gluPerspective這些function到底會產生什麼樣的matrix, 05/13 13:39
VictorTom:這些都是可以查到/由數學上去計算出來的. 以上<(_ _)> 05/13 13:40