Вы связываете функцию timeout
с объектом Promise
. Насколько я знаю, у объекта Promise
такого метода нет. Что делает эта timeout
функция?
О, хорошо - я попытался решить ту проблему сам. Я пропал впустую двухмесячный на решении, которое пыталось решить нуль, превышают ограничения проблема. Поскольку Вы уже узнали, что не можете иметь дело со всем, ухудшился случаи, и имейте нуль, превышают ограничения одновременно.
Можно однако использовать гибридный подход:
Запишите себе стандартную программу, которая проверяет, могут ли соединения быть созданы из простой геометрии без проблем. Чтобы сделать так, необходимо проверить угол соединения, ширину строки и продолжительность линейных сегментов, к которым присоединяются (линейные сегменты, которые короче, чем их шириной является ЛАВАШ). С некоторой эвристикой необходимо смочь разобраться во всех тривиальных случаях.
Я не знаю, как Ваши средние данные строки похожи, но в моем случае больше чем 90% широких строк не имели никакого, ухудшился случаи.
Для всех других строк:
Вы по всей вероятности уже узнали, что, если Вы терпите, превышают ограничения, генерирование геометрии намного легче. Сделайте так и позвольте полигону, алгоритм CSG и алгоритм мозаики делают трудную работу.
Я оценил большинство доступных пакетов мозаики, и я закончил с GLU tesselator. Это было быстро, устойчиво, никогда не разрушаемое (в отличие от большинства других алгоритмов). Это было свободно, и лицензия позволила мне включать его в коммерческую программу. Качество и скорость мозаики хорошо. Вы не получите качество триангуляции Делоне, но так как Вам просто нужны треугольники для рендеринга, это не проблема.
Так как мне не понравился tesselator API, я снял код мозаики с бесплатной ссылочной реализации OpenGL SGI, переписал весь фронтенд и добавил пулы памяти для снижения количества выделений. Потребовалось два дня, чтобы сделать это, но это определенно стоило того (как фактор пять повышений производительности). Решение закончилось в коммерческой реализации OpenVG btw :-)
Если Вы представляете с OpenGL на ПК, можно хотеть переместить tesselation/CSG-job от ЦП до GPU и использовать приемы буфера шаблонов или z-буфера для удаления превышения ограничения. Это намного легче и может быть еще быстрее, чем мозаика ЦП.
Простой метод первое, что пришло на ум.
Разделите пополам угол каждой 2-й Вершины, это создаст хорошую строку среза. Затем пройдите что строка, и входящая и исходящая, количество Вашей "толщины" (или толщина, разделенная на два?), у Вас теперь есть свои внутренние и внешние точки полигона. Переместитесь в следующий вопрос, повторите тот же процесс, создав Ваши новые точки полигона по пути. Затем примените триангуляцию для получения готовых к рендерингу вершин.
Я интересуюсь этим также, так как я хочу усовершенствовать свое приложение отображения (Kosmos) рисунок дорог. Одно обходное решение, которое я использовал, должно потянуть ломаную линию дважды, однажды с более толстой строкой и однажды с разбавителем, с другим цветом. Но это не действительно полигон, это - просто быстрый способ моделировать тот. Посмотрите некоторые образцы здесь: http://wiki.openstreetmap.org/wiki/Kosmos_Rendering_Help#Rendering_Options
Я не уверен, является ли это тем, в чем Вы нуждаетесь.
Я думаю, что достиг бы алгоритма составления мозаики. Это верно, что в большей части случая, где они используются, цель состоит в том, чтобы сократить количество вершин для оптимизации рендеринга, но в случае Вы могли параметризовать для сохранения всех подробностей - и возможность оптимизации может пригодиться.
Существуют многочисленные алгоритмы составления мозаики и код вокруг сети - я обернул чистый C на в DLL несколько лет назад для использования с альбомным рендерером Delphi, и они не редкий предмет для усовершенствованных учебных руководств по кодированию графики и т.п..
В моем случае я мог позволить себе лишний. Я просто удаляю окружности с радиусом = ширина/2 центрированы на каждой из вершин полилинии.
Артефакты маскируются этим путем, и их очень легко реализовать, если можно жить с «округлыми» углами и некоторым перерисовыванием.
С вашего изображения похоже, что вы являетесь рисовым ящиком вокруг сегментов линии с заполнением и с помощью оранжевого цвета. Это наверняка создает плохие переохлаждения. Итак, во-первых, что нужно сделать, не представляют собой черную границу и наполнить цвет можно непрозрачную.
Почему вы не можете использовать примитив GL_LINes, чтобы делать то, что вы намерены делать? Вы можете указать ширину, фильтрацию, гладкость, что угодно. Вы можете сделать все вершины, используя gldrawarrays (). Я знаю, что это не то, что вы имеете в виду, но, как вы сосредоточены на 2D-рисунке, это может быть более простым подходом. (Поиск текстурированных линий и т. Д.)