Прозрачные предметы средствами векторной графики
Он обладает всеми свойствами элемента векторной графики - он поворачивается вокруг начальной точки, перемещается и масштабируется. Его можно отразить, по вертикали и горизонтали. По этим направлениям его можно даже изгибать.
С другой стороны, имеется возможность, используя окрашенную в разные цвета модель, создавать на поверхности рисунка прозрачные предметы - http://proza.ru/2019/12/02/1990
Поэтому совершенно естественной выглядит идея совместить указанную возможность с техникой организации паттернов. Причём, для пользователя никакой сложности переход к изображению прозрачных предметов не представляет. Нужно поместить в клетку листа паттернов цветовую модель прозрачного предмета, или просто цветное изображение предмета, найденное в интернете. И затем, как это делается обычно, создать паттерн.
В массиве, хранящем графику, созданные паттерны «бутылки» и «рыбы» появятся в виде двух строк –
1> 16 298 350 -2 -94 1000 0 80 351 5050 3 /бутылка
2> 16 489 183 0 -90 1000 0 70 351 5050 3 /рыба
Здесь 16 – логотип элемента «Паттерн», далее идут координаты X,Y начальной точки, затем – расстояния от нач.точки до центра паттерна.
1000 – масштаб ( 1 умноженная на 1000 )
Далее – угол поворота в градусах, умноженный на 100, ссылка на номер паттерна, позволяющая находить его на листе.
351 - цвет «ножки» паттерна. Поскольку Паттерн рисуется медленно, то при перемещениях его изображение заменяется «ножкой» - линией, соединяющей начальную точку с центром.
5050 – фактор изгиба паттерна, при этом значении паттерн не изогнут.
3 – цифра, показывающая на то, что паттерн не отражён. Тут возможны варианты 1-отражён справа налево, 2-сверху вниз, 4- и то и другое.
Но куда же нам поместить информацию о том, что паттерн ещё и прозрачный?
Если места для информации нет, то размещаем её в «два этажа» -
Вместо цифры 3 пишем 13, или 23, или 33, или 43, или 53. Постепенно увеличивая коэффициент преломления прозрачного предмета.
Для пользователя, как я уже сказал, никакой трудности это не составит – ему нужно будет покликать ПРАВОЙ кнопкой мыши по маленькой кнопочке ниже кнопки «Плотность», и выставить на кнопочке 1,2,3,4 или 5, а потом закрепить сделанное изменение, выставив «ф» на переключателе «о/ф» и кликнув кнопку «Закрепить».
Но как же достигается эффект прозрачности?
И программисту это сделать совсем не сложно – нужно лишь перед тем, как ставить на рисунок точку паттерна, выполнить небольшой кусочек кода, переопределяющий цвет этой точки –
If K10g > 0 Then '
Call cRGB(C): Xg = X2 + (RR - GG) * K10g * 0.5:
Yg = Y2 + (BB - GG) * K10g * 0.5
C = Form1.Picture1.Point(Xg, Yg): If C < 0 Then C = vbWhite 'если вышли за пределы рисунка, то образуется блик
End If
Form1.Picture1.PSet (X2, Y2), C:
Здесь K10g как раз эта самая цифра на маленькой кнопочке – опция прозрачности предмета. Чем больше разница (RR - GG) и (BB - GG) между компонентами цвета, найденного на паттерне, тем с более дальних точек рисунка цвет берётся. Для жёлтого цвета модели, цвет с рисунка берётся сверху, для синего – снизу, для красного – справа, для голубого – слева, и т.д. В результате, в прозрачном предмете, как в капле воды, сосредотачивается изображение значительной части рисунка.
Этим, собственно, и достигается эффект прозрачности.
Вы можете посмотреть, как по-разному выглядит один и тот же паттерн, изображающий бутылку в разных частях рисунка. Аналогичным образом можно сделать прозрачных рыб, медуз, или каких-нибудь водяных духов.
Между тем, при K10g = 0 изображение получается не прозрачное, а вполне реальное. Используя паттерны, методом перекладки легко создавать простую анимацию. И прозрачные предметы могут быть в этой анимации не лишними.
__________
13.11.2020
Свидетельство о публикации №220111300663