3D Game Programming 2D game

Slides:



Advertisements
Similar presentations
IM426 – BUSINESS CASE 6: SOCIAL SENTIMENTAL ANALYSIS 社群情感分析 Original case source & reference: Rainer, Kelly, Prince, Brad and Watson, Hugh, Management.
Advertisements

第一單元 建立java 程式.
第三章:材質製作與模型.
教育社会学 主讲人 李慧玲.
College English Unit 2 Contents Revision Cultural Introduction New Lesson Vocabulary Games Acting Dialogues Exercises.
2007年8月龙星课程 周源源老师课程体会 包云岗 中科院计算所
十二年國民基本教育 高雄區入學方式說明 報告人:中山工商 楊薇主任.
Elle Ning iGroup中国·长煦信息技术咨询(上海)有限公司
Java Programming Hygiene - for DIDC
TQC+ 物件導向程式認證-JAVA.
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
報告即將開始.
Scratch 第5课 动作和方向.
第 5 章 流程控制 (一): 條件分支.
視聽資料之定義 視聽資料 非書資料 多媒體資料.
5B 教材分析.
2013级研究生年级大会 南京理工大学设计艺术与传媒学院
第三章 控制结构.
皮克斯與賈伯斯 Pixar&Jobs 指導老師 鍾志鵬 組別名稱 十兄弟 組員: 李冠興 李啟銘 呂柏聖 林韋樺 粘婉菁 吳嶽
Leftmost Longest Regular Expression Matching in Reconfigurable Logic
Life relies on sports 生命在于运动.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
CH2 開發環境介紹 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
控制流程 邏輯判斷 迴圈控制.
Chapter 2. The Graphics Rendering Pipeline 图形绘制流水线
Creating Animated Apps (I) 靜宜大學資管系 楊子青
視訊串流\Streaming Video Part-1 Multimedia on Computer Digital
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
Fundamentals of Physics 8/e 27 - Circuit Theory
JAVA程序设计 第5章 深入理解JAVA语言----补充.
3D PACMAN! Student: Chia-Wei Yao ID:
C 語言簡介 - 2.
Scratch程式設計 2016/04/06.
Introduction to OpenGL (1)
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 2D圖形與字型的呈現.
第三章 基本觀念 電腦繪圖與動畫 (Computer Graphics & Animation) Object Data Image
遊戲設計 Animation.
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第五章 頂點定義與基本形狀的繪出.
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
ICG 2018 Fall Homework1 Guidance
Java 程式設計 講師:FrankLin.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
VR – OpenGL 2D.
虛擬世界創造 授課教師:紀明德.
第一單元 建立java 程式.
第三章 基本觀念 電腦繪圖與動畫 (Computer Graphics & Animation) Object Data Image
Chapter 5 Recursion.
Networking Games 程式設計 潘仁義 CCU COMM.
Unity LAB 2D UFO Tutorial
遊戲圖學 Game Graphics 授課教師:陳宏光 副教授 實習助教:陳啟峰.
3D Game Programming Projection
程式的時間與空間 Time and Space in Programming
第二章 Java语法基础.
多媒体技术 中南大学信息科学与工程学院 黄东军.
以四元樹為基礎抽取圖片物件特徵 之 影像檢索
计算机问题求解 – 论题1-5 - 数据与数据结构 2018年10月16日.
老師的一句話 通訊與導航工程學系 張淑淨.
第二章 Java基本语法 讲师:复凡.
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
code::blocks 與GLUT 程式開發
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
Creating Animated Apps: Canvas與ImageSprite 靜宜大學資管系 楊子青
第2章 Java语言基础.
多重條件選擇敘述
Windows Phone Game 行動遊戲開發
第二章 Java基本语法 讲师:复凡.
Department of Computer Information Science, NCTU
PIXAR 皮克斯動畫工作室 極致力+整合力.
Section 1 Basic concepts of web page
Presentation transcript:

3D Game Programming 2D game Ming-Te Chi Department of Computer Science,  National Chengchi University 2018

Outline 2D game history Coordinate system Simple 2D game example 介紹如何由OpenGL製作2D小遊戲

2D Video Game History

The first video game Tennis for Two was a game developed in 1958 on an analog computer, which simulates a game of tennis or ping pong on an oscilloscope. The Original Video Game http://www.youtube.com/watch?v=6PG2mdU_i8k

2D GAME PONG 1972. earliest video game Arcade Original Pong http://www.youtube.com/watch?v=LPkUvfL8T1I

Snake (1970s) Control a snake to move, and avoid hitting to wall or its growing tail.

Galaxian (1979 by Namco) 小蜜蜂類型的遊戲, 可以看到隨顯示器和硬體的進步,遊戲玩法和畫面的變化, 右邊是當初的海報,可看出其故事性: 迎擊外星侵略者

Basic elements Elements Tetrads Jesse Schell Aesthetics Mechanics Story Jesse Schell 提出遊戲的組成可以四個的角度去解析。 這四個角度包含機制、技術、故事和美術,每一個向度有其對立和相輔相成的部份。 Technology

Mechanics Story Aesthetics Technology the procedures and rules the sequence of events that unfolds in your game Aesthetics how your game looks, sounds, tastes, and feels. Technology any materials and interactions that make your game possible

Pac Man 1980 by Namco http://www.google.com/pacman/ google用java script寫的pacman

Game & Watch 1980 Game & Watch is a line of handheld electronic games produced by Nintendo from 1980 to 1991. CM http://www.youtube.com/watch?v=oq64s8TmANM Ball: the first game & watch game

Family Computer(FAMICOM) Mario series. By Nintendo Family Computer(美國: NES)系統限制 48彩色和6灰色的調色盤, 64個sprite以及單一的捲軸 標準解析度256x240 pixel (for NTSC 256x224) Mario Bros. 1983 Super Mario Bros. 1985 Donkey Kong 1981

Tetris Design by 阿列克謝·帕基特諾夫 Puzzle game (Алексей Леонидович Пажитнов)in 1984 Puzzle game 俄羅斯方塊為益智遊戲的代表之一

Super Mario World. 1990 Rich color, Parallax scrolling, zoom and rotate sprite. 硬體的進步,使得能使用的顏色更多,角色數更多 帶來遊戲的畫面和玩法進步

Doom 1993 A landmark 1993 first-person shooter (FPS)video game by id Software. Video games with 2.5D graphics 透過圖片的縮放去模擬出透視的效果,一般歸類到2.5D遊戲

3D Graphics – early stage

3D Graphics http://www.epicgames.com/ http://www.youtube.com/watch?v=Ky-JUL0SDDs littlebig planet 2

Social game Happy Farm 社群網路的興起,使遊戲可與朋友產生互動,增加遊戲的玩法 http://www.playfish.com/ http://www.zynga.com/ Happy Farm

Mobile phone Angry Birds by Rovio flight control by Firemint Muliti-touch game in mobile device 觸控界面帶來直覺的玩法, 如flight control 畫出降落的規跡引導飛機的降落 像Angry Birds使用手指直接決定彈弓的角度和力度 Angry Birds by Rovio flight control by Firemint

LBS & AR

Snake in 2014 Nimble Quest Trailer 2013 March https://www.youtube.com/watch?v=n-QMoe0jzQ8

2D Video Game History

Cartesian Plane +y (4, 3) (0, 0) +x (-3, -2) +z 對於物體位置,採用迪卡爾座標系統描述,以垂直正交的座標軸定義出每個頂點所在的座標位置(x, y) +z

Coordinate Clipping +y (150, 100) (75, 50) (0, 0) +x (-75, -50) 對於3D空間的可視範圍,我們可以定義出所謂的Clipping空間,如紅色虛線框出的立方體 繪圖硬體可根據clipping空間,略過空間外的不可見的物件,用來加速

Super Mario Bros. Nintendo Game world Super Mario Bros. Nintendo

Viewport Mapping drawing coordinates to windows coordinates +y (0, 0) Viewport則是在螢幕(或視窗的顯示範圍),設定一塊區域,與clipping space做對應 OpenGL中可以指定多個viewport轉換,使同一個視窗畫面呈現不同角度或不同場景的畫面 (0, 0) +x clipping space Window space

Projection Getting 3D to 2D Orthographic projections Perspective projections 投影則是將3D物體從world space投影轉換到image space的過程,常用的有正交投影和透視投影 這幾個名詞,還會在05-Transformation和06-Projection做詳細的介紹

Representing Visuals 3D objects Lighting Shader Mesh: geometry Materials Texture maps Lighting Shader

2D game

What is a Game? – Elliot Avedon and Brian Sutton-Smith Games are an exercise of voluntary control systems, in which there is a contest between powers, confined by rules in order to produce a disequilibrial outcome. – Elliot Avedon and Brian Sutton-Smith 遊戲心理學家Brian Sutton-Smith

Game architecture Asset Management Game Loop I/O System loading saving caching Start() Update(delta) Display(delta) Keyboard, mouse audio storage 遊戲的架構 遊戲事件的迴圈: 在初始化後,每一個畫格(時間間隔),更新物間的狀態之後,再將之繪製在畫面上 輸入輸出系統: 管理玩家的輸入,畫面聲音的輸出 資產(asset)管理: 遊戲物件(3D模型、聲音檔)的資源管理

A simple example A character has three states: stand, walk, and jump Use “A” and “D”key to move the character When press “j”, the character will jump, and the score will increase by 1. 簡單的遊戲 -單一角色有三個狀態:站立、走路和跳 -利用左或右鍵的輸入移動角色 -按下j 角色會跳躍,並且會增加score變數1

State Position, direction, Gamesocre Jump Press “j” to trigger jump() 先決定角色的狀態,以及對應不同輸入產生的狀態變化 Stand Walk Press “A” or “D”

Debug & moving // Use this for initialization void Start () { Debug.Log("Hello, start!!"); } // Update is called once per frame void Update () { this.transform.position += new Vector3(1, 0, 0); }

Control speed float speed = 20; // Use this for initialization void Start () { Debug.Log("Hello, start!!"); } // Update is called once per frame void Update () { this.transform.position += new Vector3(speed*Time.deltaTime, 0, 0); }

waking void Update () { if (Input.GetKey(KeyCode.D)) { this.transform.position += new Vector3(speed*Time.deltaTime, 0, 0); } }

jump float dis = speed * Time.deltaTime; if (JumpCount >= 0)         {             if(JumpCount < 20)             {                 this.transform.position += new Vector3(0, dis, 0);             }  else             {                 this.transform.position += new Vector3(0, -dis, 0);             }             JumpCount++;             if (JumpCount>39)             {                 IsJump = false;                 JumpCount = -1;             }         } bool IsJump = false; int JumpCount = -1; void Update () { if(Input.GetKey(KeyCode.Space)) { if(!IsJump) { IsJump = true; JumpCount = 0; } } …. }

Sprite switch public Sprite[] sprites; int sprites_index = 0; // Update is called once per frame void Update () { if (Input.GetKey(KeyCode.D)) { this.transform.position += new Vector3(speed * Time.deltaTime, 0, 0); int i = (++sprites_index)%2; this.GetComponent<SpriteRenderer>().sprite = sprites[i]; } }

Art challenges technology; technology inspires the art. - John Lasseter John Lasseter 曾是pixar這家動畫公司的首席創意長,主要是負責美術和動畫創意 Pixar是創作出玩具總動員等長篇電腦動畫的公司,這pixar他們嘗試結合工程技術和藝術創造 在他的觀察下,發現,往往工程師熟知技術的極限,因此創造力會較為受限,但是藝術家的創意往往可以挑戰工程上的可能性 另外工程上的突破,也往往激發出藝術上的交流 遊戲的製作往往也如此,由於是跨領域的合作,往往可以激蕩出更多的火花

OpenGL 2D

class RGBApixmap RGBApixmap pic; pic.readBMPFile(“stand.bmp”); pic.setChromaKey(232, 248, 248); // draw pic.blendtex(picX, picY, 1.0, 1.0); RGBpixmap.h in lab2 //alternative draw glPixelZoom(1.0, 1.0); glWindowPos2i(picX, picY); pic.blend();

State and Image Jump 設定對應的影像 Stand Walk

State int whichpPic;

Change State void display() { … if (DirectState==0) { //向右 void SpecialKeys(int key, int x, int y) { switch(key) { case GLUT_KEY_LEFT: picX -= 5; if (whichPic==0) whichPic=1; else whichPic=0; DirectState=1; //left break; case GLUT_KEY_RIGHT: picX += 5; DirectState=0; //right } void display() { …   if (DirectState==0) { //向右     pic[whichPic].blendTex(picX, picY, 1, 1);   } else {      //向左     int offset = pic[whichPic].nCols; //圖的寬度     pic[whichPic].blendTex(picX+offset, picY, -1, 1);     //調整x位置,並以x=0為軸翻轉影像   } }

Font rendering //Font char mss[30]; sprintf(mss, "Score %d", Gamescore); glColor3f(1.0, 0.0, 0.0); //set font color glRasterPos2i(10, 550); //set font start position void * font = GLUT_BITMAP_9_BY_15; for(int i=0; i<strlen(mss); i++) { glutBitmapCharacter(font, mss[i]); } 這段程式碼 可將Gamescore變數所儲存的分數資訊,以bitmap的方式繪在 (10, 550)的位置 需放在display()內

Press J to Trigger jump() void myKeys(unsigned char key, int x, int y) { switch(key) case ‘J': case ‘j': if(jumpState==0) { jumpState=1; Gamescore++; jump(0); } break; glutPostRedisplay(); 透過鍵盤的輸入 按下j 產生對應的動作,並更新Gamescore的變數 這樣可以實作出加分的機制

Jump motion void jump(int i) { whichPic=2; //switch state if(i<=10) { if (i<5) picY+=4; else picY-=4; i++; glutTimerFunc( 100, jump, i); }else { whichPic=0; jumpState=0; } glutPostRedisplay(); picY 5 i Jump 是我們設定的TimerFunction 藉此更新角色的位置PicY 並呼叫glutPostRedisplay(); 更新畫面