Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
mafian89
Založen: 21. 10. 2012 Příspěvky: 51
|
Zaslal: 12. duben 2013, 16:24:56 Předmět: Tessellační shadery - GLSL |
|
|
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 |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 12. duben 2013, 16:32:13 Předmět: Re: Tessellační shadery - GLSL |
|
|
Č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 |
|
 |
mafian89
Založen: 21. 10. 2012 Příspěvky: 51
|
Zaslal: 12. duben 2013, 16:43:47 Předmět: |
|
|
Ouha, díky tohle jsem uplně přehlédl! Opravdu to bylo tím! |
|
Návrat nahoru |
|
 |
mafian89
Založen: 21. 10. 2012 Příspěvky: 51
|
Zaslal: 12. duben 2013, 18:15:30 Předmět: |
|
|
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 |
|
 |
|
|
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