Как я представляю толстые 2D строки как полигоны?

Вы связываете функцию timeout с объектом Promise. Насколько я знаю, у объекта Promise такого метода нет. Что делает эта timeout функция?

22
задан Glorfindel 8 March 2019 в 17:00
поделиться

7 ответов

О, хорошо - я попытался решить ту проблему сам. Я пропал впустую двухмесячный на решении, которое пыталось решить нуль, превышают ограничения проблема. Поскольку Вы уже узнали, что не можете иметь дело со всем, ухудшился случаи, и имейте нуль, превышают ограничения одновременно.

Можно однако использовать гибридный подход:

Запишите себе стандартную программу, которая проверяет, могут ли соединения быть созданы из простой геометрии без проблем. Чтобы сделать так, необходимо проверить угол соединения, ширину строки и продолжительность линейных сегментов, к которым присоединяются (линейные сегменты, которые короче, чем их шириной является ЛАВАШ). С некоторой эвристикой необходимо смочь разобраться во всех тривиальных случаях.

Я не знаю, как Ваши средние данные строки похожи, но в моем случае больше чем 90% широких строк не имели никакого, ухудшился случаи.

Для всех других строк:

Вы по всей вероятности уже узнали, что, если Вы терпите, превышают ограничения, генерирование геометрии намного легче. Сделайте так и позвольте полигону, алгоритм CSG и алгоритм мозаики делают трудную работу.

Я оценил большинство доступных пакетов мозаики, и я закончил с GLU tesselator. Это было быстро, устойчиво, никогда не разрушаемое (в отличие от большинства других алгоритмов). Это было свободно, и лицензия позволила мне включать его в коммерческую программу. Качество и скорость мозаики хорошо. Вы не получите качество триангуляции Делоне, но так как Вам просто нужны треугольники для рендеринга, это не проблема.

Так как мне не понравился tesselator API, я снял код мозаики с бесплатной ссылочной реализации OpenGL SGI, переписал весь фронтенд и добавил пулы памяти для снижения количества выделений. Потребовалось два дня, чтобы сделать это, но это определенно стоило того (как фактор пять повышений производительности). Решение закончилось в коммерческой реализации OpenVG btw :-)

Если Вы представляете с OpenGL на ПК, можно хотеть переместить tesselation/CSG-job от ЦП до GPU и использовать приемы буфера шаблонов или z-буфера для удаления превышения ограничения. Это намного легче и может быть еще быстрее, чем мозаика ЦП.

4
ответ дан 29 November 2019 в 05:56
поделиться

Простой метод первое, что пришло на ум.

Разделите пополам угол каждой 2-й Вершины, это создаст хорошую строку среза. Затем пройдите что строка, и входящая и исходящая, количество Вашей "толщины" (или толщина, разделенная на два?), у Вас теперь есть свои внутренние и внешние точки полигона. Переместитесь в следующий вопрос, повторите тот же процесс, создав Ваши новые точки полигона по пути. Затем примените триангуляцию для получения готовых к рендерингу вершин.

2
ответ дан 29 November 2019 в 05:56
поделиться

Я интересуюсь этим также, так как я хочу усовершенствовать свое приложение отображения (Kosmos) рисунок дорог. Одно обходное решение, которое я использовал, должно потянуть ломаную линию дважды, однажды с более толстой строкой и однажды с разбавителем, с другим цветом. Но это не действительно полигон, это - просто быстрый способ моделировать тот. Посмотрите некоторые образцы здесь: http://wiki.openstreetmap.org/wiki/Kosmos_Rendering_Help#Rendering_Options

Я не уверен, является ли это тем, в чем Вы нуждаетесь.

0
ответ дан 29 November 2019 в 05:56
поделиться

Я думаю, что достиг бы алгоритма составления мозаики. Это верно, что в большей части случая, где они используются, цель состоит в том, чтобы сократить количество вершин для оптимизации рендеринга, но в случае Вы могли параметризовать для сохранения всех подробностей - и возможность оптимизации может пригодиться.

Существуют многочисленные алгоритмы составления мозаики и код вокруг сети - я обернул чистый C на в DLL несколько лет назад для использования с альбомным рендерером Delphi, и они не редкий предмет для усовершенствованных учебных руководств по кодированию графики и т.п..

0
ответ дан 29 November 2019 в 05:56
поделиться

Посмотрите, может ли Триангуляция Делоне помочь.

0
ответ дан 29 November 2019 в 05:56
поделиться

В моем случае я мог позволить себе лишний. Я просто удаляю окружности с радиусом = ширина/2 центрированы на каждой из вершин полилинии.

Артефакты маскируются этим путем, и их очень легко реализовать, если можно жить с «округлыми» углами и некоторым перерисовыванием.

0
ответ дан 29 November 2019 в 05:56
поделиться

С вашего изображения похоже, что вы являетесь рисовым ящиком вокруг сегментов линии с заполнением и с помощью оранжевого цвета. Это наверняка создает плохие переохлаждения. Итак, во-первых, что нужно сделать, не представляют собой черную границу и наполнить цвет можно непрозрачную.

Почему вы не можете использовать примитив GL_LINes, чтобы делать то, что вы намерены делать? Вы можете указать ширину, фильтрацию, гладкость, что угодно. Вы можете сделать все вершины, используя gldrawarrays (). Я знаю, что это не то, что вы имеете в виду, но, как вы сосредоточены на 2D-рисунке, это может быть более простым подходом. (Поиск текстурированных линий и т. Д.)

0
ответ дан 29 November 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: