跳到主要內容

發表文章

目前顯示的是 十月, 2011的文章

8. 使用視圖與相機鏡頭轉換,及 gluLookAt() - OpenGL FAQ

返回 OpenGL FAQ 目錄

8.010 OpenGL裡的相機鏡頭到底是怎麼運作的呢?  就目前的OpenGL來說,沒有相機鏡頭這種東西。更精確地講,相機永遠都位處於眼空間座標的原點 (0,0,0)。你的OpenGL應用程式為了假裝出移動相機的樣子,必須移動場景,對整個世界場景做相機鏡頭的逆空間轉換。

8.020 我要如何移動場景裡的眼睛或者相機鏡頭? 以相機鏡頭模型來說,OpenGL 並沒有提供介面去做這件事情。然而,GLU庫提供了gluLookAt()函數,傳入眼睛本身位置,眼睛瞄準點位置,以及朝上向量,都是世界空間坐標。這個函數依據參數計算出正確的相機逆空間轉換矩陣,並且乘上目前的矩陣。

8.030 我的相機鏡頭應該放在 ModelView 矩陣還是 Projection矩陣? GL_PROJECTION 矩陣只應該包含投影變換,它必須將眼空間坐標(eye space coordinates)轉換到裁切坐標(clip coordinates)。

GL_MODELVIEW矩陣呢,如其名,應該包含模型(modeling)與視圖(viewing)轉換,將物體空間坐標轉換成眼空間座標。所以請記住,永遠把相機鏡頭轉換放在GL_MODELVIEW矩陣,而不是GL_PROJECTION矩陣。

你可以把投影矩陣(projection matrix)想像成相機鏡頭的各種特性,像是視角的寬窄、焦距、用了魚眼鏡頭等等。而把模型視圖矩陣(model-view matrix)想成,你目前拿著相機站立的位置,及鏡頭指向的方向。

這份 The game dev FAQ 對這兩個矩陣說明得很不錯。

去讀讀 Steve Baker 的文章「濫用投影」(備用連結) 吧。此篇文章寫得很好,值得推薦。它曾經幫助過許多OpenGL新手程式員。

8.040 我該如何實現鏡頭變焦 (Zoom) 的操作? 簡單的做法是對 ModelView矩陣做等比縮放(uniform scale)。但是當模型放得太大時,通常會導致模型被近平面及遠平面裁切掉。一個比較好的做法是限縮投影矩陣裡view volume的寬與高。舉例來說,你的程式對應使用者的輸入,儲存了一個縮放參數值。當縮放值是1.0 時不變焦。縮放值變大就縮小視角,結果模型看起來就放大了。縮放值變小時就反過來做。程式碼範例看起來可能像這樣子:
/* 如果…

讀書心得: 朱敬一 給青年知識追求者的信

朱敬一先生是少數幾位我聽過的中研院院士的其中之一,可惜不是因為他的研究,而是新聞報導上常常看見朱先生的大名。個人粗淺的印象中,此人敢說敢做,意見頗值得一聽,所以偶然在圖書館翻到這本書,就把它帶回來了。本書總共由十封信組成,內容大略可分為兩半,前五封信是個人治學心得,我覺得相當不錯,後五封信則是對學術圈的建議,可能要有志於學術者讀起來才比較有感覺吧。

整本書看完後,我認為朱敬一先生想要對這個高度專業分工,以致於過於狹隘與僵化的社會提供一點反思,用朱敬一先生的話來說就是: 「你如果專注於其中部分領域而一頭鑽進去,當然是好的,但是你若想遊走諸方而觸類旁通,也沒有什麼不可以」。每當我想著「資訊工程是我的專業」的時候,到底是不是替我自己立下了一道牆,阻止我往外看,而失去了一些激發思想火花的機會。朱敬一是社會學家,所以書裡用很生動的例子來說明這種法政經社本一體的狀況,雖然表面觀察的對象不同,但是底下的氣息卻隱隱互通。

書裡舉了經濟學家拉維(Levitt) 作為這類遊走諸方的學者典型。拉維教授的其中一個研究證明,美國各州到一九九零年左右突然犯罪率大幅下降,其實是肇因於十八年前美國最高法院判定禁止墮胎違憲。墮胎合法化後,許多意外懷孕的女人就不用生下「不想要的小孩」,因而抑止了將來潛在的犯罪者的出生。這樣驚奇的研究結論,實在很難相信出自一位經濟學家之手。不過我看過拉維的例子後,我開始有點相信朱敬一說的,廣博的通識教育帶來的不是顯然可見的解題能力,而是「發掘、形成新問題」的能力。這也是許多台灣學生的弱點,解問題一流,但是不懂得找問題。

而想要有這種能力,就要依靠後天的「不住相讀書」,朱敬一改自金剛經的句子說「學子不住相讀書,其功用不可限量」,讀書不該功利的只求「有用」,不帶目的廣泛的讀書,才能成其大用,在大腦裡面埋下知識火種,也許有一天各個不相干的點會突然串起來,另闢蹊徑。這讓我想起賈伯斯的演講,他就是休學跑去旁聽書法課,我們今天才有漂亮字體的Mac電腦。

書中有段話剛好點醒了我最近的一些迷惘,朱敬一說,到了一定年紀之後,就不要再以「我某某還不夠好」的彌補心態來作為學習的動力,因為知識永遠學不完。最好的方式是一腳踏到浪頭上去,讓自己成為前緣浪花的一部份。

其實不管內容的話,聽聽朱敬一閒聊也是蠻有趣的,裏頭有一段兩三頁就簡單的道出社會科學的本質,文字淺顯清楚,相當精彩。對於自然科學、社…