2015-04-16 1 views
0

J'essaye d'obtenir un LOD fonctionnant avec le shader de tessellation. J'ai une sphère simple qui est en mosaïque avec un 5 anneaux et 5 secteurs au début. Je voudrais que la sphère augmente ses détails quand la caméra approche. Mais les nouvelles primitives générées par la tessellation sont cartographiées dans un plan plat, j'ai essayé de changer de position, mais je n'ai pas réussi à le faire fonctionner. Voici une illustration du problème:
enter image description here enter image description here enter image description here enter image description hereSphère tessellation nouvelle primitves position

Comme vous pouvez le voir, je ne reçois pas une sphère lorsque l'appareil photo est approroching. Voilà ce que je voudrais faire quand je suis près de la sphère:

enter image description here

Voici le code dans le shader d'évaluation tessellation:

void main(void){ 
    float u = gl_TessCoord.x; 
    float v = gl_TessCoord.y; 

    vec4 pos0 = gl_in[0].gl_Position; 
    vec4 pos1 = gl_in[1].gl_Position; 
    vec4 pos2 = gl_in[2].gl_Position; 
    vec4 pos3 = gl_in[3].gl_Position; 

    vec4 a = mix(pos1,pos0, u); 
    vec4 b = mix(pos2, pos3, u); 

    float l = length(a - b); 
    vec4 position = mix(a, b, v); 
    gl_Position = u_transformMatrix * position; 
    tes_positions = (u_transformMatrix * position).xyz; 
} 

geometry shader:

layout(triangles) in; 
layout(triangle_strip, max_vertices = 3) out; 
void main(void){ 

    for(int i=0; i<3; i++){ 
     vec4 pos = gl_in[i].gl_Position; 
     vec4 normal = normalize(pos); 

     pos = normal * u_radius; 
     gl_Position = u_projectionMatrix * u_viewMatrix * pos; 
     EmitVertex(); 
    } 

    EndPrimitive(); 
} 

Nous vous remercions de votre aide! Et si vous avez besoin d'autre chose, s'il vous plaît demandez-moi et je l'afficherai.

Répondre

0

Donc le @ slicer4ever trouve la réponse, tous les crédits vont à lui. (Merci d'ailleurs!). Il n'a pas de compte SO donc il ne peut pas le poster lui-même, malheureusement. Je le cite: your normalizing the vec4, which might be messing up the w component of your vertex?

Et voilà, la coordonnée w était le problème.

Et voici la sortie maintenant: enter image description here