.[ ČeskéHry.cz ].
Tessellační shadery - GLSL

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 12. duben 2013, 16:24:56    Předmět: Tessellační shadery - GLSL Odpovědět s citátem

Zdravím,

mám otázku týkající se tessellačních shaderů v GLSL. Napsal jsem jednoduchý shader (teprve se učím tessellátory používat). Ovšem celkem mě zaráží výsledek.

Takhle vypadá objekt bez tessellace:

A takhle s použitím tessellačních shaderů, při innerTesLevel = 1 a outerTesLevel = 1:


Neměli by vypadat stejně? Nebo mi něco uniká. Přikládám zdrojáky shaderů.
Vertex shader
kód:

#version 400

uniform mat4 mv;
uniform mat4 p;

in vec3 vertex;
in vec2 tc;
out vec2 tc_vs;
out vec3 outVertex;


void main() {
        outVertex = vertex;
        tc_vs = tc;
}


tessellation control
kód:

#version 400

layout(vertices = 3) out;
in vec2 tc_vs[];
out vec2 tc_tc[];
in vec3 outVertex[];
out vec3 tcOutVertex[];

uniform float TessLevelInner;
uniform float TessLevelOuter;

#define ID gl_InvocationID

void main() {
    tc_tc[ID] = tc_vs[ID];
    tcOutVertex[ID] = outVertex[ID];
    if (ID == 0) {
        gl_TessLevelInner[0] = TessLevelInner;
        gl_TessLevelOuter[0] = TessLevelOuter;
        gl_TessLevelOuter[1] = TessLevelOuter;
        gl_TessLevelOuter[2] = TessLevelOuter;
    }
}


tessellation evaluate
kód:

#version 400

layout (triangles, equal_spacing, ccw) in;
in vec3 tcOutVertex[];
in vec2 tc_tc[];
out vec2 tc_te;

uniform mat4 mv;
uniform mat4 p;

vec2 interpolate2D(vec2 v0, vec2 v1, vec2 v2)                                                   
{                                                                                               
    return vec2(gl_TessCoord.x) * v0 + vec2(gl_TessCoord.y) * v1 + vec2(gl_TessCoord.z) * v2;   


void main () {
  tc_te = interpolate2D(tc_tc[0],tc_tc[1],tc_tc[2]);
  vec3 p0 = gl_TessCoord.x * tcOutVertex[0];
  vec3 p1 = gl_TessCoord.y * tcOutVertex[1];
  vec3 p2 = gl_TessCoord.z * tcOutVertex[2];
  vec3 pos = normalize (p0 + p1 + p2);
  gl_Position = p * mv * vec4 (pos, 1);
}


a fragment shader jen nastaví barvu fragmentu. Uniká mi nějaké nastavení něčeho nebo mám ty tessellační shadery špatně? Díky moc.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 610

PříspěvekZaslal: 12. duben 2013, 16:32:13    Předmět: Re: Tessellační shadery - GLSL Odpovědět s citátem

Čau, no nejsem odborník na shadery, ale nemůže být problém v té normalizaci? Je to pozice a ne normála, ne? A výsledek vypadá trochu jako promítnutí na kouli, takže by to snad odpovídalo...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 12. duben 2013, 16:43:47    Předmět: Odpovědět s citátem

Ouha, díky tohle jsem uplně přehlédl! Opravdu to bylo tím!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mafian89



Založen: 21. 10. 2012
Příspěvky: 51

PříspěvekZaslal: 12. duben 2013, 18:15:30    Předmět: Odpovědět s citátem

Ještě jeden dotaz, když dělám parabolickou projekci pro vertex a počítám hloubku vertexu, tak stačí přesunout kód z vertex shaderu do evaluačního tessellačního shaderu (prostě počítat hloubku vertexu v evaluačním shaderu?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna