3D Game Programming Projection

Slides:



Advertisements
Similar presentations
计算机动画与仿真. 计算机动画是计算机图形学和艺术相结合 的产物,它是伴随着计算机硬件和图形算 法高速发展起来的一门高新技术,它综合 利用计算机科学、艺术、数学、物理学和 其它相关学科的知识在计算机上生成绚丽 多彩的连续的虚拟真实画面,给人们提供 了一个充分展示个人想象力和艺术才能的 新天地。 计算机动画是计算机图形学和艺术相结合.
Advertisements

Euler’s Angles of Geodetic Coordinate Systems 第十八讲 大地坐标系的欧 勒角.
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
第三章:材質製作與模型.
第十一章 3D遊戲設計技巧 課前指引 一套3D遊戲的簡易製作過程,可以從腳本的企劃與構思,設計劇中人物跟週邊場景,然後再交給3D建模人員建立模型(如透過3DMax與Maya軟體),最後可以選一套合適的3D引擎來整合,並且安排介面控制角色的製作與邏輯,同時將人物場景匯入3D引擎中,最後透過玩家的耐玩度測試及調整就可以完成。如果是網路遊戲,上線之後還必須定時維護伺服器、或視情況增減伺服器。
大 播 海 直.
第六章 資料倉儲與採礦技術 6.1 資料倉儲與採礦定義 6.2 資料採礦之步驟與技術分類 6.3 資料採礦在顧客關係管理之應用
浙江大学CAD&CG国家重点实验室,教I 三楼
By Deborah Nelson Duke University Professor Susan Rodger July 13, 2008
四資二甲 第三週作業 物件導向程式設計.
CATIA V5 Training CATIA V5 装配设计 Assembly Design.
組長 :葉俊豪4c(23) 組員 :羅善洋4a(19),葉嘉豪4c(24)
“走进三国” 读书汇报会 广州市玉岩中学 李玉明( ).
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
说课.
实践 课题 周围环境对当代大学生成长的影响 指导老师:王永章 小组成员:陈荣、刘若楠、张红艳、吕雪丹、樊金芳、李惠芬、黄婧
税务认定 永州市国家税务局纳税人学校.
穩定是指偏離平衡時能夠回復平衡的特性,控制則是改變飛行狀態的機制。
機械視覺概論 生產自動化.
REVIEW 基本XYZ立體繪圖命令 MATLAB 程式設計與應用 張智星
Vanishing Point (Line)
3D Model Wan-Yu Chen NTUEE.
Chapter 2. The Graphics Rendering Pipeline 图形绘制流水线
淺談Visual C# 程式設計 國立台灣師大附中 李啟龍 Jason.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
Creating Animated Apps (I) 靜宜大學資管系 楊子青
Chapter 10 Three-Dimensional Viewing (三维观察)
AOI (Automatic Optical Inspection )
论题1-3 - 常用的证明方法及其逻辑正确性
Scratch程式設計 2016/04/06.
软件建模与UML.
机器人学基础 第四章 机器人动力学 Fundamentals of Robotics Ch.4 Manipulator Dynamics
第三章 基本觀念 電腦繪圖與動畫 (Computer Graphics & Animation) Object Data Image
Remember the five simple rules to be happy 快樂的五個簡單常規
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第五章 頂點定義與基本形狀的繪出.
第九章 燈光與攝影機 9-1 燈光建構的原理 9-3 攝影機操作介紹 9-4 實例製作-室內燈光打光
攝影機運動 Camera movements .
ICG 2018 Fall Homework1 Guidance
鏡頭的觀點 Camera Work 2008 蘇錦皆製作
攝影 Dolly Track 攝影機操作術語 Pan right (left), Tilt up (down) ,
題目:喜樂爸爸的歷練 經文:創世記三十一章36-44節.
Advanced Basic Key Terms Dependency Actor Generation association
句子成分的省略(1).
第三章 基本觀念 電腦繪圖與動畫 (Computer Graphics & Animation) Object Data Image
Chapter 9 (三维几何变换) To Discuss The Methods for Performing Geometric Transformations.
2018International Students' Fire Knowledge Promotion
建国以来,大陆对台政策 金亚丽 周莎 黄运娜.
Remember the five simple rules to be happy 快樂的五個簡單常規
Unity LAB 2D UFO Tutorial
行政管理者 的素质要求 中南大学湘雅医院 李远斌
计算机图形学 姜明 北京大学数学科学学院 更新时间2019年4月25日星期四8时14分39秒.
建築專題設計 吳可久副教授.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
宏國德霖科技大學 上學期1-4週品德教育核心價值 【尊重】主題分享
Remember the five simple rules to be happy 快樂的五個簡單常規
Remember the five simple rules to be happy 快樂的五個簡單常規
Remember the five simple rules to be happy 快樂的五個簡單常規
幼兒發展學習的評量與輔導---- 第四章—收集資料
主講 / Alice Lee 李麗貞 2006 主題二 叫我第一名 主講 / Alice Lee 李麗貞
OpenGL渲染管道与投影变换.
第三章 正投影 3-2 正投影練習 3-2-1 前視圖 圖3-10 正投影三視圖.
Orthographic Projection
code::blocks 與GLUT 程式開發
第三章 系統與資料庫檔案設計.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
3D Game Programming Geometric Transformations
PROGRAM 1 Simple E. Angel, Interactive Computer Graphics A Top-Down Approach with OpenGL, Third Edition Addison-Wesley Longman, 2003.
DDoS A note given in BCC class on May 15, 2013 Kun-Mao Chao (趙坤茂)
Principle and application of optical information technology
Summary
Presentation transcript:

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

Projection

Multi-view 一般的建模軟體都提供多重視角的畫面,方便理解與建立3D model 從左上順時鐘方向依序為,正面正交投影、下方正交投影,相機視點透視投影和側面視點正交投影

Classical Projections 幾種工程繪圖中常見的透視方法 Angel: Interactive Computer Graphics 5E ©

Eye coordinates +y +y +x +x +z 由於成像是會依相機(觀察者)的位置和角度進行繪圖, 故整體來說程式碼由下而上需經歷從object space轉換成world space再轉到view space (camera space或Eye coordinates) 之後再經投影,rasterization

Projections Orthographic Projections Perspective Projections 以一個中空的立方體模型為例,相同相機觀察角度 在正交投影中,看不到中空內側的部份 但在透視投影中,距離越遠長度差距越小的透視觀點,便可觀察到中空內側表面的部份

Pinhole camera A pinhole camera is a simple camera without a lens and with a single small aperture – effectively a light-proof box with a small hole in one side. 電腦圖學通常以Pinhole camera(針孔成像原理),呈現出3D場景、鏡頭和成像平面間的關係

Frustum void glFrustum( ); GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal ); far near Frustum 平面截頭體 可視為由相機為頂點,far plane為底面的大金字塔,截去以near plane為底面的小金字塔 這個形狀描述了針孔成像透視頭影的視野範圍(view volume)

Perspective Projections // Reset coordinate system glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Produce the perspective projection gluPerspective(45.0f, fAspect, 1.0, 400.0); void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); Frustum的參數設定較不直覺 gluPerspective提供了更方便的方式,讓開發者使用,內部再轉成Frustum的參數 Fovy 視角的大小,一般會設在30~60度之間 Aspect 長寬的比例,可根據視窗或viewport的長寬比例調整

攝影機使用與設定 Main Camera: 遊戲預設視角 點擊場景中的攝影機,可顯示預覽畫面

攝影機使用與設定 攝影機屬性 Background: 背景顏色 Projection:投影方式 Field of View(FOV) Perspective: 透視投影 Orthographic: 正交投影 Field of View(FOV) 可見視角範圍 Clipping Planes 最近(Near)與最遠(Far)能看到的範圍

Viewport transformation Modelview space Clipping space Viewport transformation Viewport 定義了Clipping space到視窗位置的轉換關係 一般而言,若只有一個viewport,會將viewport設定與視窗一樣大小,並根據viewport的長寬比例,調整投影的apsect ( gluPerspective()裡的長寬比例 ) 另外,一個視窗,可以由多個viewport對視窗進行分割顯示,每個viewport再對應到一個world space windows space

graphical perspective

First-Person perspective A graphical perspective rendered from the viewpoint of the player character http://www.youtube.com/watch?v=2N1TJP1cxmo Mirror's Edge https://www.youtube.com/watch?v=n5lu4Gyb1KM superhot doom Mirror's Edge

Second-person perspective In second person point of view, the action is shot from the perspective of a character that is not the protagonist. Let players feel as if they are actually the character they are controlling http://www.youtube.com/watch?v=82TSWzOsPYc mario 64 Mario 64

Third-person shooter The player character is seen at a distance from a number of different possible perspective angles. the player character is visible on-screen, and the gameplay consists primarily of shooting. http://www.youtube.com/watch?v=82TSWzOsPYc mario 64 https://www.youtube.com/watch?v=kFmYbaAjrfo Gear of war 3

Top-down perspective From God view Star craft 2 simcity https://www.youtube.com/watch?v=TqUCmlbkkS0 Star craft 2 simcity

Animation Squash & stretch The Prinicples of Animation, Squash and Stretch For hw2 Squash & stretch

Cameras and Actors

CameraFollow public GameObject player; private Vector3 offset; void start() { offset = transform.position –player.transform.position; } void LateUpdate() { transform.position = player.transform.position + offset; https://unity3d.com/learn/tutorials/projects/survival-shooter/camera-setup?playlist=17144

Vector3.Lerp public static Vector3 Lerp(Vector3 a, Vector3 b, float t); 𝑜𝑢𝑡= 1−𝑡 ∗𝑎+𝑡∗𝑏 https://docs.unity3d.com/ScriptReference/Vector3.Lerp.html

CameraFollow2 public GameObject player; public float smooth; private Vector3 offset; void start() { offset = transform.position –player.transform.position; } void LateUpdate() { Vector3 targetPos = player.transform.position + offset; transform.position = Vector3.Lerp (transform.position, targetPos, smooth*Time.deltaTime);

Lookat public void LookAt(Vector3 worldPosition); public void LookAt(Vector3 worldPosition, Vector3 worldUp = Vector3.up); +x +y +z up from void Update() { // Point the object at the world origin transform.LookAt(Vector3.zero); } https://docs.unity3d.com/ScriptReference/Transform.LookAt.html

An Actor Frame vForward Z vUp Y vLocation vRight X

Move object Translate public void Translate(Vector3 translation, Space relativeTo = Space.Self); public void Translate(float x, float y, float z, Space relativeTo = Space.Self); vForward Z vUp Y vLocation vRight X 對於3D空間的物件和相機,我們可以透過Frame座標系統描述他在空間中的位置和方向 也就是空間座標(x, y, z)和三軸的向量(前方、上方和側邊), 這頁提供了一個GLFrame的C++ class,完整的實作可參見實習課的程式範例 由於三個軸是正交垂直,因此在class設計可只設定up和forward兩向量,用外積計算側邊向量 也可以透過這個物件本身座標系統來移動物體,沿著forward vector前進,是比較直覺的作法, 特別在遊戲中,上下左右的移動輸入,應該對應於物體本身的方向,而非對應世界座標軸的方向

Euler Angles vUp Y vForward Z vRight public void Rotate(Vector3 eulers, Space relativeTo = Space.Self); public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self); vRight X 另外,物體的旋轉可以Euler Angles定義,就如同飛機飛行移動的三個旋轉方向 藉由Frame的定義對三軸做旋轉