1. 程式人生 > >試試開部落格,寫些實驗室的碼程式碼經歷

試試開部落格,寫些實驗室的碼程式碼經歷

實驗室主要是做三維顯示的,多少接觸些三維影象的生成和顯示方面的東西。對於這方面,一開始當然是完全不會。連C語言基礎都很薄弱,C++壓根就不懂。即便如此,還是需要接觸一些OpenGL等領域的東西。

OpenGL當然也有聖經,紅寶書這種資料自然是必不可少的,原理什麼的都講得很詳盡。雖然從現在看來一些內容似乎過時了,但是參考價值還是相當的大。

一開始從網上找教程就找到了NeHe的OpenGL教程,一看,非常詳盡,似乎可以用來學一學。於是下了一個框架,一看程式碼,頭都大了。幸虧我不需要真正去了解一個視窗是怎麼建立起來的,只需要關注OpenGL本身的一些東西。

實驗室做的東西要求涉及頂點變換的一些操作,大概瞭解到了OpenGL是從頂點座標向量出發,先經過了ModelView矩陣,主要管相機的位置等,然後經過Projection矩陣,管透視投影等,最後得到要顯示的實際畫面。

當時就有個想法,想要自己推出類似於透視投影矩陣一樣的自定義矩陣,用它取代透視投影矩陣,以達到自己想要的目的。如今看來,整體思路是沒什麼問題的,但是坑爹的地方在於最後推出來的座標變換公式是高階方程,作為數學渣的我沒辦法把它用矩陣表示。思前想後,決定在當中再建立一個模型作為中介,直接對這個模型進行座標變換。就這樣,還真達到了我的要求。

當然,模型的讀取還費了我很大的功夫,最後自己寫了一個讀取obj格式的函式,只可惜漏洞實在太多,只有條件苛刻的模型才能讀入。但無論如何,我這第一個程式還真寫好了。

說起來實驗室的系統有著比較特殊的要求。計算機需要接入儘可能多且解析度儘可能高的顯示裝置,比如用滿雙鏈DVI的4K解析度;然後儘可能多插顯示卡。說到底,就是儘可能地利用單臺計算機可以實現的解析度輸出。合計了一下,最後的解析度總和達到了12000*3600。這麼大的解析度,需要將同一個場景分成90個不同方向的視口,每個視口都按統一規則進行座標變換。

後來實驗室跟計算機系的同學合作,讓他們幫忙寫了個程式,瞬間就把模型匯入、光照、多視口實時生成全部搞定了。只是後來自己做實驗需要對程式進行改動,總不能勞煩計算機系的同學幫寫,只好自己開始啃程式碼。啃了半個月,終於把幫寫的程式看懂了,開始著手改。在改的過程中,著實學到不少東西。