Няшная / Говнокод #27393 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 sobakapavlova, (Updated )

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

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

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

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

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

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

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8