我怎样才能从我的 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 上的条件分支。
我创建了一个这样的正方形:
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 上的条件分支。