Math 球体上的顶点置换会破坏网格

Math 球体上的顶点置换会破坏网格,math,3d,three.js,shader,vertex-shader,Math,3d,Three.js,Shader,Vertex Shader,我正在尝试使用着色器在球体上生成简单的噪波效果。 我尝试使用,但效果不是我所期望的,所以我基于Phong创建了自己的着色器 以下是我在顶点着色器中使用此代码得到的结果: attribute int index; uniform float time; vec3 newPosition = position + normal * vec3(sin((time * 0.001) * float(index)) * 0.05); gl_Position = projectionMatrix *

我正在尝试使用着色器在球体上生成简单的噪波效果。 我尝试使用,但效果不是我所期望的,所以我基于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
是当前经过的时间

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


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

球体很可能包含重复的顶点。去掉它们,你的着色器就会工作得很好。或者取消着色器对“索引”的依赖性。

最有可能的情况是,球体包含重复的顶点。去掉它们,你的着色器就会工作得很好。或者摆脱着色器对“索引”的依赖性。

这是标准的三个球体几何体。js尝试注释掉“*浮点(索引))*0.05”。如果洞消失了,那么Three.js将包含一个糟糕的球体。如果我这样做,我将取消波浪效果,只得到一个全局比例。但是的,洞消失了…好的。尝试使用position.x+position.y+position.z而不是index。我不喜欢THREE.js,但从它的文档中快速查看,我可能认为您可以创建自定义几何体,并将现有几何体复制到其中,并在其间执行各种几何体处理。例如,您可以只复制唯一的顶点,将旧的(非唯一的)索引构建到新的(唯一的)索引,并使用新索引相应地复制更新后的三角形。这是三的标准球体几何体。js请尝试注释掉“*float(index))*0.05”。如果洞消失了,那么Three.js将包含一个糟糕的球体。如果我这样做,我将取消波浪效果,只得到一个全局比例。但是的,洞消失了…好的。尝试使用position.x+position.y+position.z而不是index。我不喜欢THREE.js,但从它的文档中快速查看,我可能认为您可以创建自定义几何体,并将现有几何体复制到其中,并在其间执行各种几何体处理。例如,您可以只复制唯一的顶点,将旧的(非唯一的)索引构建到新的(唯一的)索引,并使用新索引相应地复制更新的三角形。我们也可以看到片段着色器吗?我个人并不认为只有顶点位置变换才能创建白色伪影。除非您将屏幕清除为白色。所以问题要么在顶点着色器的另一部分,要么在片段着色器中。我们也可以看到片段着色器吗?我个人并不认为只有顶点位置变换才能创建白色伪影。除非您将屏幕清除为白色。所以问题要么在顶点着色器的另一部分,要么在片段着色器中。