Mapowanie tekstur Mip-mapy (level of detail) Filtrowanie Multiteksturowanie
Korekcja perspektywy http://en.wikipedia.org/wiki/file:perspective_correct_texture_mapping.jpg
GL_TEXTURE_MIN_FILTER Zmniejszanie - jeden piksel wiele tekseli GL_TEXTURE_MAG_FILTER Powiększanie - jeden piksel jeden lub mniej tekseli GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T GL_CLAMP lub GL_REPEAT
Multiteksturowanie Zazwyczaj graficy starają się uzyskać jedną teksturę na model, ale nie zawsze się udaje Detail texture, Light mapping, Dodatkowa, prekalkulowana tekstura z oświetleniem, Bump mapping, Tekstura jako źródło normalnych, Renderowanie do tekstury Cienie Pierwsze GPGPU
Klasyczny 3 rodzaje świateł: Ambient, Diffuse, Specular glenable(gl_light0) Programmable Możliwość odtworzenia świateł ADS Inne efekty
Niezależnie od kąta obserwacji identyczna intensywność
Zasady odbicia - jak ambient, ale: Może być przesłonięte Słabnie z odległością
Jasność odbitego światła funkcją kąta pomiędzy promieniem padania a obserwacji Współczynnik potęgowy uwypukla/rozmywa odbicie
A L * M A A D L D * M *( L N) D S L * M *( R E) S S SH Bardziej zaawansowane techniki oświetlania pixel shadery
GL_MAX_LIGHTS >= 8 glenable(gl_lighting); glenable(gl_color_material) Ambient: gllightmodel Specular/Diffuse: gllight, glenable(gl_lightn) glmaterial*(strona, rodzaj światła, wartość):
gllight*(glenum light, Glenum pname, [****] param); Light: GL_LIGHT1, GL_LIGHT2,... pname: GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_DIRECTION GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION
Liczba świateł Lightmapy statyczne światła, Level of detail, Pixel Shadery Uproszczona interpolacja normalnych Predefiniowana funkcja jasności w zależności od wzajemnego kąta (specular)
Do powierzchni przypisana jest dodatkowa tekstura mapa głebokości
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: HLSL OpenGL: GLSL
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) lub int(bool) float x= float(int) lub float(bool) int x= int(float) lub 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);
#version 330 layout(location = 0)in vec4 vert; uniform mat4 projection; uniform mat4 view; uniform mat4 model; void main() { gl_position = projection * view * model * vert; }
#version 330 out vec4 fragcolor; void main() { fragcolor = vec4(1.0, 0.0, 0.0, 1.0); }