рендеринг кисти в стиле фотошоп в openGL - PullRequest
0 голосов
/ 26 октября 2010

У меня есть строки, которые программно определены моей программой.то, что я хочу сделать, это отрисовать мазок кисти вдоль них.

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

Теперь, предполагая, что это даже работает, я собираюсь поспорить, что это будет СЛИШКОМ слишком дорого (нацеливание на ipad и другие мобильные чипы, которые НЕНАВИЖУ, скорость заполнения и альфа-смешение)

Какие еще варианты есть?

, если бы это можно было сделать в реальном времени (то есть сплайн траектории, обновляющий каждый кадр), что было бы идеально.но если нет, то в течение доли секунды на ipad тоже будет хорошо (сплайны соединяют узлы, пользователь может перетаскивать узлы вокруг, тем самым преобразуя сплайн, но было бы приемлемо вернуться к более простой заливке сплайна, пока ондвигался, затем пересчитал кисть, как только они ее отпустят)

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

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

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

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

так что, да, есть какие-нибудь идеи о том, как рисовать толстые карандашные линии, которые следуют за сплайном в реальном времени на ipad в openGL?

1 Ответ

1 голос
/ 25 ноября 2010

С моей точки зрения, вы хотите визуализировать линию, которая:

  • текстурированная
  • с исчезающими краями (то есть без острых краев)
  • следует за сплайном

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

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

Вам понадобится немного математики, чтобы убедиться, чтоВы выдавливаете четырехугольники вдоль вектора, который делит пополам 2 сегмента (то есть, чтобы угол между каждым сегментом и вектором выдавливания был равен).Это гарантирует, что у вас не будет промежутков в тупой части соединения и перекрытий в острых частях.

После всего этого вам просто нужно использовать положения вершин в качестве координат УФ (хотя, вероятно, масштабируется) и позволяет текстуре обернуться вокруг.

Используя этот метод, вы должны получить сетку, имеющую сплошную толстую линию, проходящую через середину сплайна, с «плавниками», сужающимися вполная прозрачность.Это должно приближаться к эффекту, который вы хотите, достаточно близко, в то время как только рендеринг релевантных пикселей (то есть без гигантских областей полностью прозрачных пикселей) и с очень маленькими накладными расходами памяти.


Я был немного расплывчатым здесь какэто трудно объяснить одним текстом без подробного руководства.Если вам нужна дополнительная информация, просто прокомментируйте, что вы застряли, и я уточню подробнее.

...