Comments 9
Содержание статьи, видимо, интересно и может быть даже довольно практически полезно для меня лично. Но, к сожалению, статья вовсе не рассчитана на то, чтобы я её понял. Она будет понятна только очень узкому кругу читателей, которые уже запанибрата с marching cubes (мне, например, понадобится провести некоторое время в википедии и других источниках, чтобы вспомнить, что этот алгоритм вообще делает) и другими тонкостями темы. Чтобы статья читалась лучше, она должна быть лучше структурирована. Нужно введение, в котором объясняется, что и как вообще делает предложенный алгоритм, начиная с основной идеи, изложенной в том числе с помощью предельно понятных схематичных иллюстраций. Не стоит исходить из предположения, что читатель в деталях знаком с тем же алгоритмом marching cubes: следует вкратце изложить, для чего он нужен, на каком принципе основан и привести ссылку на более подробное описание для интересующихся. Далеко не каждый заинтересовавшийся будет использовать именно JavaScript, многие с этим языком попросту незнакомы, поэтому желательно изложить суть и особенности реализации алгоритма так, чтобы свести к минимуму иллюстративную роль фрагментов кода.
+8
Статья рассчитана чтобы ее поняло большинство, а не конкретно вы. (Здесь не частные уроки, а общий материал, с котором как и везде при самообучении придется разбираться) Стоит это того или нет должно быть ясно из краткого вступления, перечисляющего возможности алгоритма, скриншотов результата и живой демки.
https://ru.wikipedia.org/wiki/Marching_squares — как написано в статье, к делу не относиться! Он упомянут, что бы его НЕ читать!
Фрагменты кода в статьях я привожу на JS т.к. этот язык очень популярен и многие знают именно его (не на всех же языках код приводить). Весь код в статью был добавлен последним делом, именно в целях дополнительной понятности (и отмены необходимости скакать на гитхаб в другой вкладке).
В то же время вся суть алгоритма, на сколько мне видится, последовательно объясняется (спойлеры читают те, кто хотят углубить понимание).
Пожалуйста, лучше структурируйте ваш комментарий. Иначе, не указывая конкретно, что вам не понятно, я не смогу вам помочь.
Каких иллюстраций кроме имеющихся основных, по вашему мнению не хватает?
Что кроме имеющегося перечисления возможностей нужно внести во введение? Уже сейчас, в статье сразу после перечисления возможных применений, (без спойлеров) идет объяснение, «что и как вообще делает предложенный алгоритм», и между прочем именно с основной идеи и начиная:
— Используется очень простая схема сглаживания тайлов. Это достигается за счет переходной текстуры, которая вставляется между любыми двумя другими, тайлы переходов в которую должны быть нарисованы для всех остальных текстур.
— Алгоритм разбивает клетки на четвертинки 2х2, каждую из них заполняет более маленьким ориентированным тайлом из заготовленного набора.
Очень просто написать «я не понял, — материал слаб». Но в критике желательна конкретика.
Иначе я лишь внесу правки которые вызовут больше вопросов у других…
Кстати говоря, я ожидаю что совместно здесь, многие прояснят ситуацию и помогут действительно улучшить материал.
https://ru.wikipedia.org/wiki/Marching_squares — как написано в статье, к делу не относиться! Он упомянут, что бы его НЕ читать!
Фрагменты кода в статьях я привожу на JS т.к. этот язык очень популярен и многие знают именно его (не на всех же языках код приводить). Весь код в статью был добавлен последним делом, именно в целях дополнительной понятности (и отмены необходимости скакать на гитхаб в другой вкладке).
В то же время вся суть алгоритма, на сколько мне видится, последовательно объясняется (спойлеры читают те, кто хотят углубить понимание).
Пожалуйста, лучше структурируйте ваш комментарий. Иначе, не указывая конкретно, что вам не понятно, я не смогу вам помочь.
Каких иллюстраций кроме имеющихся основных, по вашему мнению не хватает?
Что кроме имеющегося перечисления возможностей нужно внести во введение? Уже сейчас, в статье сразу после перечисления возможных применений, (без спойлеров) идет объяснение, «что и как вообще делает предложенный алгоритм», и между прочем именно с основной идеи и начиная:
— Используется очень простая схема сглаживания тайлов. Это достигается за счет переходной текстуры, которая вставляется между любыми двумя другими, тайлы переходов в которую должны быть нарисованы для всех остальных текстур.
— Алгоритм разбивает клетки на четвертинки 2х2, каждую из них заполняет более маленьким ориентированным тайлом из заготовленного набора.
Очень просто написать «я не понял, — материал слаб». Но в критике желательна конкретика.
Иначе я лишь внесу правки которые вызовут больше вопросов у других…
Кстати говоря, я ожидаю что совместно здесь, многие прояснят ситуацию и помогут действительно улучшить материал.
0
Ну хорошо, вот вам немного конструктивной критики.
Для начала, если вы действительно пишете для большинства, нужно пояснять термины. Что такое тайл я худо-бедно вспомнил, а вот что такое сглаживание тайлов — непонятно. Так же непонятно что такое сабтайлы, переходные тайлы, сабклетки, логическая изолиния и т.п. Ну то есть к середине статьи (а не там, где эти термины даны) у меня появились догадки, но что если они не совпадают с тем, что вы имели в виду?
«Ясно, что «сглаживая» регулярные клетки визуально, одни будут наползать на другие.» — совсем не ясно что имеется в виду.
Есть много предложений, которые вообще написаны не по-русски.
«Это достигается за счет переходной текстуры, которая вставляется между любыми двумя другими, тайлы переходов в которую должны быть нарисованы для всех остальных текстур.» — я перечитал раз 5, но так и не понял что имеется в виду (ещё больше дезориентировало следующее предложение, в котором утверждается, что это какое-то ограничение).
Иллюстрации. Например в начале была бы уместна иллюстрация, показывающая зачем это вообще все нужно (ну то есть что этот алгоритм вообще делает).
И да, лично я ваш код так и не смог в голове распарсить.
ps. Ох, не люблю писать критику, все как-то в резких выражениях всегда получается =)
upd. И ещё, зря вы картинку обновили, и так на ней было слишком много чего и непонятно куда там нужно смотреть, а вы добавили ещё больше информации. Не нужно все валить в одну кучу.
Для начала, если вы действительно пишете для большинства, нужно пояснять термины. Что такое тайл я худо-бедно вспомнил, а вот что такое сглаживание тайлов — непонятно. Так же непонятно что такое сабтайлы, переходные тайлы, сабклетки, логическая изолиния и т.п. Ну то есть к середине статьи (а не там, где эти термины даны) у меня появились догадки, но что если они не совпадают с тем, что вы имели в виду?
«Ясно, что «сглаживая» регулярные клетки визуально, одни будут наползать на другие.» — совсем не ясно что имеется в виду.
Есть много предложений, которые вообще написаны не по-русски.
«Это достигается за счет переходной текстуры, которая вставляется между любыми двумя другими, тайлы переходов в которую должны быть нарисованы для всех остальных текстур.» — я перечитал раз 5, но так и не понял что имеется в виду (ещё больше дезориентировало следующее предложение, в котором утверждается, что это какое-то ограничение).
Иллюстрации. Например в начале была бы уместна иллюстрация, показывающая зачем это вообще все нужно (ну то есть что этот алгоритм вообще делает).
И да, лично я ваш код так и не смог в голове распарсить.
ps. Ох, не люблю писать критику, все как-то в резких выражениях всегда получается =)
upd. И ещё, зря вы картинку обновили, и так на ней было слишком много чего и непонятно куда там нужно смотреть, а вы добавили ещё больше информации. Не нужно все валить в одну кучу.
+1
ps. Ох, не люблю писать критику, все как-то в резких выражениях всегда получается =)
Где нужно, пусть будет резко, я не гордый.
У вас очень содержательный комментарий, огромное спасибо, уже дорабатываю!
0
Добавил тезаурус под спойлер вначале статьи.
Предложение не по-русски вообще заменил на «Используется очень простая схема сглаживания тайлов. Это достигается за счет “Диффузного круга”, части которого накладываются в места стыков разных клеток, или на стык полной клетки прилегающей к пустой.» (изображение круга лежит рядом) Это по идее, должно сразу прояснить что:
"«Ясно, что «сглаживая» регулярные клетки визуально, одни будут наползать на другие.»"
Больше иллюстраций! Отдельных по месту, в том числе и в начале.
Код вообще убрал под спойлеры, т.к. он дополнительный. Поняв часть со складыванием тайлов можно написать свою реализацию, но данный конкретный алгоритм рассматривает еще и оптовую обработку, а этого без битовой магии не получить. Описывать битовые операции это тема отдельной статьи.
Могу дать комментарий тут, — все константы работают по принципу один HEX разряд на саб-клетку. Соответственно выбираются индексы нужных клеток (с учетом того что результирующая сетка сдвинута) + верные позиции HEX разрядов содержащих данные о конкретных саб-клетках. При чтении все проще, т.к. алгоритм совершает все эти перестановки подготавливая данные к удобной работе опираясь на результирующую сетку (Об этом написано в одном из спойлеров)
цифры 2 или 8 в константах это смещения разных координат выбираемого саб-тайла от углов диффузного круга в центр
для х позиции, которая изначально может быть 0 или 3 это ^2 = 2 или 1,
для y, которая изначально 0 или 12 это ^8 = 8 или 4
И еще раз спасибо вам за конструктив, вы мне очень помогли!
Предложение не по-русски вообще заменил на «Используется очень простая схема сглаживания тайлов. Это достигается за счет “Диффузного круга”, части которого накладываются в места стыков разных клеток, или на стык полной клетки прилегающей к пустой.» (изображение круга лежит рядом) Это по идее, должно сразу прояснить что:
"«Ясно, что «сглаживая» регулярные клетки визуально, одни будут наползать на другие.»"
Больше иллюстраций! Отдельных по месту, в том числе и в начале.
Код вообще убрал под спойлеры, т.к. он дополнительный. Поняв часть со складыванием тайлов можно написать свою реализацию, но данный конкретный алгоритм рассматривает еще и оптовую обработку, а этого без битовой магии не получить. Описывать битовые операции это тема отдельной статьи.
Могу дать комментарий тут, — все константы работают по принципу один HEX разряд на саб-клетку. Соответственно выбираются индексы нужных клеток (с учетом того что результирующая сетка сдвинута) + верные позиции HEX разрядов содержащих данные о конкретных саб-клетках. При чтении все проще, т.к. алгоритм совершает все эти перестановки подготавливая данные к удобной работе опираясь на результирующую сетку (Об этом написано в одном из спойлеров)
цифры 2 или 8 в константах это смещения разных координат выбираемого саб-тайла от углов диффузного круга в центр
для х позиции, которая изначально может быть 0 или 3 это ^2 = 2 или 1,
для y, которая изначально 0 или 12 это ^8 = 8 или 4
И еще раз спасибо вам за конструктив, вы мне очень помогли!
0
Попробуйте вдумчиво поиграть с лайв демо: http://codepen.io/impfromliga/debug/qNOazj
Это может дать интуитивное понимание того что я не учел, и того на что я не могу ответить из вашего вопроса.
Это может дать интуитивное понимание того что я не учел, и того на что я не могу ответить из вашего вопроса.
0
Каюсь, было что дополнить сразу не учел, в текст внесено дополнение (цитирую):
«Наивный подход заключался бы в обходе всех саб-клеток с проверкой на равенство с текущей клеткой её 2х соседей. При этом результат проверки это сдвиг координат вибираемого кусочка текстуры к центру (смотрите рис.). Изначально все четвертинки принимаются как угловые кусочки текстуры и образуют при соединении синий кружок (со всех сторон соседи синие). НЕравенство с соседом по вертикали сдвигает выбираемый кусок текстуры к центру по вертикали (на две позиции, так он выбирается следом за противоположным по вертикали углом) По горизонтали используется аналогичная проверка и сдвиг. Случай когда после проверок ничего не сдвинулось (остался целый синий круг) желательно обрабатывать как исключение и выводить целую клетку разом а не по четвертям.
Здесь наивный метод заканчивается.
(далее в коде начальная позиция тайлов и будет иметь константу 0xfc30. А сдвиги по горизонталям/вертикалям будут работать с соответствующими HEX разрядами нужных ячеек массива)»
«Наивный подход заключался бы в обходе всех саб-клеток с проверкой на равенство с текущей клеткой её 2х соседей. При этом результат проверки это сдвиг координат вибираемого кусочка текстуры к центру (смотрите рис.). Изначально все четвертинки принимаются как угловые кусочки текстуры и образуют при соединении синий кружок (со всех сторон соседи синие). НЕравенство с соседом по вертикали сдвигает выбираемый кусок текстуры к центру по вертикали (на две позиции, так он выбирается следом за противоположным по вертикали углом) По горизонтали используется аналогичная проверка и сдвиг. Случай когда после проверок ничего не сдвинулось (остался целый синий круг) желательно обрабатывать как исключение и выводить целую клетку разом а не по четвертям.
Здесь наивный метод заканчивается.
(далее в коде начальная позиция тайлов и будет иметь константу 0xfc30. А сдвиги по горизонталям/вертикалям будут работать с соответствующими HEX разрядами нужных ячеек массива)»
0
Добавлено:
Смотрим на рисунке «Топология зон диффузии» видим 16 кусочков тайлов из которых может составляться клетка в зависимости от соседей.
Простейшая ситуация все соседи равны (клетка составляется из краевых кусочков) можно запомнить по аналогии, — что кусочки как бы прилипают к соседям
(Пусть это начальное состояние от которого мы меняемся
Если какой-то сосед не равен, он отталкивает от себя кусочек на две позиции.
Когда все соседи проверенны и все кусочки тайла соответственно оттолкнуты можно выводить клетку этими четырьмя кусочками.
(Для эффективности можно проверить на оптовые условия например если клетка полностью целая, или полностью пустая)
Смотрим на рисунке «Топология зон диффузии» видим 16 кусочков тайлов из которых может составляться клетка в зависимости от соседей.
Простейшая ситуация все соседи равны (клетка составляется из краевых кусочков) можно запомнить по аналогии, — что кусочки как бы прилипают к соседям
(Пусть это начальное состояние от которого мы меняемся
Если какой-то сосед не равен, он отталкивает от себя кусочек на две позиции.
Когда все соседи проверенны и все кусочки тайла соответственно оттолкнуты можно выводить клетку этими четырьмя кусочками.
(Для эффективности можно проверить на оптовые условия например если клетка полностью целая, или полностью пустая)
0
Sign up to leave a comment.
xfcRS — оригинальный лаконичный шустрый рендер сглаженных тайлов, «expansion fast cell — Rounded Squares»