我正在尝试使用着色器在球体上制作简单的噪音效果。 我尝试使用ashima的perlin噪声,但效果不是我所期望的,所以我基于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
是当前经过的时间。
噪声效果正是我所期望的,但球体网格是开放的......
如何保持这种效果并保持球体网格关闭?
您的球体很可能包含重复的顶点。去掉它们,你的着色器就会正常工作。或者摆脱着色器对“索引”的依赖。
这是球体上接缝的位置。接缝和锐角会产生所谓的“边缘分裂”,其中顶点会变成双倍。
解决这个问题的方法有两个
或者,通过巧妙放置网格来隐藏接缝。 (这是最常见的选择)
或者,确保 UV 上的噪波平铺完美,因此沿分割线的顶点将等量位移并且不会显示间隙。
这本质上相当于网格上接缝的位移,其中纹理完美地平铺在它们上。