<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF133%3Apov-ray</id>
		<title>LXF133:pov-ray - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF133%3Apov-ray"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF133:pov-ray&amp;action=history"/>
		<updated>2026-05-13T09:37:15Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF133:pov-ray&amp;diff=12380&amp;oldid=prev</id>
		<title>Crazy Rebel в 10:41, 13 июля 2011</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF133:pov-ray&amp;diff=12380&amp;oldid=prev"/>
				<updated>2011-07-13T10:41:34Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 10:41, 13 июля 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: Колесо, как известно, является одним из величайших изобретений человечества. '''Вячеслав Ястребцев''' увековечит его в растре.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;: Колесо, как известно, является одним из величайших изобретений человечества. '''Вячеслав Ястребцев''' увековечит его в растре.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;{{Цикл/pov-ray}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Давайте продолжим наше знакомство с системой трёхмерного моделирования и визуализации ''POV-Ray''. В прошлом номере мы научились азам описания трёхмерных сцен, а заодно, в качестве небольшой разминки, создали планету со всеми причитающимися красотами: атмосферой, морями и детальным рельефом. Поверхность планеты была смоделирована путем создания сложной функции, трёхмерный график которой и стал виртуальным небесным телом. Эта техника замечательно подходит для генерации фантастических ландшафтов, которым не нужно точное соответствие какому-либо эталону, но если нам необходима модель Эйфелевой башни – будет очень глупо блуждать в дебрях фракталов, надеясь, что где-то там найдётся нужная структура. Применению ''POV-Ray'' для решения задач второго типа и посвящён сегодняшний урок. Достопримечательностей Парижа я вам не обещаю, но вот пару шестеренок (примерно таких, что вы можете увидеть в машинном зале Тауэрского моста в Лондоне, или, если угодно, набрав в консоли команду ''glxgears''), мы с вами сделаем.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Давайте продолжим наше знакомство с системой трёхмерного моделирования и визуализации ''POV-Ray''. В прошлом номере мы научились азам описания трёхмерных сцен, а заодно, в качестве небольшой разминки, создали планету со всеми причитающимися красотами: атмосферой, морями и детальным рельефом. Поверхность планеты была смоделирована путем создания сложной функции, трёхмерный график которой и стал виртуальным небесным телом. Эта техника замечательно подходит для генерации фантастических ландшафтов, которым не нужно точное соответствие какому-либо эталону, но если нам необходима модель Эйфелевой башни – будет очень глупо блуждать в дебрях фракталов, надеясь, что где-то там найдётся нужная структура. Применению ''POV-Ray'' для решения задач второго типа и посвящён сегодняшний урок. Достопримечательностей Парижа я вам не обещаю, но вот пару шестеренок (примерно таких, что вы можете увидеть в машинном зале Тауэрского моста в Лондоне, или, если угодно, набрав в консоли команду ''glxgears''), мы с вами сделаем.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF133:pov-ray&amp;diff=12379&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF133:pov-ray&amp;diff=12379&amp;oldid=prev"/>
				<updated>2011-07-13T10:41:03Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''''POV-Ray''''' Занимательная механика – создаем фигуры правильной геометрической формы&lt;br /&gt;
&lt;br /&gt;
==''POV-Ray'': Зубчатое колесо==&lt;br /&gt;
&lt;br /&gt;
: Колесо, как известно, является одним из величайших изобретений человечества. '''Вячеслав Ястребцев''' увековечит его в растре.&lt;br /&gt;
&lt;br /&gt;
Давайте продолжим наше знакомство с системой трёхмерного моделирования и визуализации ''POV-Ray''. В прошлом номере мы научились азам описания трёхмерных сцен, а заодно, в качестве небольшой разминки, создали планету со всеми причитающимися красотами: атмосферой, морями и детальным рельефом. Поверхность планеты была смоделирована путем создания сложной функции, трёхмерный график которой и стал виртуальным небесным телом. Эта техника замечательно подходит для генерации фантастических ландшафтов, которым не нужно точное соответствие какому-либо эталону, но если нам необходима модель Эйфелевой башни – будет очень глупо блуждать в дебрях фракталов, надеясь, что где-то там найдётся нужная структура. Применению ''POV-Ray'' для решения задач второго типа и посвящён сегодняшний урок. Достопримечательностей Парижа я вам не обещаю, но вот пару шестеренок (примерно таких, что вы можете увидеть в машинном зале Тауэрского моста в Лондоне, или, если угодно, набрав в консоли команду ''glxgears''), мы с вами сделаем.&lt;br /&gt;
&lt;br /&gt;
===Подготовка===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_66_1.jpg|300px]] Что это? Это зубец — начало всех начал в нашей сцене.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Как и в прошлый раз, мы опишем основные элементы нашей сцены по отдельности, а потом соединим их в законченную композицию. Для удобства работы разведём объекты по собственным файлам, согласно их типу: формы поверхностей (файл '''mech_shapes.inс''' на диске), текстуры ('''mech_textures.inс''') и непосредственно сцена ('''mech.pov'''). Для краткости, я буду придерживаться этого порядка именования и далее.&lt;br /&gt;
&lt;br /&gt;
Первым делом разместим камеру и светильники: откройте файл '''mech.pov''' и подключите к сцене пока пустые файлы '''mech_shapes.inс''' и '''mech_textures.inс''' (обязательно создайте эти пустые файлы!) с помощью инструкции '''#include &amp;lt;имя файла&amp;gt;'''. Разместим камеру в позиции '''&amp;lt;0, 20, 0&amp;gt;''' и направим в точку '''&amp;lt;0,0,0&amp;gt;''', затем повесим в точке '''&amp;lt;20, 20, 20&amp;gt;''' источник белого света. В результате должно получится следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 camera {&lt;br /&gt;
 	 location &amp;lt;0, 20, 0&amp;gt;&lt;br /&gt;
 	 look_at 0&lt;br /&gt;
 	 angle 47&lt;br /&gt;
 }&lt;br /&gt;
 light_source {&lt;br /&gt;
 	 &amp;lt;20, 20, 20&amp;gt;,&lt;br /&gt;
 	 color rgb 1&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конструктор===&lt;br /&gt;
&lt;br /&gt;
Приступаем к самому интересному – созданию зубчатой передачи. Вначале создадим один зубец, присвоив ему имя '''tooth'''. Итак, открываем '''mech_shapes.inс''' и набираем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #declare tooth = prism {&lt;br /&gt;
 	 -.5, .5,&lt;br /&gt;
 	 6,&lt;br /&gt;
 	 &amp;lt;-.12, -.02&amp;gt;, &amp;lt;-.12, .2&amp;gt;, &amp;lt;-.07, .4&amp;gt;,&lt;br /&gt;
 	 &amp;lt;.07, .4&amp;gt;, &amp;lt;.12, .2&amp;gt;, &amp;lt;.12, -.02&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нами использован новый объект – '''prism''' (призма), имеющий следующие обязательные параметры: положение нижнего и верхнего торца по оси '''Y''', число боковых граней призмы, '''X'''- и '''Z'''-координаты боковых граней призмы (чтобы лучше представлять координаты, удобно набросать чертёж детали заранее). Созданный объект пока не виден в сцене (можете запустить рендер и проверить), ведь мы просто сказали ''POV-Ray'': «Слово tooth обозначает призму с параметрами...». Рендерер запоминает призму, но не помещает её в сцену без специального оператора '''object'''. Воспользуемся им:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 object {&lt;br /&gt;
 	 tooth&lt;br /&gt;
 	 pigment { color rgb x }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ура, теперь зубец виден! Но этого мало: нужно создать десятки зубцов, расположив их на окружности. Попробуем сдвинуть зубец с места...&lt;br /&gt;
&lt;br /&gt;
===Трансформации===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_67_1.jpg|300px]] Оба куба одинаково смещены и повёрнуты, а шары смещены и масштабированы относительно центра (зелёный шарик). Просто красные фигуры сдвигались до применения второго модификатора, а синие — после.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Для изменения положения и размеров объектов в сцене ''POV-Ray'' использует модификаторы '''translate, rotate''' и '''scale''' (перемещение, поворот и масштаб, соответственно). После модификатора указывается трёхмерный вектор, задающий величину изменения объекта по осям (для '''translate''' – смещения по каждой из осей, для '''scale''' – коэффициенты масштабирования, а для '''rotate''', к счастью, определять вращения через кватернионы в особо извращённой форме ''POV-Ray'' не требует: каждый компонент вектора задаёт поворот вокруг соответствующей оси (против часовой стрелки, при взгляде по оси вращения, или по часовой, если взгляд направлен против оси вращения). Сместим зубец на '''5''' единиц по оси '''Z''', добавив внутрь оператора '''object''' строку '''translate 5*z''', после слова '''tooth'''. Теперь повернём на '''45°''' вокруг оси '''Y''', добавив '''rotate 45*y''' после модификатора смещения. Порядок модификаторов очень важен: во многих 3D-редакторах можно указывать центр трансформации, но ''POV-Ray'' всегда трансформирует объекты относительно начала координат! Поэтому вращение и масштабирование объектов, отодвинутых от начала координат, приведёт к их смещению. Попробуйте поменять местами сдвиг и поворот зубца, чтобы увидеть различия.&lt;br /&gt;
&lt;br /&gt;
Разобравшись со сдвигом, перейдём к «размножению» зубцов. Нужно просто несколько раз добавить оператор '''object''' с правильными трансформациями... тут возникает масса проблем: число зубцов измеряется многими десятками – вбивать всё это очень долго; в каждом случае необходимо рассчитать правильные трансформации – это слишком сложно; наконец, километровая «простыня» везде, где нужна шестерня – это недопустимо! На помощь приходят директивы препроцессора и встроенные функции SDL: мы напишем макрос, создающий шестерёнки.&lt;br /&gt;
&lt;br /&gt;
===Макросы===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_67_1.jpg|300px]] Шестерни состоят из кольца зубцов с синим цилиндром в центре.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Вначале узнаем точные размеры (габариты) зубца. Для вычисления положения углов габаритного контейнера объектов используются функции '''max_extent()''' и '''min_extent()''', принимающие идентификатор объекта и возвращающие координаты дальнего и ближнего углов габаритного контейнера соответственно. Используем их по назначению, добавив перед '''object''' строчки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #declare max_dim = max_extent(tooth); // Дальний угол габаритного контейнера&lt;br /&gt;
 #declare min_dim = min_extent(tooth); // Ближний угол габаритного контейнера&lt;br /&gt;
 #declare tooth_dist = (max_dim.x - min_dim.x)*2; // Дистанция между зубцами&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При расчёте дистанции использована новая конструкция: идентификатор вектора и через точку '''x''' – извлечение '''x'''-компоненты вектора (указав '''y''' или '''z''', можно извлечь и другие компоненты соответственно). В результате, '''tooth_step''' содержит расстояние между вершинами зубцов.&lt;br /&gt;
&lt;br /&gt;
Зная эту величину и число зубцов, легко рассчитать длину окружности и радиус шестерни; последняя величина равна требуемому сдвигу зубца от центра. Поделив 360 на число зубцов, легко найти угловой шаг зубцов. Определим макрос, принимающий число зубцов в переменную '''ToothNum''', добавив перед '''object''', но после объявления '''tooth_dist''':&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #macro gear(ToothNum)&lt;br /&gt;
 	 #declare Radius = (tooth_dist*ToothNum)/(2*pi); // Радиус шестерни&lt;br /&gt;
 	 #declare Angle = (360/ToothNum)*y; // Угловой шаг зубцов шестерни&lt;br /&gt;
 	 union {&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оператор '''union''' объединит все детали шестерёнки в единый объект, что облегчит дальнейшую работу. С дублированием зубцов превосходно справится директива '''#while … #end''', организующая многократное выполнение команд, пока выполняется заданное условие. Добавим перед '''object''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 	 #declare Count = 0;&lt;br /&gt;
 	 #while (Count &amp;lt; ToothNum)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А после закрывающей '''object''' фигурной скобки –&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 	 #declare Count=Count+1;&lt;br /&gt;
 	 #end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменим трансформации внутри '''object''' на следующие:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 translate Radius*z&lt;br /&gt;
 rotate Angle*Count&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конструкция выше создаст кольцо из зубцов: заполним пустоту в центре цилиндром, указав координаты его торцов и радиус (равный переменной '''Radius'''), и закроем оператор '''union''' (обратитесь к файлу на диске, если что-то не работает).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 		 cylinder {&lt;br /&gt;
 			 max_dim.y*y, min_dim.y*y,&lt;br /&gt;
 			 Radius&lt;br /&gt;
 			 pigment { color rgb z }&lt;br /&gt;
 		 }&lt;br /&gt;
 	 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объявим переменную '''Gear_radius''', облегчающую расположение шестерёнок, и закроем макрос директивой '''#end''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 	 #declare Gear_radius = (Radius+max_dim.z*.5)*x;&lt;br /&gt;
 #end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зубец снова пропал, превратившись в генератор шестерёнок. Перейдём в '''mech.pov''', откроем оператор '''union {''' и добавим объект:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 union{&lt;br /&gt;
 	 object {&lt;br /&gt;
 		 gear(50)&lt;br /&gt;
 		 rotate clock * Angle*y&lt;br /&gt;
 		 #declare masterRadius = Gear_radius;&lt;br /&gt;
 	 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В объекте мы обратились к нашему макросу, заказав шестерню с 50 зубцами, после чего задали поворот, использовав переменную '''clock''', предопределённую самим ''POV-Ray'' и хранящую время с начала анимации; сейчас она содержит 0.&lt;br /&gt;
&lt;br /&gt;
Добавим вторую шестерню после первой, закрыв объединение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 	 object {&lt;br /&gt;
 		 gear(30)&lt;br /&gt;
 		 rotate -clock * Angle + Angle*.5&lt;br /&gt;
 		 translate Gear_radius + masterRadius&lt;br /&gt;
 	 }&lt;br /&gt;
 	 translate -2*x&lt;br /&gt;
 	 rotation 60*z&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы обе шестерни уместились в кадре, сдвинем объединение на 2 единицы влево, а поворот сделает композицию сцены динамичнее. Запустите рендер.&lt;br /&gt;
&lt;br /&gt;
===Ясная, твёрдая, верная сталь===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_68_1.jpg|300px]] Металлические шестерни: уже неплохо, но слишком гладко.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Яркие сине-красные цвета нехарактерны для изделий чёрной металлургии. Чтобы добавить сцене реализма, опишем в файле '''mech_texture.inc''' текстуру стали:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #declare steel = texture {&lt;br /&gt;
 	 pigment { color rgb &amp;lt;.9,.95,1&amp;gt;*.2 }&lt;br /&gt;
 	 finish {&lt;br /&gt;
 		 specular .7&lt;br /&gt;
 		 roughness .01&lt;br /&gt;
 		 metallic&lt;br /&gt;
 	 }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для имитации бликов на металле был использован новый оператор '''finish''' (отделка), содержащий следующие параметры: '''specular''' – интенсивность блика, '''roughness''' – резкость краёв и размер блика (чем ниже значение, тем резче края и меньше блик), '''metallic''' – ключевое слово, делающее блик более «металлическим», окрашивая его в цвет пигмента.&lt;br /&gt;
&lt;br /&gt;
В '''mech.pov''' добавьте по оператору '''texture { steel }''' сразу после каждого вызова макроса '''gear'''. В начало файла добавьте ещё один светильник:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 light_source {&lt;br /&gt;
 	 &amp;lt;-20, 20, 20&amp;gt;,&lt;br /&gt;
 	 color rgb 1&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалите из '''mech_shapes.inс''' все пигменты – они нам больше не понадобятся. Теперь запускайте рендер и любуйтесь результатом.&lt;br /&gt;
&lt;br /&gt;
Ровная, без единого изъяна, поверхность шестерни смотрится мёртво и искусственно. Сымитируем лёгкий налёт ржавчины, переписав пигмент текстуры '''steel''':&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_69_1.jpg|300px]] Вот теперь можно кричать «Мотор!»|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 pigment {&lt;br /&gt;
 	 bozo&lt;br /&gt;
 	 color_map {&lt;br /&gt;
 		 [.37 color rgb &amp;lt;.85,.9,1&amp;gt;*.03]&lt;br /&gt;
 		 [.4 color rgb &amp;lt;1,.6,.5&amp;gt;*.03]&lt;br /&gt;
 	 }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Bozo''' (как вы, надеюсь, помните из предыдущего урока) – тип генератора процедурной текстуры, создающий плавные переходы от 0 до 1, напоминающие облака. Директива '''color_map''' позволяет определить изменения цвета в зависимости от значения генератора. В квадратных скобках описываются ключевые точки в формате '''[&amp;lt;значение генератора&amp;gt; &amp;lt;цвет&amp;gt;]'''; между соседними точками цвет линейно интерполируется.&lt;br /&gt;
&lt;br /&gt;
Теперь поверхность шестерёнок покрыта бурым налётом, но границы ржавчины и металла слишком ровные – необходимо сильнее перемешать значения генератора '''bozo''', используя оператор '''warp'''. Добавьте сразу после '''bozo''' следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 warp {&lt;br /&gt;
 	 turbulence 1&lt;br /&gt;
 	 octaves 4&lt;br /&gt;
 	 lambda 3&lt;br /&gt;
 	 omega .7&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Turbulence''' – ключевое слово, задающее тип искажения; турбулентность несколько раз смещает текстуру в каждой точке. Число смещений задаётся параметром '''octaves'''; '''lambda''' определяет вариативность направления смещения (чем ближе к единице, тем равномерней смещение); '''omega''' – отношение дистанций текущего и предыдущего смещений; число после '''turbulence''' указывает дистанцию первого смещения.&lt;br /&gt;
&lt;br /&gt;
Теперь края ржавых пятен стали рваными, что прибавило сцене реализма. Анимируем сцену, просто запустив ''POV-Ray'' командой ''povray +KFF15 +KF3 &amp;lt;имя файла&amp;gt;'', где '''+KFF&amp;lt;число&amp;gt;''' – количество кадров, '''+KF&amp;lt;число&amp;gt;''' – значение переменной ''clock'' в последнем кадре; далее следует имя файла сцены (расширение '''*.pov''') или файла с настройками ('''*.ini'''). Выполнив ''povray +KFF15 +KF3 mech.ini'', получим 15 кадров анимации поворота шестерёнок на 3 зубца. На выходе будет набор из 15 файлов с карами: воспользуйтесь сторонней графической программой (''GIMP, ImageMagick, Blender'' и т. д.) и соберите их в анимированный GIF, PNG или видеофайл.&lt;br /&gt;
&lt;br /&gt;
===И кое-что еще===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF133_69_2.jpg|300px]] Наши шестеренки стали детальнее.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Маленький бонус: замените свой файл '''mech_shapes.inc''' файлом '''mech_shapes_extend.inc''' с диска. В нем находится переписанный макрос '''gear'''. Теперь шестерёнки содержат больше деталей! Разберитесь, что было сделано, на досуге.&lt;br /&gt;
&lt;br /&gt;
===Загляните на...===&lt;br /&gt;
&lt;br /&gt;
Несколько полезных сайтов о ''POV-Ray'':&lt;br /&gt;
* http://www.povray.org/ Основной сайт программы: исходные тексты, списки рассылки и самое главное...&lt;br /&gt;
* http://hof.povray.org/ Зал славы, галерея лучших работ: многие неотличимы от фотографий.&lt;br /&gt;
* http://www.f-lohmueller.de/index.htm Сайт, почти целиком оформленный изображениями, созданными в ''POV-Ray''; &lt;br /&gt;
* обязательно посетите галерею http://www.f-lohmueller.de/pov/g_000.htm#Trucks с детальнейшими моделями транспорта, целиком описанными на SDL.&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>