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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Bruce Tsai
February 02, 2015
Programming
0
49
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
96
Normal Mapping
wagamama
0
71
Android Programming Introduction
wagamama
0
88
iOS GPUImage introduction
wagamama
0
120
Problem Solving with Algorithms and Data Structures
wagamama
0
66
Problem Solving with Algorithms and Data Structure - Lists
wagamama
0
84
Other Decks in Programming
See All in Programming
CSC307 Lecture 03
javiergs
PRO
1
490
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
710
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
MUSUBIXとは
nahisaho
0
130
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.5k
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
460
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
570
高速開発のためのコード整理術
sutetotanuki
1
400
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
140
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
It's Worth the Effort
3n
188
29k
GraphQLとの向き合い方2022年版
quramy
50
14k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
190
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
The Language of Interfaces
destraynor
162
26k
We Are The Robots
honzajavorek
0
160
Testing 201, or: Great Expectations
jmmastey
46
8k
Ruling the World: When Life Gets Gamed
codingconduct
0
140
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
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