Computer Graphics and Visualization Final Project 699410122 張德勵
Introduction 這是一個以3D object為基礎的射擊小遊戲。 希望能用簡單的OpenGL function,作出有質感的畫面。 主要功能有:移動、射擊、視角切換、慢動作。
Outline 戰車介紹 砲彈介紹 目標物及地面介紹 視角介紹 Demo 製作時遇到的問題 未來目標
戰車介紹 戰車是讀取自GOOGLE 3D中的3D模型。 使用google sketchup pro將檔案轉換為.obj檔,再讀入OpenGL中。 計算角度與方位後,使用glRotate、glTranslate等OpenGL function改變戰車的位置與角度。 移動時,會隨機的上下抖動,來模擬真實路面狀況。 射擊時戰車會向後抖動來模擬後作力。
砲彈介紹 因找不到合適的砲彈3D模型,故使用OpenGL的幾何圖形繪製砲彈。 射擊時,先取得戰車的座標與角度,並將砲彈位移至砲口內部,再累加砲彈的位置。 可以切換是否顯示瞄準輔助線。
砲彈介紹(2) GL_POLYGON to create gl_list Call gl_list gluCylinder gluDisk glutSolidCone + + + +
目標物及地面介紹 目標物為紅色Cube。 打中時,會變成8個Sphere朝八個方向散開。 為了便於觀察移動與遠近,地面使用黑灰相間的棋盤格地面。繪製方法為遞迴的使用gl_list重複繪製。
視角介紹 平時有兩種視角可選擇─第三人稱固定在戰車後方,或是以戰車為中心,自行調整角度及遠近。 射擊時可選擇是否慢動作觀看砲彈飛行。
視角介紹(2)
Demo-移動與射擊 (點選畫面撥放001.wmv)
Demo-視角切換 (點選畫面撥放004.wmv)
製作時遇到的問題 OpenGL為直角坐標系,但所有物體不論移動、視角切換等等,都是以戰車為中心,並有可能往平面中的各個位置移動。因此需要使用三角函數,計算角度與相對位置。 程式中每個物件的相對位置,移動,或相關動作,為了達到協調與不突兀,每個參數皆須仔細調整。
製作時遇到的問題(2) 由於戰車模型十分精細,在程式初始時,需要花費一小段時間將模型讀入記憶體中,在程式編寫及測試時會耗費不少延遲時間,故編寫測試階段,有時會採用OpenGL內建的「Teapot」來作測試。
製作時遇到的問題(3) 由於整個戰車模型,是將車體、砲塔、砲管等全部物件包成一整個模型,因此無法做到現實中,旋轉砲塔、調整射擊角度、射擊後的滑膛砲的滑膛等等視覺特效。 曾試著將車體與砲塔部分拆開,但因不熟悉3D繪圖軟體,拆開後材質等部分出了點問題,且不知道該如何解決。
未來目標 增加爆破及煙霧效果,使視覺特效更加真實。 修改模型,使其能做出更多現實世界的動作與細節。 加入目標物、草地、石頭、建築物等等模型,建造更真實的環境場景。 加入物理引擎,讓整個程式更加真實。