1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||||||||||
1 | |||||||||||
Баг в коде Reaction Diffusion Gray-Scott model11.12.2020, 02:04. Показов 3271. Ответов 47
Изначально первоисточник формул https://www.karlsims.com/rd.html
Как сделать тоже самое в коде С++ получить значение цвета параметр “c” из кода javascript. Пытаюсь сделать этот код Reaction Diffusion Gray-Scott model https://youtu.be/BV9ny785UNc?t=2315 что за
это типа нормализация? А где поиск макс мин значения во всем массиве значений? Как это вообще возможно. Или это обрезка значений? https://www.arduino.cc/referen... constrain/ x: if x is between a and b. a: if x is less than a. b: if x is greater than b. Тогда работать по идее не должно вообще. Вроде что-то рисует но проблема с окрасом. Нужен окрас всем каналам float от 0 до 1. Самое забавное что делал сам другой алгоритм с просто описания из Cyclic_Symmetric_Multi-Scale_Turing_Patterns.pdf Один паттерн Тьюринга,перевод гугла. «В этой модели есть только одно« вещество », которое играет роль пигментации, активатор и ингибитор. Он представлен одним числом с плавающей запятой для каждого элемента прямоугольный массив. Элементы массива можно рассматривать как эквивалентные ячейкам в дискретном модель, предложенная Тьюрингом в его статье. Число с плавающей запятой, представляющее концентрацию вещество становится значением пикселя в результирующем изображении шкалы серого. Распространение моделируется с помощью среднее значение определенной области вокруг каждого элемента, меньшей площади для активатора и большей область для ингибитора. Простое правило итеративно применяется ко всем элементам массива для (обычно) сотен временных шагов: если средняя концентрация в меньшей области больше, чем средняя концентрация в большей области, увеличьте значение на небольшую величину, в противном случае уменьшите значение на небольшую величину. В на каждом временном шаге полученные значения повторно нормализуются в несколько произвольный диапазон от -1,0 до 1,0, чтобы избежать "убегай". Чтобы избежать краевых эффектов, накладываются периодические граничные условия ». Сделал две свертки там с ядрами 3х3 и 5х5 Что –то рисовало. А этот код вроде намного проще и ядро всего 3х3, и на сайте большое разнообразие форм.Не знаю как исправить код.
1
|
11.12.2020, 02:04 | |
Ответы с готовыми решениями:
47
Heat equaton, thermal diffusion equation, теплопроводность Создание input с привязкой к ng-model программно(в коде функции) Баг в коде баг в коде или уязвимостьо |
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
16.12.2020, 03:32 [ТС] | 41 |
Намного быстрей. С шейдертоя то мандельбульб рендерит.
Тут похоже баг, пролетает первые N кадров на старте. А не между фреймами…ну то такое. Главное что пашет, осталось только разбираться с этим всем. Скините проект где эти шейдеры? Есть vs2012 и vs2008.
0
|
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
|
|
16.12.2020, 09:24 | 42 |
Быть такого не может...
Скину просто файлы, т.к. проект у меня CMake со специфичными настройками. Просто создадите свой пустой проект, присоедините к нему все файлы. От вас нужна только библиотека GLFW, слинковаться с ней(и её зависимостями) и с opengl32.lib. Папка с шейдерами у вас уже есть. Нужна поддержка С++11, переписывать я не буду, т.е. желательно vs2015(а вообще, скачайте себе VSCode + MinGW + CMake + CMake Tools for VSCode, это примерно 600Мб всё вместе и будет поддерживать даже С++20 частично)
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
16.12.2020, 12:44 [ТС] | 43 |
Может неправильно вызываю? --skip-frames 10000 вообще не влияет.
Сделал 1.bat рядом с exe main.exe --skip-frames 10000 На вашем компе меняется скорость роста визуально сильно? Может это новый баг? Может скобки нужны, а вообще зачем там принимать команды от строки? Хватит в шейдерах задать это.
0
|
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
|
|
16.12.2020, 14:06 | 44 |
Не сильно(у меня при пропуске ~20000 кадров экран обновляется раз в секунду, т.е. ~20000 проходов вычислений в секунду, разница не особо ощутима визуально, ну а конкретные замеры я не делал), для более слабых машин может повлиять. Суть простая:
Обычный режим (skipFrames = 1): 1 проход вычислений (feedbackPass)Пропуск 1000 кадров (skipFrames = 1000): 1000 проходов вычислений (feedbackPass)Т.е. грубо, на 1000 команд рисования, в первом случае - на высисление тратится только половина, а во втором - практически все команды это вычисления. В шейдерах на скорость вычислений вы никак не повлияете, кроме как уменьшением количества инструкций. Речь идёт именно о скорости вычислений, а не о "скорости" происходящего на экране(хотя оно и взаимосвязано).
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||||
16.12.2020, 14:38 [ТС] | 45 | |||||
Если пропуск =0 то заполнение экрана например секунд 60.
Если пропуск =20000 то заполнение экрана должно быть мгновенно либо упираться в скорость железа. Вот в этой проге Баг в коде Reaction Diffusion Gray-Scott model int iterNoRender=3;//сколько итераций без рендера пропускать, //ускорение анимации Означает пропуск N итераций без рендера. Между фреймами. Запустите и поменяйте iterNoRender =1 или iterNoRender =4. Разница видна визуально в анимации. Добавлено через 8 минут Может кто знает что это получилось за алгоритм? Это эксперименты с самодельной реакцией диффузии по описанию в тексте и получился странный код генерирующий очень сложное поведение неких клеточных автоматов через простое правило. В проге есть анимация это процедурное построение рисунка, обходит сложные участки плоскости которые нетривиально запрограммировать. Баг в коде Reaction Diffusion Gray-Scott model Сильно меняется форма рисунков от параметров.
0
|
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
|
|
16.12.2020, 14:38 | 46 |
Если вы вручную поставите 0, то рендерится вообще ничего не будет По умолчанию 1. В исходниках можете посмотреть, как работает.
Вот у меня именно так, первый кадр - квадратик в центре, через секунду смена кадра и поле уже заполнено, это всегда упирается в скорость железа. Кстати об исходниках, если у вас трудности со сборокой и линковкой, то вот простой проект CMake, исходники GLFW внутри. Там же "видео" инструкция, как собрать проект в пару кликов для студии вместе с библиотекой. Вам понадобится CMake Всё просто.
2
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
16.12.2020, 14:54 [ТС] | 47 |
Вот в чем дело, в старой версии такой баг. В новой пашет. Причем пашет только скип 1000 странно.
Добавлено через 7 минут Вот еще в чем дело, у меня указан пропуск между кадрами который 60 раз в сек идет, а у вас пропуск каждую секунду. Поэтому у меня плавно идет.
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
24.12.2020, 21:26 [ТС] | 48 |
Похоже на диффузию только немного угловатая. Наверно это ее какой-то подвид. Может размыть и будет похоже.
Cделал вращение ядер свертки как функция от X строки и интерполяцию ближайшего соседа. Я думал если крутануть ядро то эти отростки линий будут под разными углами идти но не совсем так. Сильно мутирует форма. Вот нет вращения ядер. Вот крутит за проход строки из 200 значений до 0.05 от полного оборота. Слева направо угол поворота мал и округление не искажает ядро потому выглядит как вращения нет, дальше угол проходит некоторый порог и искажается форма ближе к правому участку. Похоже причина в самом методе интерполяции, ядро часто читает повторные ячейки массива и сильно искажается все из-за округления ближайшего соседа. Вот тут наглядно видно, поворот ядра 5х5 на 360. Получается далеко не квадратное ядро + повторное чтение неправильных ячеек свертки. Отсюда сильная мутация формы. Вот полный оборот ядра. Сейчас как эксперимент доделываю билинейную интерполяцию. Она должна быть по идее намного лучше т.к. ядро должно быть стабильно по форме. Не получается сделать утолщения линий в процессе рисования, единственно сильно влияет множитель суммы компонентов ядра t2=1.25. Если менять его в процессе итераций то срабатывает утолщение t2=1.15 но потом когда ставлю норма t2=1.25 чтобы не залило все толстыми белыми кусками алгоритм пожирает все утолщения и снова превращает все в узкие полосы…Хз как можно сделать. На этапе дебага ошибочно плюсовал разные компоненты ядра повторно...это приводило к утолщению полос но не могу повторить теперь =)). Рисует бывает наоборот утончая линии, какие-то разводки дорожек микросхем. А хотелось бы плавные линии и колебания толщин линий. Может нужны опыты с реакцией диффузии.. хз. Мне тут понравилось что алгоритм быстрый и рисует сложные лабиринты. Может сделать вести типа кисть концентрации и алгоритм по идее будет расти за кистью.
0
|
24.12.2020, 21:26 | |
24.12.2020, 21:26 | |
Помогаю со студенческими работами здесь
48
Непонятный баг в правильном коде Баг в коде (статическая структура) Баг stm8s003 или ошибка в коде? Не могу найти баг в своем коде Баг в коде(псевдо-рандомные числа) Баг в коде(псевдо-рандомные числа) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |