Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OpenGL Introduction
Search
Bruce Tsai
February 02, 2015
Programming
0
47
OpenGL Introduction
A introduction to OpenGL for beginners
Bruce Tsai
February 02, 2015
Tweet
Share
More Decks by Bruce Tsai
See All by Bruce Tsai
Problem Solving with Algorithms and Data Structure - Graphs
wagamama
0
94
Normal Mapping
wagamama
0
62
Android Programming Introduction
wagamama
0
87
iOS GPUImage introduction
wagamama
0
120
Problem Solving with Algorithms and Data Structures
wagamama
0
65
Problem Solving with Algorithms and Data Structure - Lists
wagamama
0
77
Other Decks in Programming
See All in Programming
GPUを計算資源として使おう!
primenumber
1
190
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
1
150
PicoRuby on Rails
makicamel
2
140
Team operations that are not burdened by SRE
kazatohiei
1
320
10 Costly Database Performance Mistakes (And How To Fix Them)
andyatkinson
0
450
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
540
VS Code Update for GitHub Copilot
74th
2
660
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
180
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
14k
AI コーディングエージェントの時代へ:JetBrains が描く開発の未来
masaruhr
1
200
すべてのコンテキストを、 ユーザー価値に変える
applism118
4
1.4k
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
700
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Adopting Sorbet at Scale
ufuk
77
9.5k
Agile that works and the tools we love
rasmusluckow
329
21k
Typedesign – Prime Four
hannesfritz
42
2.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Transcript
OpenGL Introduction Bruce Tsai
State machine! Primitives! Buffers! Shaders! Attributes and uniforms! Drawing
None
Port Crane Crates inside each container are our instances! Containers
are OpenGL ’s objects ! textures, shaders, meshes! Port crane is OpenGL API 4 State Machine
Primitives GL_POINTS! GL_LINES! GL_LINE_STRIP! GL_LINE_LOOP! GL_TRIANGLES! GL_TRIANGLE_STRIP! GL_TRIANGLE_FAN 5
None
None
Rendering Settings void glPolygonMode(GLenum face, GLenum mode);! ! void glFrontFace(GLenum
mode);! ! void glCullFace(GLenum mode); GL_FRONT_AND_BACK GL_POINT GL_LINE GL_FILL GL_CW GL_CCW GL_FRONT GL_BACK GL_FRONT_AND_BACK 8
Buffers Temporary optimized storage! Render buffers! Frame buffers! Buffer objects
9
Render Buffer Color! Store final colored (RGB) image! Depth! Store
final Z depth information! Stencil! Store visible part of object 10
Frame Buffer Store final image! Combination of render buffers 11
Buffer Object Hold informations about 3D objects! Structures! Indices 12
Structures vs. Indices {v1, v2, v3}, {v1, v3, v4}, …!
! {v1, v2, v3, v4, …} (0, 1, 2, 0, 2, 3, …) 13
One Buffer at a Time OpenGL GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER GL_TEXTURE_BUFFER Buffer1
Buffer2 Buffer3 Buffer4
Create Buffer void glGenBuffers(GLsizei n, GLuint *buffers);! ! void glBindBuffers(GLenum
target, GLuint buffer); GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER 15
Set Buffer Data void glBufferData(GLenum target, GLsizeiptr size, const GLvoid
*data, GLenum usage);! ! ! void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); _STATIC_ _DYNAMIC_ _STREAM_ _DRAW _READ _COPY GL_STATIC_DRAW 16
Copy Buffer Data void glCopyBufferSubData(GLenum readtarget, GLenum writetarget, GLintptr readoffset,
GLintptr writeoffset, GLsizeiptr size); 17
Get Buffer Data void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
GLvoid *data); 18
Access Content Buffer void* glMapBuffer(GLenum target, GLenum access);! ! GLboolean
glUnmapBuffer(GLenum target) GL_READ_ONLY GL_WRITE_ONLY GL_READ_WRITE 19
None
Create Shader GLuint glCreateShader(GLenum type);! ! void glShaderSource(GLuint shader, GLsizei
count, const GLchar **string, const GLint *length);! void glCompileShader(GLuint shader); 21 GL_VERTEX_SHADER GL_FRAGMENT_SHADER
Create Program GLuint glCreateProgram(void);! void glAttachShader(GLuint program, GLuint shader);! void
glLinkProgram(GLuint program);! void glUseProgram(GLuint program); 22
Attributes and Uniforms
Attribute Location 1. Defined fixed location in shader! 2. Bind
attribute location before linking shader code! void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name);! 3. Get attribute location after linking shader code! GLint glGetAttribLocation(GLuint program, const GLchar *name); 24
Uniform Location Get uniform location after linking shader code! GLint
glGetUniformLocation(GLuint program, const GLchar *name); 25
Define Attribute Values void glVertexAttrib{1234}f(GLuint index, GLfloat value[N]);! void glVertexAttrib{1234}fv(GLuint
index, const GLfloat *values); 26
Attribute Pointer void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean
normalized, GLsizei stride, const GLvoid *ptr);! ! void glGenVertexArrays(GLsizei n, GLuint *arrays);! void glBindVertexArrays(GLuint array); 27 Required while using glVertexAttribPointer
Using Attribute Pointer void glEnableVertexAttribArray(GLuint index);! void glDisableVertexAttribArray(GLuint index); 28
Define Uniform Values void glUniform{1234}{if}(GLint index, T value[N]);! void glUniform{1234}{if}v(GLint
index, GLsizei count, const T *value);! void glUniformMatrix{234}fv(GLint index, GLsizei count, GLboolean transpose, const GLfloat *value); 29
Clear void glClearColor(GLflozt red, GLfloat green, GLfloat blue, GLfloat alpha);!
void glClear(GLbitfield mask); 30 GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT GL_STENCIL_BUFFER_BIT
Drawing void glDrawArrays(GLenum mode, GLint first, GLsizei count);! ! !
void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); 31 GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT
Restarting Index void glPrimitiveRestartIndex(GLuint index); 32
Sample v0! p(-1,-1,0,1)! c(1,1,1,1) v1! p(1,-1,0,1)! c(1,1,0,1) v2! p(-1,1,0,1)! c(1,0,1,1)
v3! p(1,1,0,1)! c(0,1,1,1)
References http://blog.db-in.com/all-about-opengl-es-2-x-part-1/! http://www.dreamstime.com/stock-images-port-cranes- image25107404! http://blog.db-in.com/all-about-opengl-es-2-x-part-2/! OpenGL Programming Guide