Прозрачные предметы средствами векторной графики

   Паттерн - образец, помещённый в одну из нумерованных клеточек и сохранённый в памяти в цифровом виде, является отличным средством использования растрового изображения в векторной графике - http://proza.ru/2020/07/18/246
   Он обладает всеми свойствами элемента векторной графики - он поворачивается вокруг начальной точки, перемещается и масштабируется. Его можно отразить, по вертикали и горизонтали. По этим направлениям его можно даже изгибать.

    С другой стороны, имеется возможность, используя окрашенную в разные цвета модель, создавать на поверхности рисунка прозрачные предметы - 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


Рецензии