Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
OpenGL IV
2
Tesszelátor
3
Tesszelátor Mire jó? A geometria adaptív felosztására
A geometria tömörítésére Displacement eljárások támogatására Level of detail Sziluett simítás Stb…
4
Tesszelátor Három shader lépcső Új geometriai primitív
Tesselation Control Shader Tesselation Primitive Generator Tesselation Evaluation Shader Új geometriai primitív GL_PATCHES Teljesen a felhasználóra van bízva az értelmezés glPatchParameteri(GL_PATCH_VERTICES, vertNum);
5
Tesselation Control Shader
A patch vertexein dolgozik A koordinátákból felület reprezentáció layout( vertices = n ) out; Felbontási paraméterek gl_TessLevelInner[2] gl_TessLevelOuter[4 ] Kimenő vertexenként hívódik
6
Tesselation Control Shader
Bemeneti paraméterek Felhasználó által definiált Beépített in vec2 texCoord[]; // A patch definíciónak megfelelő elemszám. in int gl_PatchVerticesIn; // A patch-hoz tartozó vertexek száma. in int gl_PrimitiveID; // A patch sorszáma. in int gl_InvocationID; // A vertex patch-en belüli sorszáma. in gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; } gl_in[gl_MaxPatchVertices];
7
Tesselation Control Shader
Kimeneti paraméterek Felhasználó által definiált Beépített Szinkronizáció out vec2 texCoord[]; // A patch definíciónak megfelelő elemszám. patch out vec4 data; // Teljes patch-re vonatkozó adatok. patch out float gl_TessLevelOuter[4]; // Külső felbontási paraméter. patch out float gl_TessLevelInner[2]; // Belső felbontási paraméter. out gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; } gl_out[]; barrier(); // A TCS hívások között szinkronizál.
8
Tesselation Primitive Generator
Fix funkciójú lépcső A TCS-ből érkező vertexekből generál háromszögeket négyszögeket szakaszokat Kimenete u,v,w baricentrikus koordináták
9
Tesselation Evaluation Shader
A felosztott geometriát állítja elő Bemenetei A TCS kimenete A TPG által előállított baricentrikus koordináták A felosztás értelmezése Csak a primitív típus kötelező Kimenete Egy vertexhez tartozó tulajdonságok layout(primitív típus, felosztás típus, irányítás, pont generálás) in;
10
Tesselation Evaluation Shader
Primitív típus isolines a patch párhuzamos szakaszok csoportja a kimenet szakaszok csoportja triangles a patch egy háromszög a kimenet háromszögek csoportja quads a patch egy négyszög
11
Tesselation Evaluation Shader
Felosztás típus equal_spacing a vertexek között azonos távolság fractional_even_spacing páratlan számú szegmens kettő kivételével fix hosszú szegmensek a maradék a két szélső darabra kerül egyenlően fractional_odd_spacing páros számú szegmens a többi azonos az előző esettel
12
Tesselation Evaluation Shader
Bejárás cw: az óra járásának megfelelő ccw: az óra járásával ellentétes csak az absztrakt patch vertexeinek sorrendjét adja meg a kimenet ettől független Pont generálás point_mode: a kimenet pont primitív legyen
13
Tesselation Evaluation Shader
Bemeneti paraméterek Felhasználó által definiált Beépített TCS paraméterek in vec2 texCoord[]; // A patch definíciónak megfelelő elemszám. patch in vec4 data; // A teljes patch-re közös adat. in vec3 gl_TessCoord; // Absztrakt koordináták a TPG-ből. in int gl_PatchVerticesIn; // A patch-hoz tartozó vertexek száma. in int gl_PrimitiveID; // A patch sorszáma. in gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; } gl_in[gl_MaxPatchVertices]; patch in float gl_TessLevelOuter[4]; // Külső felbontási paraméter. patch in float gl_TessLevelInner[2]; // Belső felbontási paraméter.
14
Tesselation Evaluation Shader
Kimeneti paraméterek Felhasználó által definiált Beépített out vec2 texCoord; // A vertexhez tartozó adat. out gl_PerVertex { vec4 gl_Position; float gl_PointSize; float gl_ClipDistance[]; } gl_out[];
15
TES Topológia Háromszög (u,v,w) = (0, 1, 0) OL0 OL2 IL0
16
TES Topológia Négyszög (u,v) = (0, 1) (u,v) = (1, 1) OL3 IL0 OL0 IL1
17
TES Topológia Szakaszok (u,v) = (0, 1) (u,v) = (1, 1) OL0
18
Példa: Háromszög felosztás
19
Példa: Háromszög felosztás
20
Példa: Háromszög felosztás
Tesselation Control Shader #version 430 layout(vertices = 3) out; in vec3 tPosition[]; out vec3 tcPosition[]; uniform int tessLevelInner; uniform int tessLevelOuter; void main(){ tcPosition[gl_InvocationID] = tPosition[gl_InvocationID]; if(gl_InvocationID == 0){ gl_TessLevelInner[0] = tessLevelInner; gl_TessLevelOuter[0] = tessLevelOuter; gl_TessLevelOuter[1] = tessLevelOuter; gl_TessLevelOuter[2] = tessLevelOuter; }
21
Példa: Háromszög felosztás
Tesselation Evaluation Shader #version 430 layout(triangles, equal_spacing, cw) in; uniform mat4 MV; in vec3 tcPosition[]; out vec3 tePosition; void main() { vec3 p0 = gl_TessCoord.x * tcPosition[0]; vec3 p1 = gl_TessCoord.y * tcPosition[1]; vec3 p2 = gl_TessCoord.z * tcPosition[2]; tePosition = p0 + p1 + p2; gl_Position = MV * vec4(tePosition, 1); }
22
Feladat Szabályos rács generálása Távolság alapján felosztás (LoD)
Magasságmező megjelenítés
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.