我怎样才能从我的 vertexshader 移动特定的顶点? (以及如何选择它们)

How can I move only specific vertices from my vertexshader ? (And how to choose them)

我创建了一个这样的正方形:

THREE.PlaneBufferGeometry(1, 1, 1, 50);

关于它 material 我使用了着色器 material。

THREE.ShaderMaterial()

在我的 vertexShader 函数中,我调用了一个 2d 噪声函数,它像这样移动我的正方形的每个顶点:

但最后我只想移动我方块的左侧。我认为如果我只调用 50 个第一个顶点或每 2 个调用 1 个顶点,这应该可行。

这是我的顶点着色器的代码:

void main() {

vUv = uv;

vec3 pos = position.xyz;

pos.x += noiseFunction(vec2(pos.y, time));

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

}

有谁知道我怎样才能 select 我的正方形的左侧顶点?谢谢

位置向量映射顶点位置在local-space,也就是说四边形的中心在位置(0,0)。

因此,如果您只想将这些更改应用到左侧的顶点,则需要检查顶点的 x 坐标是否为负数 x-space。

void main() {

   vUv = uv;

   vec3 pos = position.xyz;

   if ( pos.x < 0.0 ) {
       pos.x += noiseFunction(vec2(pos.y, time));
   }

   // to avoid conditional branching, remove the entire if-block
   // and replace it with the line below
   // pos.x += noiseFunction(vec2(pos.y, time)) * max(sign(-pos.x), 0.0);

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

}

我用了 if-statement 来阐明我的意思,但实际上你应该避免它。 这样你就可以防止 GPU 上的条件分支。