OpenGL Render

Similar documents
Outline 三角網格資料結構 一般繪圖方式 硬體加速繪圖方式 Display List Vertex Array 序列式 :gldrawarrays 索引式 :gldrawelements Vertex Buffer Object 序列式 索引式

Chapter 11 It s all about the pipeline: Faster geometry throughput

<BABAD3EFD1D4CEC4D1A7D7A8D2B5D1A7C9FABBF1B5C3B8F7C0E0D7CAB8F1B4D3D2B5D6A4CAE9C7E9BFF6CDB3BCC6B1ED2E786C73>

Microsoft PowerPoint - Class5.pptx

概述

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

<4D F736F F F696E74202D DA578C657B27BA6E6ABD8BF76B5B2BA63A475B57BAABABADEB27AA8EEABD7BB50A7EFB669ABD8C4B32DBDB2A7D3B4AD2E BACDBAE65BCD2A6A15D>

01

Autodesk Product Design Suite Standard 系統統需求 典型使用用者和工作流程 Autodesk Product Design Suite Standard 版本為為負責建立非凡凡產品的設計師師和工程師, 提供基本概念設計計和製圖工具, 以取得令人驚驚嘆

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

untitled

The golden pins of the PCI card can be oxidized after months or years

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

投影片 1

Scott Effective C++ C++ C++ Roger Orr OR/2 ISO C++ Effective Modern C++ C++ C++ Scoot 42 Bart Vandewoestyne C++ C++ Scott Effective Modern C++ Damien

PowerPoint 演示文稿

摘 要 本 校 多 媒 體 設 計 系 與 上 海 戲 劇 學 院 創 意 學 院 在 多 次 聯 繫 交 流 之 下, 已 簽 署 合 作 備 忘 錄, 積 極 尋 求 兩 校 合 作 教 學 與 共 同 創 作 之 機 會 藉 由 本 系 學 生 作 品 腦 殘 公 寓 入 圍 第 五 屆 中

<4D F736F F D20A7EBBCD0B6B7AABEAAFEA5F3322D3935A67EB2C432A6B8B2C433B2D5C5E3A5DCA564B357BD64AED12E646F63>

桌上型個人電腦採購規格說明表

電腦設備LP _第七組顯示卡規範書

Microsoft Word - LP doc

WinMDI 28

桌上型個人電腦採購規格說明表

電腦設備LP 第七組顯示卡規範書

JLX

chap02_part2

csg(1_29)cs.p65

슬라이드 1

四、實務實習課程之實習工作日誌(請貼上掃描檔)

untitled

高级计算机图形学

運算子多載 Operator Overloading


Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

應用3D/VR虛擬實境技術於踝關節之3D/VR模擬驗證

untitled

Microsoft Word - 桂政发(2016)20号.doc

; ; 3

幻灯片 1

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

Photoshop CS3 影像創造力 基礎講堂 8 學習流程 學習重要性 學習難度 必學指令工具 實作應用範例 創造舞台燈光的漸層繪圖 延伸學習 雜訊與半透明漸層 8-1 Photoshop Photoshop 8 136

Microsoft PowerPoint - 遊戲企劃

计算机图形学

ROP_bamboofox.key

Bus Hound 5

Microsoft PowerPoint - VB14.ppt

第五章 重叠、流水和现代处理器技术

CC213


KDC-U5049 KDC-U4049 Made for ipod, and Made for iphone mean that an electronic accessory has been designed to connect specifically to ipod, or iphone,

Microsoft Word - K34行政法-法制_題+解+評OK_.doc

coverage2.ppt

计算机图形学

Microsoft PowerPoint - cg_ch09_02

高级计算机图形学

Microsoft PowerPoint - Chap03.ppt [相容模式]

3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不

untitled

GV-R7500L Win 98/ 98SE, WinME Win XP Direct X Windows NT WINDO

Text 文字输入功能 , 使用者可自行定义文字 高度, 旋转角度 , 行距 , 字间距离 和 倾斜角度。

untitled

Improved Preimage Attacks on AES-like Hash Functions: Applications to Whirlpool and Grøstl

chp6.ppt

Microsoft Word - 3D手册2.doc

Move Component Object selection Component selection UV Maya Hotkeys editor Maya USING MAYA POLYGONAL MODELING 55

Java

(HMI) IO A

游戏厅捕鱼技巧_天天酷跑游戏技巧 2048游戏技巧,游戏厅打鱼技巧_

Chapter 16 集合

绘制OpenCascade中的曲线

c_cpp

Microsoft Word - ACL chapter02-5ed.docx

* 2

C35_RG_E.book

EJB-Programming-4-cn.doc

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

GDC 2005

Microsoft Word - 投影片ch11

邏輯分析儀的概念與原理-展示版

Tel:

GIGA-BYTE TECHNOLOGY CO., LTD. ( GBT ) GBT GBT, GBT

Microsoft Word - 01.DOC

Excel VBA Excel Visual Basic for Application

Microsoft PowerPoint - Class2.pptx

PowerPoint Presentation

Transcription:

Outline 一般繪圖方式 硬體加速繪圖方式 Display List Vertex Array 序列式 : gldrawarrays 索引式 : gldrawelements Vertex Buffer Object (VBO) 序列式 索引式 Callback Function 2014/12/18 2

一般繪圖方式 glbegin(gl_triangles); for(int i = 0; i < ntriangles; ++i) { } glnormal3fv(triarray[i].n); glvertex3fv(triarray[i].a); glvertex3fv(triarray[i].b); glvertex3fv(triarray[i].c); glend(); 2014/12/18 3

Display List 預先將一連串的繪圖指令編譯並儲存, 在需要使用時再行呼叫 初始化 Gluint _DisplayList = glgenlists(1); glnewlist(_displaylist, GL_COMPILE); ( 一般繪圖方式或想儲存的 OpenGL 函數 ) glendlist(); 繪圖時 glcalllist(_displaylist); 清除 gldeletelists(_displaylist, 1); 2014/12/18 4

Display List 無法在 Display List 中儲存的 OpenGL 函數 2014/12/18 5

Display List 階層式 Display List glnewlist(a); glcalllist(b); gltranslatef(1.0, 0.0, 0.0); glcalllist(c); gltranslatef(1.0, 0.0, 0.0); glcalllist(c); glendlist(); 不能在 glnewlist/glendlist 之間, 包入 glnewlist/glendlist, 但可以 glcalllist 階層限制為 64, 不過這取決於 OpenGL 的實作, 可調用函式來查看階層上限 glgetintegerv(gl_max_list_nesting, GLint *data); 2014/12/18 6

Vertex Array OpenGL 原生支援的頂點陣列啟用 / 關閉 glenableclintstate(glenum array); gldisableclientstate(glenum array); GL_VERTEX_ARRAY GL_NORMAL_ARRAY 指定 Array 的數據 glvertexpointer(glint size, GLenum type, GLsizei stride, const GLvoid *pointer); size: 每個頂點的座標數量, 必須為 2 3 或 4 type: 座標的數據類型 (GL_SHORT GL_INT ) stride: 連續的頂點之間的偏移量 彩現 pointer: 第一個頂點的第一個座標的地址 2014/12/18 7

Vertex Array- 彩現方式 索引式 : 能隨機呼叫 glarrayelement gldrawelements glmultidrawelements gldrawrangeelements 序列式 : 只能依序呼叫 gldrawarrays glmultidrawarrays 2014/12/18 8

索引式 Vertex Array 以索引值的陣列來指定物件使用的座標點 不必重複儲存重複的座標點 減少傳遞到顯示卡的記憶體量, 以提高運作效率 2014/12/18 9

索引式 Vertex Array (conti.) 2014/12/18 10

Vertex Array- 索引式彩現方式 glarrayelement glenableclientstate(gl_vertex_array); glvertexpointer(2, GL_INT, 0, data); glbegin(gl_triangles) glarrayelement(2); glarrayelement(5); glarrayelement(8); glend(); gldrawelements gldrawelements(mode, count, type, index); glmultidrawelements for(i=0; i<primcount; i++) if(count[i]>0) gldrawelements(mode, count[i], type, index[i]); glbegin(gl_triangles) glvertex2iv(data+(2*2)); glvertex2iv(data+(5*2)); glvertex2iv(data+(8*2)); glend(); glbegin(mode) for(i=0; i<count; i++) glarrayelement(index[i]); glend(); 2014/12/18 11

Vertex Array- 序列式彩現方式 gldrawarrays gldrawarrays(mode, first, count); glbegin(mode) for(i=0; i<count; i++) glarrayelement(first+i); glend(); glmultidrawarrays for(i=0; i<primcount; i++) if(count[i]) gldrawarrays(mode, first[i], count[i]); 2014/12/18 12

Vertex Buffer Object (VBO) VBO 是 OpenGL 提供給使用者的一個將 vertex data( 包含 position, normal vector, color, etc.) 非即時地上傳到顯示卡記憶體的方法 由於 vertex data 是儲存於顯示卡記憶體, 因此, 相較於其他 render 方式, 具有更高的效能 自 OpenGL 1.5 之後成為標準 2014/12/18 13

Vertex Buffer Object 建立 Buffer Object GLuint _VBO[2]; glgenbuffers(2, _VBO); 綁定 Buffer Object glbindbuffer(glenum target, GLuint buffer); Vertex 資料到 Buffer Object 內 glbufferdata(...); 更新 Buffer Object glbuffersubdata(...); glmapbuffer(...) glunmapbuffer(...) 清除 Buffer Object gldeletebuffers(glsizei n, GLuint *buffer); 2014/12/18 14

Vertex Buffer Object Bind Buffer glbindbuffer(glenum target, GLuint buffer); target: GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER buffer: 指定將綁定的 Buffer Object ( 如 :_VBO[0]) glbindbuffer 有三個功用 當 buffer 為首次使用之非零 UINT 時 建立一個新的 Buffer Object, 並將 buffer 分配給此 Buffer Object 當作名稱 當綁定到一個以前建立的 Buffer Object 時 設定此 Buffer Object 為 Active 當綁定到一個值為零的 buffer 時 OpenGL 會停止使用 Buffer Object 2014/12/18 15

Vertex Buffer Object Buffer Data glbufferdata(glenum target, GLsizeiptr size, const GLvoid *data, GLenum usage) 分配 size 個儲存單位 (byte) 的 OpenGL Device Memory, 用於儲存頂點或索引數據 以前所有與當前綁定對象相關聯的數據都將被刪除 target: GL_ARRAY_BUFFER( 頂點數據 ) GL_ELEMENT_ARRAY_BUFFER( 索引數據 ) GL_PIXEL_UNPACK_BUFFER( 傳遞給 OpenGL 的像素數據 ) GL_PIXEL_PACK_BUFFER( 從 OpenGL 獲取的像素數據 ) size: 儲存相關數據所需的記憶體空間 ( 通常是元素個數 各自儲存長度 ) data: 指向主記憶體中相關數據的指標 ( 用於初始化 Buffer Object) usage:gl_static_draw GL_DYNAMIC_READ GL_STREAM_COPY STATIC: 在 VBO 中的資料將不會改變 ( 指定一次多次使用 ) DYNAMIC: 資料將經常改變 ( 反覆指定與使用 ) STREAM: 資料在每個 Frame 都會改變 ( 一次指定一次使用 ) DRAW: 資料送到 GPU 繪出 ( 應用程式 GL) READ: 資料會被讀取到應用程式 (GL 應用程式 ) COPY: 資料會被 DRAW 與 READ(GL GL) 用於 PBO or FBO 2014/12/18 16

Vertex Buffer Object Update Buffer void glbuffersubdata(glenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); 以 data 所指向的資料替換掉 target 所指向的資料, 從 offset 開始的 size 個 byte void *glmapbuffer(glenum target, GLenum access); GLboolean glunmapbuffer(glenum target); 透過 glmapbuffer 取得 buffer 的指標 針對該 buffer 進行修改 調用 glunmapbuffer 通知 OpenGL 已經完成修改 2014/12/18 17

Callback Function 2014/12/18 18