Re: [問題] OpenGL glFrustum() 設定的問題

看板C_and_CPP (C/C++)作者 (鬼翼&娃娃魚)時間16年前 (2010/05/13 13:09), 編輯推噓0(0014)
留言14則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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)

05/13 13:33, , 1F
忽然覺得有必要修正自己的話, 所以補在推文下面好了....
05/13 13:33, 1F

05/13 13:34, , 2F
glFrustrum(或glOrtho)其實都只是依參數產生一個matrix
05/13 13:34, 2F

05/13 13:34, , 3F
並且multiply在current matrix上, 所以本質上其實和
05/13 13:34, 3F

05/13 13:35, , 4F
glTranslate()這種function是一模一樣的, 它只是產生一
05/13 13:35, 4F

05/13 13:35, , 5F
個transform matrix; 只是實務上通常會用在Projection
05/13 13:35, 5F

05/13 13:36, , 6F
matrix上, 然後照參數設定, 通常會產生決定ViewVolumn
05/13 13:36, 6F

05/13 13:36, , 7F
的最終計算結果, 因為經VS套入這些matrix的計算後會使得
05/13 13:36, 7F

05/13 13:37, , 8F
在ViewVolumn外的部份被clip掉; 同樣的它影響投影的結果
05/13 13:37, 8F

05/13 13:37, , 9F
也只是因為它常作用在Projection Matrix上, 其實拿來
05/13 13:37, 9F

05/13 13:38, , 10F
乘進Texture Matrix也可以達成一些特效的. 所以本質上
05/13 13:38, 10F

05/13 13:38, , 11F
都只是個matrix production, 只是應用在哪個matrix以產
05/13 13:38, 11F

05/13 13:39, , 12F
生什麼樣的效果. 而glFrustrum/glOrtho甚至
05/13 13:39, 12F

05/13 13:39, , 13F
gluPerspective這些function到底會產生什麼樣的matrix,
05/13 13:39, 13F

05/13 13:40, , 14F
這些都是可以查到/由數學上去計算出來的. 以上<(_ _)>
05/13 13:40, 14F
文章代碼(AID): #1BwucKCG (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BwucKCG (C_and_CPP)