POV-Ray 2D градиент (полигон) - PullRequest
1 голос
/ 27 января 2020

Итак, я хочу применить цветовой градиент к пользовательскому 2D-многоугольнику, и я нигде не могу найти инструкции / примеры того, как это сделать (все, что я могу найти, это 3D-изображения). В частности, я хочу сделать это:

enter image description here

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

1 Ответ

1 голос
/ 17 февраля 2020

Хорошо, так что я понял это, и так как я не могу найти простой ответ где-либо, я мог бы также ответить на мой собственный вопрос:

1) Чтобы сделать один градиент на вашем многоугольнике, вы просто нужен сферический пигмент с картой цветов. Я привожу пример с треугольником:

#declare pol1=polygon{3,<-1,0> <1,0> <0,1>} //Declare a triangle
polygon{pol1 pigment{spherical color_map{[0.0 rgb <1,0,0>] [1.0 rgb <0,0,1>] } translate<0,0,0>} }    

Так что он создает радиальный градиент с центром в абсолютном (0,0,0), и вы можете перевести его в зависимости от того, где вы хотите , Цветовая карта определяет два цвета (rgb <1,0,0> и rgb <0,0,1>), а число перед ними в основном контролирует градиент (где цвета начинаются / заканчиваются относительно к сетке). Не буду объяснять это подробно, так что вы можете прочитать больше здесь .

2) Чтобы сделать больше градиентов, скажем по одному на каждый угол, я не смог найти способ применить 3 разных градиента на одной фигуре. Как и color_map , существует также Градиент_карта , но это не поможет, поскольку вы должны определить, где заканчивается один пигмент и где начинается следующий. Таким образом, единственный способ обойти это - удалить углы многоугольника с помощью цилиндров (с помощью команды Разница ), а затем заменить их на цилиндры (с помощью команды пересечение ), фаза которых равна желаемый градиент. И хотя это грязный способ, он не влияет на производительность, что является моей главной заботой, поэтому я буду продолжать, пока не найду что-то лучшее. Итак, вот пример (я не буду объяснять это дальше, этот ответ становится большим как он есть):

#declare pos1=array[2]{-1,0}; //the corners' coordinates
#declare pos2=array[2]{1,0};   
#declare pos3=array[2]{0,1};
#declare cyl_rad=0.5;     

#declare pol1=polygon{3,<pos1[0],pos1[1],0> <pos2[0],pos2[1],0> <pos3[0],pos3[1],0>} //Declare the polygon
#declare cyl1=cylinder{<pos1[0],pos1[1],-0.01> <pos1[0],pos1[1],0.01>,cyl_rad} //Declare the cylinder that will "replace" the first corner
#declare cyl2=cylinder{<pos2[0],pos2[1],-0.01> <pos2[0],pos2[1],0.01>,cyl_rad} //Declare the cylinder that will "replace" the second corner
#declare cyl3=cylinder{<pos3[0],pos3[1],-0.01> <pos3[0],pos3[1],0.01>,cyl_rad} //Declare the cylinder that will "replace" the third corner
difference{polygon{pol1} cyl1 cyl2 cyl3 pigment {color_part}} //The polygon with its corners "cut"
intersection{polygon{pol1} cyl3 pigment{spherical color_map{[0.0 rgb <1,0,0>] [0.95 rgb <0,0,1>]} scale<cyl_rad,cyl_rad,cyl_rad> translate <pos3[0],pos3[1],0>} } //Replacing the corners with the coloured cylinders
intersection{polygon{pol1} cyl2 pigment{spherical color_map{[0.0 rgb <1,0,0>] [0.95 rgb <0,1,1>]} scale<cyl_rad,cyl_rad,cyl_rad> translate <pos2[0],pos2[1],0>} }
intersection{polygon{pol1} cyl1 pigment{spherical color_map{[0.0 rgb <1,0,0>] [0.95 rgb <0,1,0>]} scale<cyl_rad,cyl_rad,cyl_rad> translate <pos1[0],pos1[1],0>} }
...