|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||||||||||
Баг в коде Reaction Diffusion Gray-Scott model11.12.2020, 02:04. Показов 4552. Ответов 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 программно(в коде функции) Баг в коде |
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||||
| 13.12.2020, 17:21 [ТС] | ||||||
|
zayats80888, Вроде сделал и ошибок нет но рисует ерунду. Где-то алгоритмическая ошибка? Редактировал код с поста 18.
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 13.12.2020, 17:31 | ||
|
Более наглядно: https://wandbox.org/permlink/leFOckYIUM7wTYRV У вас функции laplace обращаются напрямую, что не правильно. Добавлено через 4 минуты Ну и плюсом переименуйте сами массивы, например как у меня и не обращайтесь к ним, тогда сразу увидите ошибки.
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 13.12.2020, 19:03 [ТС] | |
|
zayats80888, Cделал по другому, вместо свапа указателей if(bool) {код1} else {код2} ветвление кода и переключение на каждой итерации тоже что и с указателями рисует ерунду... видимо тут хитрый свап очень нужен))). Не понимаю зачем... оставлю пока эту загадку.
Странно с указателями вроде как намного быстрей едет хоть и рисует бред.
0
|
|
|
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
||||||||||||
| 13.12.2020, 19:35 | ||||||||||||
|
//с массивами
0
|
||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 13.12.2020, 20:59 | |||||||
|
Ваш код из поста №18. Просто вставил указатели. Убрал "дикую дичь" с рекурсией и сделал нормальную логику glut. Рисует то-же самое, только теперь на события мыши реагирует и не зависает. Основные изменения пометил восклицательными знаками. Кликните здесь для просмотра всего текста
1
|
|||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 13.12.2020, 22:07 [ТС] | |
|
zayats80888, Да появился отклик на закрытие мышкой и не виснет, но субъективно считает как намного дольше и тяжелей. В общем такие расчеты не для CPU…
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 14.12.2020, 23:07 | ||
|
Попробуйте запустить у себя. Там OpenGL2.1 + загрузка расширений ARB_framebuffer_object, ARB_texture_rg, ARB_texture_rectangle и ARB_texture_float. Если не запустится, покажите вывод консоли(ну и я помню вы запускали glewInfo, так вот, если не трудно, скиньте файл, который она сгенерировала, что бы посмотреть, что у вас там доступно).
1
|
||
| 14.12.2020, 23:53 | |
|
Не по теме: zayats80888, а как вам мой вариант? мне интересно запустится ли и какой вариант производительнее, код изменился после того как здесь выкладывал
0
|
|
| 15.12.2020, 00:11 | |
|
Не по теме: alecss131, к сожалению она у меня крашится (вроде, модуль драйвера ATI). Если что, видеокарта у меня старая, но вулкан поддерживает. Х.З. что не так. Надо было обработку ошибок добавить.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||||||||||||||||
| 15.12.2020, 01:26 [ТС] | ||||||||||||||||
|
zayats80888, Краш.
glewinfo.txt visualinfo.txt 1.zip Переписал код на другой алгоритм. Два квадратных ядра свертки и можно задавать веса компонентам ядра раздельно и пропускать итерации без рендера
Веса компонентов взял неизвестно откуда, просто погуглил картинки и визуально вижу что симметричное ядро 5 на 5 подходит… Пересчитывал хитрые коэффициенты множители суммы каждому ядру чтобы если все значения которые читает ядро равны 1 то и сумма после ядра равна 1.
Заметил странность, если не нормализовать значения после conectratCorrection() применяя conectratNormalization() То рисует однотипные рисунки, настройки никак не влияют. Зато после нормализации conectratNormalization() Очень разнообразны рисунки. Мистика. Растут из одного пикселя как снежинки. Заполняя все немыслимые уголки.
1
|
||||||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 15.12.2020, 09:07 | ||
|
Все необходимые расширения у вас поддерживаются, они загрузились. Шейдеры скомпилировались, но вот почему не линкуются - мне реально не понятно... Ну и драйвер NVidia, как обычно, ничего полезного не сообщил ![]() Вот отладочный вариант сборки с дополнительным выводом и проверками(ну и шейдеры чутка причесал, хотя там и так всё согласно спецификации было). Попробуйте его, мне реально интересно, что не так с линковкой.
0
|
||
| 15.12.2020, 11:52 | |
|
Не по теме: zayats80888, вот новая версия с дебагом, избавился от некоторых вещей, например std430 в ubo, барьер после вычислительного шейдера (так как только 1 картинка используется и для вычислений и для рисования в кадре, а куда происходит запись читается только в следующем кадре, то есть по сути одновременно и рисования и вычисления или нет?), фрагментный шейдер почти один в один ваш)
0
|
|
| 15.12.2020, 12:29 | |
|
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 15.12.2020, 13:53 [ТС] | |
|
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 15.12.2020, 15:23 [ТС] | |
|
zayats80888, Может нужно тестить такие проги по возрастанию сложности пока работает?
1)открыть пустое окно. 2)закрасить 1 пиксель 3)нарисовать квадрат на экране, массив пикселей в цикле одним цветом. 4)массив пикселей с градиентным окрасом 5)анимация окраса пикселей по таймеру. 6) простеший GUI, слайдер влияет на закон окраса. Самое простое взять 3 синусоиды и сдвигать фазу слайдером, f(x) окрас. 7)слайдер и пару кнопок сторонний GUI, NanoGUI, imgui. Добавлено через 1 час 17 минут Создал тему по неясностям с ядрами свертки по сетке, вот может в этом баг. Круглое ядро свертки А может нужно брать больше диаметр ядра который позволит лучше аппроксимировать круг…А может нужно просто брать вот эти готовые формулы и не выдумывать велик т.к. это имеет научную основу и работает с ядрами 3 на 3… Еще кроме gray-scott есть lotka-volterra reaction-diffusion gierer-meinhardt reaction-diffusion fitzhugh-nagumo reaction-diffusion brusselator reaction-diffusion barkley reaction-diffusion но оставлю ка я их в покое =)).
0
|
|
|
Модератор
|
||
| 15.12.2020, 16:57 | ||
|
Excalibur921, шейдеры это грубо говоря ручная реализация того что в старых версиях делалось драверами (или похожим)
обычно в шейдерах усложнение обычно идет так: окно - треугольник - куб - сложная модель и тд а гуи на чистом opengl никто не пишет, вместо таймера используется бесконечный цикл с паузами или вертикальная синхронизация Не по теме: zayats80888, вот исходники, заодно приложу компилятор шейдеров (вроде никаких dll не требует, если что взял его из vulkan sdk, который стоит, но пользуюсь пока только этим ехе с батником), не буду отрицать что может где ошибка в плюсах. вернул опцию выбора в коде между бинарными и текстовыми шейдерами, ато с std430 в ubo без компиляции не работали
0
|
||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||
| 15.12.2020, 19:55 | |||||||
|
Ну и это не то ПО, с которым вообще стоит заморачиваться(я про GUI и прочее), там есть опции для запуска из консоли( main --help из консоли) + сами шейдеры можно редактировать, этого вполне хватает для "детских" экспериментов.Попробуйте такой шейдер feedbackPass.frag.glsl ему подсунуть:
Не по теме: alecss131, ок, позже гляну.
1
|
|||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 15.12.2020, 20:09 [ТС] | |
|
zayats80888, Работает.
Когда читал про создание старых шейдеров то там в код вставляли мелкие команды проверяющие все значения переменных и корректную работу всех частей кода меняя цвет куска текстуры или двигая пиксель.
1
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 15.12.2020, 20:38 [ТС] | |
|
А возможно добавить редактирование палитры в реальном времени вот как тут? Кстати что за GUI?
https://pmneila.github.io/jsexp/grayscott/
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||||
| 15.12.2020, 23:07 | ||||||||
|
Ну и как производительность в реальном времени, быстрее чем на процессоре? Для ускорения расчетов можете попробовать пропускать кадры, как вы делали. Для этого запускайте программу из консоли с опцией --skip-frames. Например, для пропуска каждой тысячи кадров: main.exe --skip-frames 1000Не по теме:
--- Не по теме:
Кликните здесь для просмотра всего текста
0
|
||||||||
| 15.12.2020, 23:07 | |
|
Помогаю со студенческими работами здесь
40
баг в коде или уязвимостьо Непонятный баг в правильном коде Баг в коде (статическая структура) Баг stm8s003 или ошибка в коде? Не могу найти баг в своем коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|