1. Си / Говнокод #27393

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    //glsl vertex shader
    attribute float mass;
    uniform vec3 center;
    
    #define RAD 10.0
    const float D = RAD * 2.0;
    
    ///////////////////THIS///////////////////
    float repeat(float x, float z) {
      float dx = distance(x, z);
      while(dx > RAD) {
        if (x > z) {
          x -= D;
        } else {
          x += D;
        }
        dx = distance(x, z);
      }
      return x;
    }
    ///////////////////////////////////////////
    
    vec3 repeat(vec3 x, vec3 y) {
      return vec3(dr(x.x, y.x), dr(x.y, y.y), dr(x.z, y.z));
    }
    
    void main() {
      vec3 pos = position;
      pos.z += time;
      pos = repeat(pos, center);
      
      vec4 mvPosition = modelViewMatrix * vec4(pos, 1.0);
      gl_PointSize = 70.0 * mass;
      gl_Position = projectionMatrix * mvPosition;
    }

    По сути функция repeat должна повторять текстуру (как background-repeat: repeat в css) в зависимости от положения точки центра, короче: двигается центр, двигается и текстура за ним. Мне даже ума не хватает описать это, поэтому формулу сам искал, хватило ума только на это говно. Спустя несколько недель додумался до следующего говна, уже без цикла:
    float repeat(float x, float z) {
    float mp = x > z ? -1.0 : 1.0;
    z += RAD * mp;
    float dx = distance(x, z);
    float n = floor(dx / D) * D;
    x += n*mp;
    return x;
    }
    Тяжело не знать математики. Может местные шизы подскажут как называется такое поведение и как нормальную формулу?

    Запостил: sobakapavlova, 06 Мая 2021

    Комментарии (15) RSS

    • > Тяжело не знать математики.

      )))))))))
      Ответить
      • ну вон посмотри на физматного гомункула борманда и на нас - абортов вынужденных жертв
        Ответить
      • Именно потому я против "трёхмерная графика"

        Я писал 2Д игрушки, и ничего сложнее синуса мне не приходилось понимать
        Ответить
        • А как же матричная алгебра? Матрицы переходов?
          Ответить
          • для того, чтобы у тебя петух по экрану, бегал всего этого не нужно, а ничего серьезного в области грушек я не писал
            Ответить
    • > while в шейдере

      Удачи там с интеловскими интеграшками. Хотя может свежие уже научились.
      Ответить
    • > формулу

      Ставишь в настройках текстурного семплера VK_SAMPLER_ADDRESS_MODE_REPEAT (или как оно там в твоём графическом апи) и течёшь. GPU само разберётся.
      Ответить
      • у меня не текстура, в том-то и проблема, у меня есть система particles, чтобы не создавать их миллион, чтобы они покрывали все поле, я двигаю их как текстуру
        Ответить
    • mod спасёт отца русской демократии?
      P.S. Борманд правильно сказала про то, что OpenGL сам умеет в разные texture sampling, но вопрос был про формулу.
      Ответить
      • Ну руками медленнее будет, имхо. Если есть аппаратная фича, лучше её и юзать, а не грузить вычислительные ядра...

        Для семплера это повторение текстуры, скорее всего, вообще ничего не стоит.
        Ответить
      • роберта райта спасет только счет древних шизов
        Ответить

    Добавить комментарий