GLSL:如何在顶点着色器中使用随机值更新每个顶点的位置?

时间:2018-05-28 13:41:11

标签: three.js glsl blender vertex-shader

我是vertex-shader的新手,我使用threejs morphTargets和Points材质来渲染我的对象网格,我使用顶点着色器渲染和动画网格。

在每个顶点我放置了一个球体图像(比如分子),我希望它们在x和y方向上随机振动。我试图添加一些随机值,以便它们在随机方向上以相同的速率振动。

void main() {

    //Morph the position based on morphTargets
    vec3 morphed = vec3( 0.0 , 0.0 , 0.0 );
    morphed += ( morphTarget0 - position ) * morphTargetInfluences[0];
    morphed += position;

    // // vibrate the molecules based on temperature
     float degrees = temperature + 60.0;
     float amplitude = degrees + 100.0 / degrees;
     float rand1 = (random * rand(position.xy)  * amplitude) * 0.00001;
     morphed.x = morphed.x + rand1;
     morphed.y = morphed.y + rand1;
    //morphed.z = morphed.z + rand1;

    gl_Position = projectionMatrix * modelViewMatrix * vec4( morphed, 1.0 );
}

上面的代码是在同一个方向上振动分子,看起来整个分子容器都在移动而不是分子。

那么如何获得每个顶点的随机振动?

1 个答案:

答案 0 :(得分:0)

使用noise function,这应该保证动作是连续的。