Viewing
事前提要:
1. 要注意電腦上的codeblocks上面是有裝圖學要用的MinGW編譯環境,並且將相關設定都設好
複習:
1.glTranslated / glTranslatef 差別在於d是double,雖然使用空間較大,但是位置較精確
2.熟悉上週移動選轉縮放
範例:jsyeh.org/3dcg10
下載3樣東西:data windows glut32.dll
下載完成之後,把windows解壓縮成一個資料夾,把glut32.dll複製進去,再把data解壓縮丟進去,之後點開資料夾,把Transformation.exe打開來,就可以複習上周所教的移動旋轉縮放
*用滑鼠拖曳綠色位置的數字就可以改變他,按R可以回復原本狀態
投影
平行/垂直(orthology/parallel)投影方法有分為六種,透視(perspective)投影法方為3種
透視投影法,近的比較大,遠的比較小
垂直投影法長得像下面這樣,PIA壓扁的樣子
現在要用的是剛剛資夾中的Projection.exe來了解投影
透視投影
一種金字塔型投影的概念
gliPerpective(fovy, aspect, zNear, zFar)
➧fovy = field of view 視野大小
➧aspect = x, y的比例(y/x的比例) 長寬比例
➧zNear = 表示切面(光)
➧zFar = 表示切面(影子)
若zNear切在物體上:zFar面若在zNear前面,他只會顯示切面前的東西(1),若在zNear後面,就只會顯示切面後的東西(2)。
若zNear沒有切在物體上,zFar面切到物體:顯示物體到zNear面之間的樣子(3)
總而言之就是顯示zNear到zFar之間的樣子
(1)
(2)
(3)
glLookAt(0.00, 0.00 ,0.00 , <- eye 表示照相機的方向 / 眼睛(下圖左)
0.00, 0.00 ,0.00 , <-center 表示主角的方向 / 物體中心(下圖中)
0.00, 0.00 ,0.00 ) ; <-up 表示拍照時食指向上射出去的角度(下圖右)
垂直投影
一種方塊投影的概念
⟴這個範例在程式碼的地方按右鍵可以有其他種類投影的範例,離如我選了glortho就可以改成垂直投影,還有一種是glFrusrum
gluortho(左,右,上,下,近,遠);
他表示的是一個框框的大小,在框框中的東西才能顯示,而遠近一般來講不會去動他,只是遠的都會射比較遠
youtube:michael bay rotating camera 這個導演喜歡奇怪轉來轉去的畫面(以主角為中心旋轉鏡頭)
自己來操作!
回去剛剛的網址下載source
裡面可以看到很多可以形成剛剛使用範例的原始檔,例如projection.exe是由glm.c glm.h projection.c組成,其中前兩個是3D的模型
現在開一個glut的專案,並且把原本的main移除,把source中的glm.c glm.h projection.c複製到專案的資料夾,並且把.c的副檔名都改成.cpp,之後再把.cpp加回專案中,之後F9,看有沒有缺甚麼檔案,再去data中尋找,就可以產生出跟剛剛的projection.exe一樣的執行檔了
***
在執行過程中出現了error => 沒有定義strdup
strdup的功能是讓括號中的字串能夠被使用
因為他已經不再被定義了, 因為非標準C++(C和C++水土不服),所以要馬把.cpp改成.cp,要馬自己DIY,網上爬到的程式碼如下:
然後呢~應該是會再出現奇怪的東西,只要把data丟到freeglut中的bin資料夾就可以成功跑出來了:)
***
然後接下來的東西因為有點複雜,只要去moodle下載就好了
*要注意的是要去week05.cbp用Notepad++打開來,把裡面圈起來這部分刪掉改成點(總共有兩個),表示要把執行目錄放在當前目錄,就可以不用把data丟到freeglut中的bin才能用,但是要注意freeglut.dll也要一起放到week05的資料夾中
最後呈現出來的結果就是長這樣:(一個黑底白影的人像~)
先轉動還是先移動?
繞著某個中心點轉動或原地旋轉?
程式碼從後面讀回來,
如果先讀到旋轉再移動,表示旋轉中的車子移動 (車子移動後,以自己為中心轉動)
如果先讀到移動再旋轉,表示移動後的車子旋轉 (繞著某個中心(原本)旋轉)
























沒有留言:
張貼留言