Documente Academic
Documente Profesional
Documente Cultură
Texturare,
colorare
Conectivitatea
varfurilor
Texturi
Fragmente
colorate
Operatii raster
Actualizare
Frame-buffer
2
Aplicatie 3D
API 3D
UPG
Interfata UPG
Asamblare
primitive
Vertex
shader
Rasterizare
Operatii raster
Fragment
shader
Frame buffer
4
Aplicatie grafica 3D
3D API: OpenGL / Direct3D
UPG
Comenzi si date
Varfuri
Interfata UPG
Varfuri
Vertex shader
Primitive asamblate
Asamblare
primitive
Varfuri
transformate
Rasterizare si
interpolare
Fragmente
Fragmente
Operatii raster
Fragment
shader
Fragmente
transformate
Actualizare
frame-buffer
5
Vertex shader
Se executa o data pentru fiecare vertex
Realizeaza:
Transformarile folosind matricile de
modelare-vizualizare, proiectie
Transforma normalele, normalizarea
acestora
Generarea coordonatelor de texturare,
transformarea acestora
Iluminarea per vertex
Calculul culorii vertexului
Fragment shader
Se executa o data pentru fiecare fragment
Realizeaza
Calculul culorilor si a coordonatelor de
texturare per fragment
Aplicarea texturii
Calculul normalelor pentru aplicarea iluminarii
per fragment
Poate elimina fragmente pe baza informatiei
de adancime
7
Banda grafica
(x,y,z)
Transformare
varfuri
Asamblare
primitive
Decupare,
Rasterizare
Colorare
Frame
buffer
Banda grafica
(x,y,z)
Transformare
varfuri
Asamblare
primitive
Decupare,
Rasterizare
Colorare
Eliminare
parti
nevizibile
Frame
buffer 9
(x,y,z)
Vertex
shader
Asamblare
primitive
Decupare,
Rasterizare
Fragment
shader
Eliminare
parti
nevizibile
Frame
buffer
10
Transmiterea parametrilor
Aplicatie
-Coordonate
varfuri
-normale
-coordonate
de texturare
(x,y,z)
(x,y,z)
Vertex
rasterizare
Shader
gl_Position
Fragment
Frame
Shader
Buffer
culoare
-culoare
11
http://www.opengl.org/documentation/glsl/
Dezvoltat peste OpenGL
Similar cu limbajele C si C++
12
Suporta
structuri
Fluxul de control din limbajele moderne: bucle,
instructiuni de conditionare, apeluri de functii
Tipuri de date: vectori, matrici
Operatii grafice: de exemplu reflect (calculeaza raza
reflectata)
Biblioteca matematica
13
Tipuri de date
struct
Structuri ca in C/C++
14
Acesarea componentelor :
.x, .y, .z, .w - pozitie / directie
.r, .g, .b, .a - culoare
.s, .t, .p, .q - coordonate de texturare
float3 myColor
myColor.xyz
myColor.xgb
15
vec4 c = vec4(0.5,
vec3 rgb = c.rgb;
vec3 bgr = c.bgr;
vec3 rrr = c.rrr;
c.a = 0.5;
c.rb = 0.0;
float g = rgb[1];
16
17
Constructori
mat3 i = mat3(1.0); // matricea identitate 3x3
Acesarea elementelor
float f = m[column][row];
Vectori si matrici
vec3 xyz = // ...
vec3 v0 = 2.0 * xyz;
vec3 v1 = v0 + xyz;
vec3 v2 = v0 * xyz;
mat3 m = // ...
mat3 v = // ...
mat3 mv = v * m;
mat3 xyz2 = mv * xyz;
mat3 xyz3 = xyz * mv;
19
Functii
Functii trigonometrice
float s = sin(theta);
float c = cos(theta);
float t = tan(theta);
Se lucreaza pe
componente
20
Functii
Functii exponeniale
float xToTheY = pow(x, y);
float eToTheX = exp(x);
float twoToTheX = exp2(x);
float l = log(x);
// ln
float l2 = log2(x); // log2
float s = sqrt(x);
21
Functii
Alte functii
float ax = abs(x);
float sx = sign(x); // -1.0, 0.0, 1.0
float m0 = min(x, y);
float m1 = max(x, y);
float c = clamp(x, 0.0, 1.0);
// floor(), ceil(),
22
Functii
Functii geometrice
vec3
vec3
vec3
vec3
l
n
p
q
=
=
=
=
//
//
//
//
...
...
...
...
float f = length(l);
float d = distance(p, q);
float d2 = dot(l, n);
vec3 v2 = cross(l, n);
vec3 v3 = normalize(l);
//
//
//
//
//
lungime vector
distanta dintre puncte
produs scalar
produs vectorial
normalizare
// reflect
//refract()
23
Functii
// true
// false
24
Transmiterea parametrilor
Aplicatie
-Coordonate
varfuri
-normale
-coordonate
de texturare
(x,y,z)
(x,y,z)
Fragment
Vertex
rasterizare
Shader
Shader
in
out
in
Operatii
Frame
Buffer
-culoare
uniform
25
Primul program
Program OpenGL
Vertex Shader
glm::mat4
model_matrix,
view_matrix,
projection_matrix;
in vec3 position;
uniform mat4 model_matrix,
view_matrix, projection_matrix;
glGetUniformLocation
glUniformMatrix
model_matrix =
glm::mat4(1,0,0,0,
0,1,0,0, 0,0,1,0, 0,0,0,1);
view_matrix =
glm::lookAt(obs, catre,
up);
projection_matrix =
glm::perspective(fov,
aspect, n, f);
glGetUniformLocation
glUniform
Fragment Shader
out vec4 out_color;
uniform vec4 object_color;
void main(){/* */}
Frame Buffer
glm::vect4 object_color;
}
28
in vec3 vertex_to_fragment_color;
out vec4 fragment_color;
void main(void)
{
fragment_color = vec4(vertex_to_fragment_color,1);
}
29
Maparea texturilor 2D
Se defineste o mapare intre (x,y,z) din spatiul real
in (s,t) in spatiul textura
Pentru a determina culoarea din textura, se
considera un punct (x,y,z) de pe suprafata, se
mapeaza in spatiul textura, pe baza caruia de
determina culoarea din textura
s = s (x, y, z)
(x,y,z)
t = t (x, y, z)
t
s
30
coordonatele in varfuri
s = s (x, y, z)
t = t (x, y, z)
Interpolare liniara
pentru a mapa restul
punctelor din spatiul
real
t
s
Textura
Triunghi (in
spatiul real)
31
Exemplu 2
Vertex shader
in vec3 in_position;
in vec2 in_texcoord;
uniform mat4 M, V, P;
out vec2 texcoord;
void main(void) {
texcoord = in_texcoord;
Fragment shader
uniform sampler2D img;
in vec2 texcoord;
out vec4 color;
void main(void) {
vec3 tex = texture (img,
texCoord).xyz;
color = vec4(tex, 1);
}
gl_Position =
P*V*M*vec4(in_position,1);
}
32
Exemplu 3
Vertex shader
uniform vec2 left;
uniform vec2 right;
texturare
in vec3 in_position;
in vec2 in_texcoord;
uniform mat4 M, V, P;
out vec2 texcoord1, texcoord2;
void main(void) {
texcoord =;
gl_Position = P*V*M*vec4(in_position,1);
33
Exemplu 3
Fragment shader
uniform sampler2D img1;
uniform sampler2D img2;
in vec2 texcoord1, texcoord2;