2012年5月21日 星期一

作業三 校園導覽


主題介紹
元智大學校園導覽
這次是要作整個元智大學的校園導覽,所以直接開門見山取了這個名字當主題,我想是最適合不過了。

設計概念
這次主要畫了六個館,都是以之前作業二的一館當雛型,修改完以後再透過translate移動到場景中不同的位子。而移動部份是參考老師放在portal的範例檔,並修改之後達到效果,最後每次移動的時候,改變idle function讓畫面看起來更有走路的感覺,並且搭配空白鍵,改變照相機y軸的高度,呈現有點像CS裡面跳躍的感覺。

操作方式
使用鍵盤的上下左右進行前後左右的移動,按空白可以進行跳躍。

執行成果呈現
影片,主要展示整個場景,跟碰撞偵測。



全景

全景

一館

二館

三館

五館

六館

七館

壘球場

程式設計
這次基本上只有改變投影的方式和照相機位置,其他跟前兩次使用方法差不多。

選擇投影的方式
這次選擇了perspective的投影方式,讓畫面看起來更有人眼看到的效果。

改變照相機的位置
照相機的y軸基本上沒有跳躍的話,維持不變,而如果選擇前進轉彎,x軸會乘上sin角度,z軸會乘上cos角度,讓看起來的效果很像在游走一樣。


心得與討論
因為之前老師上課有課堂練習,所以在游走的部份課堂上就寫好了,所以這次作業主要時間還是花在把六個館建立起來,和把整個場景布置。不過因為一次要畫六個館,所以這次就不像上次畫一館一樣每個細節都很注意,所以只把簡單的代表性特徵畫出來而已。而再碰撞針測的部分,我是記錄每一個館的座標,在移動的時候會在去做檢查,看看是否會超過記錄起來的座標,如果沒超過才走過去。最後這次是在最後一天才大致上完成,所以部落格打的有點簡略,而且本來想要多畫幾棵樹也來不及畫好,另外本來也想要連滑鼠都可以做視角的移動,讓整個操作方式跟CS玩起來的感覺一樣,因為時間的關係,只能等下次作業在完成了。


1 則留言:

  1. /* 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

    如果載入過多模組報錯,換掉出錯的模組。

    回覆刪除