Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

OpenGL IV.

Hasonló előadás


Az előadások a következő témára: "OpenGL IV."— Előadás másolata:

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


Letölteni ppt "OpenGL IV."

Hasonló előadás


Google Hirdetések