主題介紹
元智大學校園導覽這次是要作整個元智大學的校園導覽,所以直接開門見山取了這個名字當主題,我想是最適合不過了。
設計概念
這次主要畫了六個館,都是以之前作業二的一館當雛型,修改完以後再透過translate移動到場景中不同的位子。而移動部份是參考老師放在portal的範例檔,並修改之後達到效果,最後每次移動的時候,改變idle function讓畫面看起來更有走路的感覺,並且搭配空白鍵,改變照相機y軸的高度,呈現有點像CS裡面跳躍的感覺。
操作方式
執行成果呈現
影片,主要展示整個場景,跟碰撞偵測。操作方式
使用鍵盤的上下左右進行前後左右的移動,按空白可以進行跳躍。
執行成果呈現
全景
全景
一館
二館
三館
五館
六館
七館
壘球場
程式設計
這次基本上只有改變投影的方式和照相機位置,其他跟前兩次使用方法差不多。
選擇投影的方式
這次選擇了perspective的投影方式,讓畫面看起來更有人眼看到的效果。
改變照相機的位置
照相機的y軸基本上沒有跳躍的話,維持不變,而如果選擇前進轉彎,x軸會乘上sin角度,z軸會乘上cos角度,讓看起來的效果很像在游走一樣。
心得與討論
因為之前老師上課有課堂練習,所以在游走的部份課堂上就寫好了,所以這次作業主要時間還是花在把六個館建立起來,和把整個場景布置。不過因為一次要畫六個館,所以這次就不像上次畫一館一樣每個細節都很注意,所以只把簡單的代表性特徵畫出來而已。而再碰撞針測的部分,我是記錄每一個館的座標,在移動的時候會在去做檢查,看看是否會超過記錄起來的座標,如果沒超過才走過去。最後這次是在最後一天才大致上完成,所以部落格打的有點簡略,而且本來想要多畫幾棵樹也來不及畫好,另外本來也想要連滑鼠都可以做視角的移動,讓整個操作方式跟CS玩起來的感覺一樣,因為時間的關係,只能等下次作業在完成了。
/* glmList: Generates and returns a display list for the model using
回覆刪除* the mode specified.
*
* model - initialized GLMmodel structure
* mode - a bitwise OR of values describing what is to be rendered.
* GLM_NONE - render with only vertices
* GLM_FLAT - render with facet normals
* GLM_SMOOTH - render with vertex normals
* GLM_TEXTURE - render with texture coords
* GLM_COLOR - render with colors (color material)
* GLM_MATERIAL - render with materials
* GLM_COLOR and GLM_MATERIAL should not both be specified.
* GLM_FLAT and GLM_SMOOTH should not both be specified.
*/
/*GLuint glmList(GLMmodel* model, GLuint mode)
{
GLuint list;
list = glGenLists(1);
glNewList(list, GL_COMPILE);
glmDraw(model, mode);
glEndList();
return list;
}
*/
//GLM_SMOOTH,need vn in *.obj, as lighting need vector normal
//GLM_TEXTURE, need vt in *.obj, as texture need Vertex Texture
//GLM_FLAT, do not need vt & vn
//GLM_MATERIAL, need material definition, maybe in *.mtl
//GLM_COLOR, need color definition
//GLM_COLOR and GLM_MATERIAL should not both be specified.
//GLM_FLAT and GLM_SMOOTH should not both be specified.
GLMmodel *glm_model;
glm_model= glmReadOBJ( "abc.obj" );
glmUnitize( glm_model );
glmFacetNormals( glm_model );
glmVertexNormals( glm_model, 90 );
list_id[0] = glmList( glm_model, GLM_TEXTURE|GLM_MATERIAL );
glmDelete( glm_model );//release the storage
如果載入過多模組報錯,換掉出錯的模組。