作者VictorTom (鬼翼&娃娃魚)
看板C_and_CPP
標題Re: [問題] OpenGL glFrustum() 設定的問題
時間Thu May 13 13:09:37 2010
※ 引述《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