Slajd 1 -

Transkrypt

Slajd 1 -
dr inż. Jacek Dąbrowski, KSG
[email protected]




world transform – przekształca wierzchołki z lokalnego
układu współrzędnych do współrzędnych świata
view transform – wierzchołki ze współrzędnych świata
przekształcane są do współrzędnych kamery
projection transform – wierzchołki ze współrzędnych
kamery przekształcane tak aby wprowadzić iluzję głębi
clipping and viewport scaling – usuwa niewidoczne
wierzchołki (clipping) i przeskalowuje ich współrzędne do
współrzędnych ekranowych (viewport)
http://www.khronos.org/opengles/2_X/
Czy?
 Scissor test
 Alpha test
 Stencil test
 Depth Test
Kolor?
 Kolor
 Tekstury
 Światła
 Blending
Dla każdego piksela:
 Scissor test (viewport)
 Alpha test
glAlphaFunc(GLenum func, GLclampf ref);

Stencil test
glStencilFunc(GLenum func, GLint ref, GLuint mask);
glStencilOp(GLenum fail, GLenum zfail, GLenum zpass);

Depth Test
glDepthFunc(GLenum func);

Rozszerzenia OpenGL

Kłopotliwe do utrzymania
◦ Dziesiątki rozszerzeń
◦ Setki modeli GPU




Ilość różnych funkcji w fixed pipeline i tak
stawia wymagania przed procesorami
graficznymi,
Dostęp do wielu tekstur i tak wymaga
szybkiej komunikacji z pamięcią,
W pewnym momencie i tak zaczęło się
opłacać umieszczać równoległe, coraz
bardziej uniwersalne jednostki obliczeniowe,
Naturalny krok – dystrybucja kodu
maszynowego do zwykłych operacji w
sterowniku, a potem ...

Własny kod do przetwarzania pozycji
wierzchołków,
Własny kod do obliczania koloru każdego
stawianego piksela,
Geometry shader, Hull shader

Język „wysokiego” poziomu


◦ DirectX:
◦ OpenGL:
HLSL
GLSL
http://diaryofagraphicsprogrammer.blogspot.com/2009/12/direct3d-11-overview.html
To tylko połowa drogi (i to ta mniejsza)
Tak naprawdę 4D – z jedynką na końcu
Ważne operacje:
 Iloczyn skalarny „dot product”
Dla dwóch wektorów jednostkowych wartość iloczynu
skalarnego to cos kąta pomiędzy wektorami,

Iloczyn wektorowy „cross product”
Zwraca wektor prostopadły

glVertex

DisplayList

Vertex Array

VBO






Uproszczenie składni w stosunku do C,
Kompilacja przez sterownik OpenGL,
Praca równoległa,
Możliwość łączenia z tradycyjną ścieżką
przetwarzania,
Macierze modelview, projekcji – nadal są
dostępne,
To samo z kolorami, współrzędnymi tekstur,
parametrami sprzętowych świateł,
 Wbudowane typy macierzowe/wektorowe
bvec3
A three-component Boolean vector.
bvec4
A four-component Boolean vector.
ivec2
A two-component integer vector.
...
vec4
A four-component floating-point vector.
mat3 or mat3x3
A 3×3 floating-point matrix.
mat4 or mat4x4
A 4×4 floating-point matrix.
mat2x3
A 2-column × 3-row floating-point matrix.
mat2x4
A 2-column × 4-row floating-point matrix.
...
mat4x3
A 4-column × 3-row floating-point matrix.
sampler1D
A special-purpose constant used by built-in texture
functions to
reference a specific 1D texture. It
can be declared only as a uniform or function argument.
sampler2D
A constant used for referencing a 2D texture.


Wraz z typami macierzowymi i wektorowymi
dostępne są operatory do operacji na nich
(mnożenie, dodawanie, geometria)
Wektory
◦ Długość, mnożenie (dot, cross), normalizacja
◦ Odbijanie, generowanie normalnych, ftransform

Dostęp do pól wektora vec2, vec3, vec4
◦ Pozycje xyzw
◦ Kolor rgba
◦ Koordynaty stpq

Macierze
◦ Mnożenie, transpozycja

Matematyka
◦ Trygonometria (funkcje, „arcusy”, deg<->rad)
◦ Potęgi, logarytmy, pierwiastki
◦ Obcinanie, clampowanie, reszta z dzielenia
rzeczywistego, interpolacja

Brak:
◦
◦
◦
◦

char, char*, string
#include
sizeof()
long, double, int8, ...
Zamiana typu – przez konstruktory
◦ int x= int(float)
◦ float x= float(int)
◦ int x= int(float)
lub
lub
lub
int(bool)
float(bool)
int(bool)

Modyfikatory typów
◦ const
◦ attribute
 Dla każdego wierzchołka
 Predefiniowane atrybuty wierchołków, np:
vec4 gl_Vertex, vec4 gl_Certex,
vec3 gl_Normal, vec4 gl_MultiTexCoordi, .
◦ uniform
 Dla całego aktualnego shadera
 Predefiniowane ...

Uniform – predefiniowane parametry:
◦ Macierze i macierze pochodne (odwrotne,
transponowane, ...)
◦ Parametry przestrzeni (near, far clipping)
◦ Parametry punktów
◦ ... (literatura)

Varying
◦ Do komunikacji z VS do FS
◦ Predefiniowane
 Gl_FrontColor, gl_BackColor, gl_TexCoord[],...


Tekstury – już były
Punkty:
◦ Tablice – Arrays
◦ VBO – Vertex Buffer Objects

Klasa PointSet
◦ Tryby rysowania 1..5
int shader_program;
...
GL.UseProgram(shader_program);
static public void CreateShaders(string vsFile, string fsFile,
out int vertexObject, out int fragmentObject,
out int program)
{
string vs = new StreamReader(vsFile).ReadToEnd();
string fs = new StreamReader(fsFile).ReadToEnd();
int status_code;
string info;
vertexObject = GL.CreateShader(ShaderType.VertexShader);
fragmentObject =
\
GL.CreateShader(ShaderType.FragmentShader);
...
}
...
// Compile vertex shader
GL.ShaderSource(vertexObject, vs);
GL.CompileShader(vertexObject);
GL.GetShaderInfoLog(vertexObject, out info);
GL.GetShader(vertexObject, ShaderParameter.CompileStatus, out status_code);
if (status_code != 1)
throw new ApplicationException(info);
// Compile fragment shader
GL.ShaderSource(fragmentObject, fs);
GL.CompileShader(fragmentObject);
GL.GetShaderInfoLog(fragmentObject, out info);
GL.GetShader(fragmentObject, ShaderParameter.CompileStatus, out status_code);
if (status_code != 1)
throw new ApplicationException(info);
...
static public void CreateShaders(string vsFile, string fsFile,
out int vertexObject, out int fragmentObject,
out int program)
{
...
program = GL.CreateProgram();
GL.AttachShader(program, fragmentObject);
GL.AttachShader(program, vertexObject);
GL.LinkProgram(program);
}
void main()
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}