• Как использовать MASQUERADE с ipsec туннлем?

    @black_list_man Автор вопроса
    Нет, Raspberry это клиент. Роботизировання платформа GSM связью и IP камерой. Таких платформ может быть несколько. Видео должно быть доступно с условной станции управления, которая тоже находится за NAT и также является клиентом VPN.
    Я впрочем нашел еще один способ. Strongswan позволяет выполнять скрипт при изменении статуса подключения. В таком скрипте можно просто каждый раз создавать SNAT правило с текущим виртуальным адресом, а старое удалять, если такое имеется.
    Написано
  • Какие особенности работы с физическими последовательными портами?

    @black_list_man Автор вопроса
    В данном случае речь идет о RS422, и длина кабеля там не более метра. Сам порт в настройках BIOS также переведен в режим работы RS422. Устройство работающее на скорости 460800 - волоконно-оптический гирокомпас, и выбрать другую скорость там к сожалению нельзя. К слову, через USB преобразователь работет прекрасно, но раз уж есть физические порты, хотелось обойтись без промежуточных устройств.

    По поводу выбра скорости: да, я понимаю что скорость должна быть согласована, но меня сам способ согласования удивил. Обычно, при работе с виртуальными портами я указываю нужную скорость непосредственно в софте. Открываю допустим PUTTY, указываю необходимые настройки порта и все ок. Но с физическими портами это не работает. Приходится сначала установить baud_base для порта, при помощи setserial. Т.е. фактически я устанавливаю скорость дважды: при помощи setserial, и в ПО для работы с портом. Так и должно быть, или действительно что-то не так с драйвером, как предположили ниже?
    Написано
  • Как правильно управлять OpenGL ресурсами в Qt приложении?

    @black_list_man Автор вопроса
    Стандартные компоненты мне точно не подойдут. У меня морская навигационная система, предназначенная в первую очередь для отображения векторных карт S57 (довольно специфический формат). Растровые тайлы - просто еще один поддерживаемый стандарт карт. OpenGL бекенд очень незначительно ускоряет рендеринг, а на некоторых устройствах даже замедляет (тестировал на старом андроид планшете). Ручные оптимизации там недоступны. Я сейчас использую батчинг, переиспользую буферы, стримминг геометрии и стараюсь уменьшить количество вызовов отрисовки (В одном кадре может быть более 10к объектов. Такова специфика карт S57). Ну и самое главное, в QPainter невозможно реализовать перспективную проекцию. Также я планирую использую шейдеры для рисования heatmap-ов и GPU-ускоренной системы частиц. Поэтому мне стал нужен OpenGL.603c0f843dbd9513157255.jpeg
  • Как нарисовать повторяющуюся текстуру по контуру линии/полигона?

    @black_list_man Автор вопроса
    AlexHell, 5f74d44d4e14a448268183.png
    В данном случае это не артефакт. Просто геометрия закончилась в этом месте и паттерн был как бы обрезан. "Конкурент" в этом плане работает точно также. Просто скриншот получился более удачным.

    Да, это не меш. Это независимые иконки. Это как раз таки способ без триангуляции. А как иначе? Если бы я использовал меш, то пришлось бы вернуться в самое начало к вопросу о верных текстурных координатах, и как их растягивать на углах.
  • Как нарисовать повторяющуюся текстуру по контуру линии/полигона?

    @black_list_man Автор вопроса
    AlexHell,
    57511c68cee7a38fa8ca53699118759f.png
    Добавив небольшой буфер к части текстуры (+2 пикселя, так чтобы одна часть текстуры как бы накладывалась на следующую) получилось приблизиться к результату. На рисунке все также мой софт - слева.
  • Как нарисовать повторяющуюся текстуру по контуру линии/полигона?

    @black_list_man Автор вопроса
    AlexHell, Артефакты происходят как следствие самого метода. У каждого куска текстуры своя нормаль. Я понимаю почему так происходит. Я немного уменьшил количество "щелей", путем уменьшения кол-ва точек в геометрии во время отрисовки. (убираю точку, если она ближе 7 пикселей от предыдущей). Но упрощать дальше уже нет смысла, ибо тогда разница между нормалями станет больше, и хотя самих "щелей" убавится, те что останутся будут шире.
    95c751c15d774c59452d184f2163be99.png
    Образец - это не конкурирующее приложение, просто оно закрытое. А мне нужен картографический движок, на который я смогу навешивать свой специфический функционал. Поэтому приходится делать самому.
    И если внимательно посмотреть на него, то там тоже видны похожие "щели", причем в таком же количестве, просто они почему-то видны лишь ближе к внешней стороне текстуры, что делает их почти незаметными.
    5a46762dc17ea0634813844402a20d58.png
  • Как нарисовать повторяющуюся текстуру по контуру линии/полигона?

    @black_list_man Автор вопроса
    AlexHell, В общем, я подумал над последним способом и реализовал его, но немного иначе. Я не стал делить текстуру на сегменты, (да это и почти не осуществимо в моем случае, ибо сами текстуры рисуются динамически, и имеют разный размер, в зависимости от DPI устройства, к тому же, не все их них вообще могут быт разделены на составляющие, некоторые имеют непрерывный характер). Я просто рисую всю текстуру, пока не закончится сегмент, в конце сегмента конечно обрезаю. А в следующем сегменте я уже начинаю рисовать текстуру не с начала, а с того места где закончил в прошлый раз. В итоге выглядит все это хорошо. Хотя кончено на "закруглениях" видны артефакты, в виде полос. Ибо текстура нарезается, но не растягивается. Но это не столь критично.
    Но что самое интересное, я нашел как настроить DPI в приложении - образце и при бОльшем масштабе самих текстур обнаружил там точно такие же артефакты, что говорит о том, что там совершенно идентичная реализация.
    На рисунке: слева - мое приложение, справа - образец. (Стоит открыть рисунок в полном масштабе, чтобы были видны артефакты)
    7c86c4d08d73096f87ae0befd152b557.png

    Хотя в некоторых ситуациях артефактов там значительно меньше. Интересно как они этого добились
    dfc957e50d779e1edc49f889cdfeeaed.png
  • Как нарисовать повторяющуюся текстуру по контуру линии/полигона?

    @black_list_man Автор вопроса
    AlexHell,
    5f6fb8e2d2c80791395093.png
    Да, такой вариант выглядит неплохо. Но насколько я понимаю требуется еще один треугольник. И не совсем понятно как это будет работать на углах близких к 90.
    В целом, как я не пытался в уме расположить текстуру на текущий вариант триангуляции, всегда были проблемы со стыками. Получалось как-то так
    57f44e5f2d04b62638fee868ae6b8a75.png
    При этом сразу понятно что при больших углах начнутся проблемы. Надо будет сильно растягивать.
    При этом на скриншотах нет никаких искажения на больших углах. Выглядит это так, словно там вообще нет соединения сегментов.
    f74da619767e97068ce5471eb5362825.png
    Возможно действительно сам способ триангуляции не позволяет разместить текстуру как надо. Я все это время пытаюсь понять как это сделано в том проприетарном приложении, чьи скриншоты я прикладывал. Если бы я знал, было бы легче.

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

    @black_list_man Автор вопроса
    AlexHell, 5f6fa4711174c338169337.png
    Вот что получается. Я для наглядности выбрал простую текстуру в виде иконки и увеличил размер. Дело в том что длина сегмента почти никогда не совпадает с длиной текстуры. Это просто геометрия, являющаяся частью карты. К тому же масштаб меняется динамически и экранное расстояние между сегментами всегда разное. Текстура должна как бы обрезаться и продолжаться со следующего сегмента. В данный момент я рассчитываю длину сегмента и делю ее на длину текстуры, получая таким образом кол-во повторений. Получается, к примеру 5,67 Для того чтобы начать следующий сегмент не с начала, а продолжить, я беру дробную часть от количества повторений на прошлом сегменте, (0,67 в данном случае) и текстурная координата уже становится не (0,1) а (0.67,1).
    5f6fa8f2c455b047376848.pngНо в итоге, во-первых из за того что кол-во повторений одинаковое, в длина внешнего и внутреннего контура сегмента разная, - получается смещение текстуры. Во-вторых, при больших "углах" между сегментами линии, паттерн перекашивается, словно ложась на бок.
    Пробовал отдельно учитывать длину внешней и внутренней граней. Т.е. разное кол-во повторений текстуры для верхней и нижней части сегмента. Но результатом недоволен остался.
    5f6faa507f0b5082060461.png
    Проблема в том, что я не знаю правильно ли я вообще двигаюсь к желаемому результату. Я не могу понять как вообще должны располагаться текстурные координаты, чтобы при текстура оставалась перпендикулярна нормали сегмента.5f6fab5e3a5b9324960059.png
    Вот скриншот из ПО, в котором это работает как надо. То, к чему я стремлюсь. Но не понимаю как это реализовано. Этот тот же "круг" что и в скриншоте из вопроса, но при меньшем масштабе. Видно как текстура "огибает" его. А на линиях рядом, видно как даже при больших углах она не искажается.