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

问题描述 投票:0回答:2

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

custom phong shader with broken dispalcement

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

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
是当前经过的时间。

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

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

math 3d three.js shader vertex-shader
2个回答
0
投票

您的球体很可能包含重复的顶点。去掉它们,你的着色器就会正常工作。或者摆脱着色器对“索引”的依赖。


0
投票

这是球体上接缝的位置。接缝和锐角会产生所谓的“边缘分裂”,其中顶点会变成双倍。

解决这个问题的方法有两个

  1. 或者,通过巧妙放置网格来隐藏接缝。 (这是最常见的选择)

  2. 或者,确保 UV 上的噪波平铺完美,因此沿分割线的顶点将等量位移并且不会显示间隙。

这本质上相当于网格上接缝的位移,其中纹理完美地平铺在它们上。

© www.soinside.com 2019 - 2024. All rights reserved.