球体上的顶点位移破坏了网格

Vertex displacement on sphere break the mesh

我正在尝试使用着色器在球体上制作简单的噪波效果。 我尝试使用 ashima's perlin noise 但效果不是我预期的,所以我基于 Phong 创建了自己的着色器。

这是我在顶点着色器中使用此代码得到的结果:

attribute int index;
uniform float time;

vec3 newPosition = position + normal * vec3(sin((time * 0.001) * float(index)) * 0.05);

gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);

其中 index 是顶点的索引,time 当前经过的时间。

噪声效果正是我所期望的,但是球体网格是打开的...

如何保持这种效果并保持球体网格闭合?

您的球体很可能包含重复的顶点。摆脱它们,您的着色器将运行良好。或者摆脱你的着色器对 "index".

的依赖