主題介紹
步行於元智的夜晚
過程與成果展示
這次的作業,參考了老師的範例17,載入物件的部分
但網路上可以用的obj實在太少了
不然就是可以用的都要錢...
最後我就參考了範例17裡面其中一個obj
然後慢慢修改,做出一到七館( building1.obj ~ building7.obj )
把.mtl的部分拿掉,讓顏色那些也自己設定
每個館都是用物件的方式載入
glMaterialfv(GL_FRONT, GL_DIFFUSE, matn_diffuse);
glPushMatrix();
glTranslated(x,y,z);
glRotatef(angle, 0.0, 1.0, 0.0);
glCallList( list_idn );
glPopMatrix();
使用gluLookAt讓程式可變化個角度來看元智
初始視角設在(20, 0, 0) 面對六館方向
延續上個作業用到的,加上光源與材質,我將光源設在(0, 10, 0)處
寫在prepare_lighting函式中
光是放上一到七館,就花了滿多時間了
可能是自己空間概念不夠好
加上Z軸之後,腦筋就一直轉不過來
幸好拿出紙筆標記在紙上之後
就解決這個困擾了
接著我在各館間的空隙處利用迴圈加上了樹
以及幫紅磚道上色,在二三館間加了恐龍蛋 (二一石)
後來我覺得,各館雖然都有自己的外型了
但是都是很光滑的同一色系,好像有點單調
看到很多人在作業一就運用了貼圖
於是我也開始學習要怎樣貼圖
參考了以上網頁以及老師的範例
根據網友的建議
以64*64,或256*256的bmp是最好的,接著我便開始收集圖片
本來想要貼上各館外觀的照片
可是貼上去變好醜
所以我就去網頁素材的網站,找了一些適合的圖
用小畫家改成64*64的bmp
先利用AUX_RGBImageRec 來開一個檔案
LoadGLTextures 將Load的檔案,轉換成Textures
glGenTextures 創造Textures
接著再產生Texture
利用glTexImage2D將圖片貼在物件上
貼圖的code是參考老師的範例的
在依照自己的需求做修改這樣
貼完圖之後,作業終於看起來比較順眼一點了
雖然看起來只是變個顏色而已
其實每個館貼的圖是有花紋的
不過可能我設得太小,所以看不太出來
如果將館放超級大的話,就可以看得比較明顯唷 :)
因為紅磚道上看起來有點空虛單調
所以我又載入了人的物件
縮小之後
再用Loop等,讓他各角度都產生行人
( 有些要進七館,有些往宿舍方向,有些要去一館... )
用俯視角來看看元智吧
最後在天空中加上了月亮,以及隨機產生星星
月亮是用上一個作業的 glutSolidSphere 做法畫出的
而星星也是用 glutSolidSphere 畫出,不過是將半徑設為 0.01
所以看起來很像一個小點點
以下是我這次作業的架構
KeyboardFunc( )的部分
a,d控制視野z方向
w,x控制視野x方向
q,e則可控制仰視及俯視
簡單來說
就是面對六館的時候 ( 初始 )
a,d可左右移動
w,x可前進後退
q,e可看仰視及俯視
為了方便起見
利用SpecialFunc( )
↑ , ↓ 控制視野z方向,也就是面對六館時可前進後退
← , → 控制視野x方向,面對六館時可左右移動
最後加上按下Esc可關閉視窗
心得與討論
遇到最大的問題
一開始我是用Visual Studio 2008
在執行到 return auxDIBImageLoad(Filename); 這一行code會一直出錯
我幾乎是遍了所有網路上提供的方法
1. 改成 return auxDIBImageLoad(_L("xxx.bmp"));
2. 加入#pragma comment(lib, "glaux.lib")
3. 加入#define auxDIBImageLoad auxDIBImageLoadL
4. 專案→屬性→連結器→輸入→加入glaux.lib
5. 直接去下載glaux.lib到lib的資料夾內,在link
6. 不使用unicode
.
.
.
繁多不及備載
我試了一整個晚上,以上方法全部都不行!!!!!!
就在我快要絕望之際
看到了曾經修過圖學的同學上線
厚著臉皮問他我這個Error要怎麼辦
他告訴我,VS2008"似乎"沒有支援glaux,叫我改用VC6或Dev c++寫
他也很好心的提供了老師之前提供的CGMyDemo這份範例給我
於是,在Dev中安裝了glut,glaux套件之後
我終於搞定之前的Error了
只是我真的很想知道,VS2008真的不能用嗎
因為有問到之前曾經修過的同學
他說他的VS2008只要Link lib就可以用了
到底為什麼我的不行 QAQ
這個問題真的是我這次作業的最大難題了
也耗了最多時間在解決
另外遇到的問題就是
不知道為什麼
如果我把Mydisplay裡面的一館到七館
移到Mydisplay最前面,紅磚道會因為鍵盤中任何一個觸發點而變成黑磚道
但放在後面就可以正常顯示
這個奇怪的問題還要再花時間想想辦法吧
作業越來越多元,做出來也越來越有成就感
雖然跟其他同學比起來還是差了一截
但希望自己可以保有這種感覺
讓作業慢慢上手
:)
========================
後記
作業是在家中完成的,但家裡電腦CPU不夠好
變成動得很慢
想說到學校來再把畫面拍成影片上傳
結果一打開
變成....
真不知道是不是因為我沒有裝顯卡,直接用內顯的關係
所以行人就變成沒有穿褲子了
好害羞 >///<
為了大家好,就不拍成影片了
:P

