2012年6月21日 星期四

PyOpenGL 全解析 2


資料來源:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-2/

用PyOpenGL叩開3D的心扉——OpenGL全解析(2)

星期一, 10. 十月2011

每個人都有做3D的潛質

看看這張圖片(選自“一秒鐘看穿統計陷阱”),美國木匠的平均收入是羅坦提亞木匠的兩倍,給出一張統計圖片,美國人的錢袋長、高都是羅坦提亞木匠的兩倍,看起來挺忠實於數據。
但是右邊錢袋實際佔用的面積就是左邊的4倍。這幅圖像導致的暗示效果其實還沒完,因為在生活中錢袋都是立體的,所以每個讀者看到這個錢袋的時候會不經意地給它加上一個厚度,這樣一來,在有些人眼裡這幅圖表達的明明是美國木匠的收入是羅坦提亞的8倍。原文的意思是這樣的印象完全脫離了原始數據所給出的信息,無疑是一次成功的誤導(它說的很對!)。
只要你被誤導了,無意識的加上了一個厚度,你就擁有了做3D的基本條件了。既然被廣泛的使用,可見被大眾的3D感是如何的強烈!你一定是其中之一麼?
人有兩隻眼睛,就是為了看立體景象的,自然進化的結果都告訴我們要好好用3D啊。為什麼兩隻眼睛是3D?難道單眼看世界就成平面了?!我閉上一隻眼睛——騙子,還是立體的啊,你耍我麼?
豈敢豈敢,現在閉上一隻眼睛,拿根縫衣針來試著穿一下?失敗了吧!沒有縫衣針的話簡單一點隨便走走能很容易的用手從側面一下子抓到眼前的東西麼?失敗了吧!不要氣餒,這些只是說明你是個正常人。
- – - – 自然給了我們清澈的雙眸,我們卻用它來發現距離。- – - –
我們能感受到距離,是因為左右兩眼看到的事物是不同的,這樣的不同反饋到我們的大腦,大腦就把它合成立體的圖像,不僅包含左右的距離,還有前後的距離,太神奇了!

計算機上的3D

有些計算機歷史知識的,會知道最早的計算機是把結果打在紙帶上的,富有藝術力的程序員就在紙帶上靠編程打印一系列的*來形成圖像,如果你從基礎開始學習C語言,很可能就會在學習循環的章節的習題上看到類似的習題。當然紙張表現的藝術,總有些不夠cool,而且,是對森林資源的浪費不是麼……
於是顯示器被發明出來了,與紙不同的是,可以無窮的複用,速度超快,不過新發明總是基於老的東西的,顯示器與紙面一樣,都是顯示二維的圖像的,從一開始就是如此,到現在都是,未來嘛……有變化的趨勢。
希望你中學的時候有聽過美術課,或者,立體幾何課上有稍微努力過,如果這也沒有,那就發揮一下自己的觀察能力吧,看看眼前的任何東西吧,然後默念並感悟這句毀天滅地驚天地泣鬼神的無敵真言——“ 近大遠小”,如何,得道了麼?
看看那些藝術繪畫作品,人類大概幾千年前就明白了這個道理:

2D + 透視= 3D

上圖,頂天立地如假包換的平面圖,但是你看到了什麼?立體方塊是吧。
錯覺,一切都是錯覺~ 但是我們的計算機3D靠的就是這種錯覺誕生的(如果沒有立體基礎就用筆試著描畫一下上圖第一幅感受一下,3D就這樣在你手中誕生了,快去買瓶啤酒慶祝一下吧)。但是這些終究是錯覺,仔細盯著第一幅圖,也許一開始會感覺第二幅的感覺,但再看一會兒就會覺得是第三幅。光靠線條的透視,大腦其實並不能得到唯一完美的結論,我們的3D藝術肯定還需要其他的東西來補足,就是後面兩幅圖中的重要​​演員——光照。事實上,一般最後的作品還需要紋理來幫忙;如果還能加上陰影等,會更真實。
正交透視
看看什麼是透視,我們知道鐵軌是兩根距離相等的鐵條排放出來的,就像上​​圖右半那樣。但是實際觀察一下(注意生命安全……),總感覺鐵軌在遙遠的地方相交了,像左半那樣。
透視(perspective)的觀察方式下,物體會隨著移遠而越來越小,視線會在物體移離觀察者時最終交匯。這是對真實視覺的模擬,也就是人們觀察世界的方式。一般來說,我們以後用OpenGL編程,這種視圖也比較多。
另一種觀察的方式稱為正交(orthogonal)。這種情況下,視線永遠不會交匯而且物體不會改變其大小,沒有透視效果。現實生活中我們沒有看到這種東西的福氣,但對於CAD程序等非常方便,角度長度什麼的測量會比較容易。

視野

如果您喜歡照相,相信不用多說就能明白視野這個概念;如果您沒什麼照相的經驗,沒關係跟我念:
- – - – 欲窮千里目,更上一層樓– - – -
當然,李先生是想說“站得高,看得遠”的,我想說的是“視野寬,看的多”,不過異曲同工。
廣角和遠角總是聽過的吧?沒有的話就按照字母意思猜一下,廣角,意味著看的很廣,人眼一般只能看到120°~130°,狗的話能看到180°,所以“狗眼看人低”是不對的,小狗們看到的東西可比我們多啊,應該是“狗眼看人小”,因為要在一眼看那麼多東西,自然就得把事物都縮小一點才能放得下啊;遠角嘛,差不多就是用望遠鏡咯,雖然看的很遠,但基本只能看到一個小圓了。
視野
玩過一些大型3D的話,很可能會有滾動滾輪更改視角的功能,那是感受視野的絕好方法。視野放遠,第三人稱視角,可能就能看到全局,怪啊東西啊都變的很小了;視野拉近,第一人稱視角,怪物好大,恐怖啊……

3D坐標

這次只是系列的第二次,想來還有很多的熱情,趁著機會多散佈些概念,免得以後說了讓人厭。3D坐標
討厭數學的人同樣討厭坐標,但是請喜歡上它——如果你對3D有興趣的話。3D坐標是暫時的3D描述最主要甚至是唯一的手段。
想像你在是一個點,就在Origin上,啊,你就是那個Origin原點,眼睛向紙面的外面看。那麼你的左手就是就是x軸的正方向,腦袋朝著y的正方向,往前看是z的正方向。那個孤單的點如何表示?{3, 5, 1}就是它的歸宿,意思就是向x軸方向前進3,在向y軸方向前進5,z軸方向前進1距離,基本就是在你左上方了,抬頭看看吧:)
順便問問{8, 4, -5}在哪裡?
這一篇寫了好久才捏出來,3D的基礎知識還是很多的,這次雖然講了不少,而且用的是非常通俗的說法,可能深度比較不夠。不過問題不大,隨著我們學習的深入,有些新的東西會慢慢引入,有些已經講述過的東西理解也會加深,慢慢來吧。

沒有留言:

張貼留言