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:
Sphè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:
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.