GLSL: Как обновить положение каждой вершины случайными значениями в вершинном шейдере? - PullRequest
0 голосов
/ 28 мая 2018

Я новичок в vertex-shader, и я использую threejs morphTargets и Points для рендеринга меша моего объекта, и я использую vertex-shader для рендеринга и анимации меша.

В каждой размещенной мною вершинеизображение сферы (скажем, молекулы), и я хочу, чтобы они вибрировали случайным образом в направлениях х и у.Я пытаюсь добавить некоторые случайные значения, чтобы они вибрировали с одинаковой скоростью в случайных направлениях.

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 голосов
/ 06 июня 2018

Используйте функцию шума , которая должна гарантировать непрерывность движения.

...