<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF84:Ogre - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF84:Ogre&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 21:01:38 GMT</lastBuildDate>
		<item>
			<title>Yaleks в 20:03, 29 ноября 2008</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF84:Ogre&amp;diff=5699&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&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&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;Версия 20:03, 29 ноября 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 42:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 42:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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 class='diff-marker'&gt; &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; &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;nbsp;&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;{{Врезка|right|&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;[[Изображение:Img 84 67 2.png|thumb|Нормаль сообщает Ogre, где у треугольника верх, это позволяет правильно осветить треугольник.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;3D-графика составляет рисунки из множества многоугольников,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;обычно треугольников, потому что они проще. Но как Ogre узнает,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;плоской фигуры две стороны, но используется-то всего одна, поэтому необходимо сообщить Ogre, где у треугольника верх. Благодаря&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;этой информации Ogre сможет правильно освещать объекты. Здесь&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;чистом OpenGL нам пришлось&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;glNormal(), которая определяет нормаль для последующих&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;векторов. Но в Ogre достаточно отредактировать terrain.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;cfg и установить VertexNormal&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;на Yes, чтобы Ogre сам вычислял нормали к ландшафту.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;ландшафт будет правильно освещаться, потому как Ogre знает лицевую сторону каждого&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;|Ширина=400px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;{{Врезка|center|&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;|Заголовок=Создание карт высот в Gimp&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;|Содержание=Карты высот – это полутоновые текстуры, которые сообщают Ogre, как надо рисовать ландшафт,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;мы работали на последних двух уроках, был уже заготовлен в Ogre, и выглядел он не особо&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;хорошо, поэтому мы использовали Gimp и подредактировали края таким образом, чтобы они&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;плавно уходили в море. Используя Gimp, я обнаружил, что лучше всего менять высоту с&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;{{!}}[[Изображение:Img 84 68 1.jpg|200px|]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;{{!}}[[Изображение:Img 84 68 2.jpg|200px|]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;{{!}}colspan=2{{!}}Слева представлена исходная карта высот, справа её отредактированный вариант: по краям зачернено, чтоб получился остров, а светлое пятно – площадка для нашего дома.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;|Ширина=400px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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; &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; &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;nbsp;&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;[[Изображение:Img 84 66 1.jpg|200px|thumb|Тюдоровский домик днем – дымоход отбрасывает тень на крышу, а внизу слева тень от ландшафта.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;В [[LXF83:Ogre|LXF83]] я писал, что в игре Висельник Чед предусмотрено наличие зданий и возможность игроков входить в них, а там, возможно,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;В [[LXF83:Ogre|LXF83]] я писал, что в игре Висельник Чед предусмотрено наличие зданий и возможность игроков входить в них, а там, возможно,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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; class=&quot;diff-lineno&quot;&gt;Строка 67:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 111:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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; &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; &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;nbsp;&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;[[Изображение:Img 84 67 1.jpg|200px|thumb|При вызове m_SceneMgr-&amp;gt;setShadowDebugShadows(true) Ogre покажет, куда предметы отбрасывают тени. Дом отбрасывает тень и от солнца, и от луны.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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 class='diff-marker'&gt; &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; &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; class=&quot;diff-lineno&quot;&gt;Строка 134:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 179:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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; &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; &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;nbsp;&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;[[Изображение:Img 84 69 1.jpg|200px|thumb|Это не интерьер XVI века, но карта Quake погружает наш дом в такие же потёмки, как во времена Тюдоров.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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 class='diff-marker'&gt; &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; &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; class=&quot;diff-lineno&quot;&gt;Строка 214:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 260:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;scenemanager = ST_INTERIOR;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;scenemanager = ST_INTERIOR;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;if (m_SceneMgr != NULL) {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;if (m_SceneMgr != NULL) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;m_Ogre-&amp;gt;getAutoCreatedWindow()-&amp;gt;removeAllViewports();&lt;/div&gt;&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;m_Ogre-&amp;gt;getAutoCreatedWindow()-&amp;gt;removeAllViewports();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;m_SceneMgr-&amp;gt;destroyAllCameras();&lt;/div&gt;&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;m_SceneMgr-&amp;gt;destroyAllCameras();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&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 class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;m_SceneMgr = m_Ogre-&amp;gt;createSceneManager(&amp;quot;BspSceneManager&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;m_SceneMgr = m_Ogre-&amp;gt;createSceneManager(&amp;quot;BspSceneManager&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ResourceGroupManager::getSingleton().linkWorldGeometryToResourceGroup(&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ResourceGroupManager::getSingleton().linkWorldGeometryToResourceGroup(&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 256:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 302:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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; &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; &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;nbsp;&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;{{Врезка|left|&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;Чед написана на 64-битной машине, но с&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;использованием 32-битной ОС, поэтому&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;на 64-битной ОС.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;вас 64-битные&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;например, zziplib,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;DevIL и запустить&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;ldconfig от имени&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;root.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;|Ширина=150px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;Ogre, умещающих&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;Ogre не идеальна,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&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;|Ширина=150px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &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; &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 class='diff-marker'&gt; &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; &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;/table&gt;</description>
			<pubDate>Sat, 29 Nov 2008 20:03:43 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF84:Ogre</comments>		</item>
		<item>
			<title>Yaleks в 18:22, 22 ноября 2008</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF84:Ogre&amp;diff=5529&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki2.linuxformat.ru/index.php?title=LXF84:Ogre&amp;amp;diff=5529&amp;amp;oldid=5528&quot;&gt;(Различия между версиями)&lt;/a&gt;</description>
			<pubDate>Sat, 22 Nov 2008 18:22:45 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF84:Ogre</comments>		</item>
		<item>
			<title>Yaleks: Новая: {{Цикл/Ogre}} == Ogre: Освещаем новый дом == ''ЧАСТЬ 3: Как превратить травянистый холм в крепость в стиле Тюдор...</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF84:Ogre&amp;diff=5528&amp;oldid=prev</link>
			<description>&lt;p&gt;Новая: {{Цикл/Ogre}} == Ogre: Освещаем новый дом == ''ЧАСТЬ 3: Как превратить травянистый холм в крепость в стиле Тюдор...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Цикл/Ogre}}&lt;br /&gt;
== Ogre: Освещаем новый дом ==&lt;br /&gt;
''ЧАСТЬ 3: Как превратить травянистый холм в крепость в стиле Тюдоров и создать солнце и луну всего на четырех страницах? У '''Пола Хадсона''' есть ответ...''&lt;br /&gt;
&lt;br /&gt;
В этот урок мы включили много интересного: наша задача – взять&lt;br /&gt;
пустой ландшафт из прошлого номера, построить дом на плато,&lt;br /&gt;
добавить света и тени, и, самое интересное, позволить игроку&lt;br /&gt;
гулять по дому. Легко? Ой, нет. А моя задача – как раз облегчить работу, поэтому приготовьтесь разогнать игру до скорости света!&lt;br /&gt;
&lt;br /&gt;
Мы загружали ландшафт в игру Висельник Чед с помощью файла&lt;br /&gt;
terrain.cfg, поставляемого вместе с медиа-пакетом Ogre. Всего одной&lt;br /&gt;
строкой кода создается живописная местность, где можно побродить,&lt;br /&gt;
но остаются две проблемы: на границах ландшафт обрывается в пустоту и нет места, где можно поставить дом. Поэтому нам надо сначала&lt;br /&gt;
отредактировать файл ландшафта, пусть запляшет под нашу дудку.&lt;br /&gt;
&lt;br /&gt;
Переместите файл terrain.cfg из каталога media в ваш главный&lt;br /&gt;
каталог, где размещен код. Затем переместите файлы terrain_detail.jpg,&lt;br /&gt;
terrain.png и terrain_texture.jpg из media/materials/textures в ваш главный каталог. Учтите, я сказал «переместите», а не «скопируйте» – не&lt;br /&gt;
оставляйте оригиналы там, где они находятся, не то они будут читаться вместо ваших собственных файлов. Эти четыре файла определяют,&lt;br /&gt;
как выглядит и ведет себя ландшафт.&lt;br /&gt;
&lt;br /&gt;
Используемый нами менеджер сцены, ответственный за обработку неба и земли, создает ландшафт по двумерной карте высот (это&lt;br /&gt;
полутоновой план ландшафта, на котором наивысшие точки показаны&lt;br /&gt;
белым цветом, а самые низкие – черным). В файле terrain.cfg указана&lt;br /&gt;
карта высот terrain.png. Действительный цвет определяется файлом&lt;br /&gt;
terrain_texture.jpg, который «натягивается» на весь ландшафт. Наконец,&lt;br /&gt;
файл terrain_detail.jpg обеспечивает детали, которые будут расположены поверх terrain_texture.jpg, чтобы текстура выглядела сложнее, чем&lt;br /&gt;
она есть на самом деле.&lt;br /&gt;
&lt;br /&gt;
Чего нам не хватает, так это места для нашей постройки. В моей&lt;br /&gt;
версии terrain.png (она находится на диске) я подредактировал карту,&lt;br /&gt;
чтоб выделить пространство для здания (см. «Создание карты высот в&lt;br /&gt;
Gimp»). Вы также заметите, что я сменил цвет terrain_texture.&lt;br /&gt;
jpg на цвет травы, ну устал я от этой пустыни! Теперь откройте в текстовом редакторе файл terrain.cfg и найдите строчку #VertexNormal=Yes.&lt;br /&gt;
Знак # – это комментарий, означающий, что VertexNormal отключен.&lt;br /&gt;
Удалите #, чтобы включить опцию – это вынудит Ogre генерировать&lt;br /&gt;
нормали для нашего ландшафта, которые понадобятся нам позже&lt;br /&gt;
(см. врезку «Зачем нужны нормали»). В файле resources.cfg&lt;br /&gt;
проверьте, что в секции General указано FileSystem=., это заставит Ogre&lt;br /&gt;
считывать файлы ландшафта из вашего текущего каталога. Вперед!&lt;br /&gt;
Запустите нашу игру – вы увидите обширную площадку, здесь-то мы&lt;br /&gt;
и поставим...&lt;br /&gt;
&lt;br /&gt;
=== Дом, который построил Пол ===&lt;br /&gt;
В [[LXF83:Ogre|LXF83]] я писал, что в игре Висельник Чед предусмотрено наличие зданий и возможность игроков входить в них, а там, возможно,&lt;br /&gt;
вступать в борьбу. Теперь, когда мы разровняли место, пора строить&lt;br /&gt;
домик в тюдоровском стиле. Чтобы создать сетку дома, нам требуется объект Entity, представляющий наш дом, и SceneNode (оболочка&lt;br /&gt;
объекта, которая позволит позиционировать дом в пространстве). Мы&lt;br /&gt;
ставим дом раз навсегда, двигаться ему не надо, поэтому просто объявим Entity в chad.h. Добавьте строку в chad.h сразу за определением&lt;br /&gt;
m_OceanFlowNum:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;Entity* HouseEntity&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь добавьте этот код в конец метода createScene() файла chad.cpp:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
HouseEntity = m_SceneMgr-&amp;gt;createEntity(&amp;quot;house&amp;quot;, &amp;quot;tudorhouse.mesh&amp;quot;);&lt;br /&gt;
SceneNode* HouseNode = m_SceneMgr-&amp;gt;getRootSceneNode()-&amp;gt; createChildSceneNode(&amp;quot;HouseNode&amp;quot;);&lt;br /&gt;
HouseNode-&amp;gt;attachObject(HouseEntity);&lt;br /&gt;
HouseNode-&amp;gt;translate(1100,137, 500);&lt;br /&gt;
HouseNode-&amp;gt;scale(0.25,0.125,0.25);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Файл tudorhouse.mesh – один из стандартных сеточных объектов,&lt;br /&gt;
входящих в Ogre, и он выглядит великолепно. Заметим также, что дом&lt;br /&gt;
огромный, поэтому я использовал scale() и приспособил его размер к&lt;br /&gt;
ландшафту. Вот и все, что требовалось для добавления дома в нашу&lt;br /&gt;
игру, поэтому перезапустите make и полюбуйтесь результатом. Нет,&lt;br /&gt;
определения столкновений пока нет – оставим его на потом!&lt;br /&gt;
&lt;br /&gt;
=== Небесное вторжение ===&lt;br /&gt;
Сейчас свет в нашей сцене рассеянный, и у сцены скучный и безжизненный вид. Добавлю-ка я немного простых источников, чтобы вы&lt;br /&gt;
увидели, как работают свет и тени. Упор сделан на слове «простые»,&lt;br /&gt;
потому что Ogre плоховато работает с освещением неба и земли.&lt;br /&gt;
&lt;br /&gt;
Потребуется четыре переменных для работы со светом в chad.h;&lt;br /&gt;
добавим их в конец класса CChadGame:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Light* m_SunLight;&lt;br /&gt;
Light* m_MoonLight;&lt;br /&gt;
double m_SunY;&lt;br /&gt;
double m_SunZ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Да, мы собираемся создать два света: один для солнца, второй&lt;br /&gt;
для луны. Для получения простого эффекта смены дня и ночи нам&lt;br /&gt;
надо вращать два источника света по кругу, чтобы свет плавно перемещался по ландшафту. Также необходимо включить тени. У Ogre есть&lt;br /&gt;
три типа теней и три типа света. Разница между тенями заключается&lt;br /&gt;
в скорости: тень низкого качества прорисовывается быстрее всего.&lt;br /&gt;
Первый тип – SHADOWTYPE_TEXTURE_MODULATIVE, использующий&lt;br /&gt;
простую текстуру для создания теней в нужных местах. На практике&lt;br /&gt;
тени получаются грубоватые – сгодятся только для тех, у кого слабая видеокарта, все остальные в восторг не придут. Следующий по&lt;br /&gt;
качеству тип – SHADOWTYPE_STENCIL_MODULATIVE. Тени выглядят&lt;br /&gt;
более привлекательно, но создаются в один проход, поэтому результат не идеален. Наконец, SHADOWTYPE_STENCIL_ADDITIVE. Тут тени&lt;br /&gt;
выглядят превосходно, для каждого источника света построение осуществляется за отдельный проход, поэтому пересечение теней от двух&lt;br /&gt;
источников будет выглядеть темнее, чем остальные части тени. Как вы&lt;br /&gt;
понимаете, это довольно сложно, но заманчиво!&lt;br /&gt;
&lt;br /&gt;
Каждый из трех типов источников характеризуется своим способом&lt;br /&gt;
освещения. Точечный источник излучает свет как Солнце – одинаково&lt;br /&gt;
во всех направлениях, из определенной точки. Источник направленного света излучает свет в одном направлении и не имеет начальной&lt;br /&gt;
точки. С нашей позиции на Земле солнце выглядит направленным&lt;br /&gt;
источником, потому что мы видим его свет, исходящий из одного&lt;br /&gt;
направления, но не видим его в других направлениях. Наконец, существуют источники узконаправленного света, типа софитов: у них есть&lt;br /&gt;
начальная точка, направление, их свет слабеет с расстоянием, ширину&lt;br /&gt;
угла освещения вы назначаете сами.&lt;br /&gt;
&lt;br /&gt;
Оба наших источника, солнце и луна, находятся очень далеко, поэтому они могут считаться источниками направленного света.&lt;br /&gt;
Не будем пренебрегать деталями – выберем опцию SHADOWTYPE_STENCIL_ADDITIVE, чтобы тени хорошо смотрелись. В последующем&lt;br /&gt;
коде немного приглушим рассеянное освещение, чтобы заметнее стали дневной и ночной источники света.&lt;br /&gt;
&lt;br /&gt;
Вот код – поместите его в метод createScene():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
m_SceneMgr-&amp;gt;setAmbientLight( ColourValue(0.35, 0.35, 0.35) );&lt;br /&gt;
m_SceneMgr-&amp;gt;setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);&lt;br /&gt;
m_SunLight = m_SceneMgr-&amp;gt;createLight(&amp;quot;Sun&amp;quot;);&lt;br /&gt;
m_SunLight-&amp;gt;setType(Light::LT_DIRECTIONAL);&lt;br /&gt;
m_SunLight-&amp;gt;setDiffuseColour(1.0, 1.0, 1.0);&lt;br /&gt;
m_SunLight-&amp;gt;setSpecularColour(1.0, 1.0, 1.0);&lt;br /&gt;
m_SunLight-&amp;gt;setDirection(Vector3(0, sin(m_SunY), sin(m_SunZ)));&lt;br /&gt;
m_MoonLight = m_SceneMgr-&amp;gt;createLight(&amp;quot;Moon&amp;quot;);&lt;br /&gt;
m_MoonLight-&amp;gt;setType(Light::LT_DIRECTIONAL);&lt;br /&gt;
m_MoonLight-&amp;gt;setDiffuseColour(0.3, 0.3, 0.5);&lt;br /&gt;
m_MoonLight-&amp;gt;setSpecularColour(0.0, 0.0, 0.0);&lt;br /&gt;
m_MoonLight-&amp;gt;setDirection(Vector3(0, -sin(m_SunY), sin(m_SunZ)));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Привести луну и солнце в движение можно, отредактировав метод&lt;br /&gt;
frameStarted(), чтобы метод setDirection() вызывался для каждого&lt;br /&gt;
источника. Необходимо также изменить переменные m_SunY и m_SunX, заставив их медленно увеличиваться. Вставьте этот код в начало&lt;br /&gt;
метода frameStarted():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
m_SunLight-&amp;gt;setDirection(Vector3(0, sin(m_SunY), sin(m_SunZ)));&lt;br /&gt;
m_MoonLight-&amp;gt;setDirection(Vector3(0, -sin(m_SunY), -sin(m_SunZ)));&lt;br /&gt;
m_SunY += 0.001;&lt;br /&gt;
m_SunZ += 0.001;&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;
крепость не похоже, правда? Сейчас мы это изменим, соорудив внутри заведомо неприветливую обстановку. На последних трех уроках мы&lt;br /&gt;
играли в песочнице менеджера сцен Ogre для открытого ландшафта,&lt;br /&gt;
но если наши персонажи намерены разгуливать по зданию, потребуется еще один менеджер сцены – BSP.&lt;br /&gt;
&lt;br /&gt;
BSP означает binary space partition [двоичное разбиение пространства] и позволяет очень быстро загружать и обрабатывать закрытые&lt;br /&gt;
пространства. Карты BSP используется во многих играх, главным образом в тех, что используют движок Quake, включая Jedi Knight, Soldier of&lt;br /&gt;
Fortune, Half-life. Проблема с BSP состоит в том, что он не умеет хорошо обрабатывать открытые пространства (включая наш ландшафт),&lt;br /&gt;
поэтому текущий менеджер сцены тоже придется оставить.&lt;br /&gt;
&lt;br /&gt;
Добавление нового менеджера сцены вводит интересные осложнения в наш игровой движок. Во-первых, необходимо отредактировать&lt;br /&gt;
файл resources.cfg, чтобы использовался файл карты Quake 3. Сотни&lt;br /&gt;
карт доступны бесплатно через сеть, но на самом деле демо-версии&lt;br /&gt;
Ogre уже поставляются с очень красивой картой Chiroptera (доступа для скачивания по адресу http://simland.planetquake.gamespy.com/pages/q3maps/chiroptera.htm), ею мы и воспользуемся.&lt;br /&gt;
&lt;br /&gt;
Во-вторых, необходимо разделить методы createScene()&lt;br /&gt;
и frameStarted() на CreateIndoorScene(), createOutdoorScene(),&lt;br /&gt;
frameStartedInside(), frameStartedOutside(). Проще всего это сделать, переименовав createScene() и frameStarted(), например, как&lt;br /&gt;
createOutdoorScene() и frameStartedOutside(), а затем создав заглушки&lt;br /&gt;
для createIndoorScene() и frameStartedIndoor(). Также потребуется объявить новые методы в chad.h.&lt;br /&gt;
Сделав это, добавьте строчку в chad.h в конце класса CChadGame:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int scenemanager;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Переменная будет показывать, снаружи мы или внутри. Теперь&lt;br /&gt;
можно написать новый метод frameStarted() для автоматического&lt;br /&gt;
вызова нужного «подметода», нечто вроде такого:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
bool CChadGame::frameStarted(const FrameEvent&amp;amp; evt) {&lt;br /&gt;
switch (scenemanager) {&lt;br /&gt;
case ST_EXTERIOR_CLOSE:&lt;br /&gt;
return frameStartedOutside();&lt;br /&gt;
break;&lt;br /&gt;
case ST_INTERIOR:&lt;br /&gt;
return frameStartedInside();&lt;br /&gt;
break;&lt;br /&gt;
}&lt;br /&gt;
return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Переменную scenemanager необходимо переустанавливать, как&lt;br /&gt;
только происходит смена типа сцены. Для открытого пространства необходимо добавить эту строку в начале метода createOutdoorScene():&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
scenemanager = ST_EXTERIOR_CLOSE;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Метод frameStartedInside() новый, но ничего особенного не делает –&lt;br /&gt;
в данный момент он должен представлять урезанную версию метода&lt;br /&gt;
frameStartedOutside() и обрабатывать простой ввод от клавиатуры. Вот&lt;br /&gt;
пример подобного кода:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
bool CChadGame::frameStartedInside() {&lt;br /&gt;
m_InputReader-&amp;gt;capture();&lt;br /&gt;
if(m_InputReader-&amp;gt;isKeyDown(KC_ESCAPE)) return false;&lt;br /&gt;
Vector3 translateVector = Vector3::ZERO;&lt;br /&gt;
float playerspeed = m_Player-&amp;gt;getSpeed();&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_W)) translateVector.z =-playerspeed * 5;&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_S)) translateVector.z =+playerspeed * 5;&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_A)) translateVector.x =-playerspeed * 5;&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_D)) translateVector.x =+playerspeed * 5;&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_F1)) createIndoorScene();&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_F2)) createOutdoorScene();&lt;br /&gt;
m_Camera-&amp;gt;moveRelative(translateVector);&lt;br /&gt;
return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вы заметите, что переменная playerspeed умножена на пять – дело&lt;br /&gt;
в том, что карта Quake огромна, и прогулка с прежней скоростью превратилась бы в вечность. Если такое решение вы находите примитивным, попробуйте увеличить ландшафт, удалив вызов scale() для дома,&lt;br /&gt;
а затем выберите значение скорости, пригодное везде.&lt;br /&gt;
&lt;br /&gt;
Теперь перейдем к трудной задаче: загрузке карты Quake. Это&lt;br /&gt;
делается в методе createIndoorScene(), который загрузит нашу карту&lt;br /&gt;
и создаст новую камеру и область просмотра. Прежде чем перейти&lt;br /&gt;
к другому менеджеру сцены, необходимо удалить камеры и области&lt;br /&gt;
просмотра, ассоциированные с текущим менеджером.&lt;br /&gt;
Вот этот код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void CChadGame::createIndoorScene() {&lt;br /&gt;
scenemanager = ST_INTERIOR;&lt;br /&gt;
if (m_SceneMgr != NULL) {&lt;br /&gt;
m_Ogre-&amp;gt;getAutoCreatedWindow()-&amp;gt;removeAllViewports();&lt;br /&gt;
m_SceneMgr-&amp;gt;destroyAllCameras();&lt;br /&gt;
}&lt;br /&gt;
m_SceneMgr = m_Ogre-&amp;gt;createSceneManager(&amp;quot;BspSceneManager&amp;quot;);&lt;br /&gt;
ResourceGroupManager::getSingleton().linkWorldGeometryToResourceGroup(&lt;br /&gt;
ResourceGroupManager::getSingleton().getWorldResourceGroupName(), &amp;quot;maps/chiropteradm.bsp&amp;quot;, m_SceneMgr);&lt;br /&gt;
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();&lt;br /&gt;
ResourceGroupManager::getSingleton().clearResourceGroup(ResourceGroupManager::getSingleton().getWorldResourceGroupName());&lt;br /&gt;
ResourceGroupManager::getSingleton().loadResourceGroup(ResourceGroupManager::getSingleton().getWorldResourceGroupName(), false, true);&lt;br /&gt;
m_Camera = m_SceneMgr-&amp;gt;createCamera(&amp;quot;Player Cam&amp;quot;);&lt;br /&gt;
m_Camera-&amp;gt;setNearClipDistance(4);&lt;br /&gt;
m_Camera-&amp;gt;setFarClipDistance(4000);&lt;br /&gt;
m_Viewport = m_Ogre-&amp;gt;getAutoCreatedWindow()-&amp;gt;addViewport(m_Camera);&lt;br /&gt;
m_Viewport-&amp;gt;setBackgroundColour(ColourValue(0, 0, 0));&lt;br /&gt;
ViewPoint vp = m_SceneMgr-&amp;gt;getSuggestedViewpoint(true);&lt;br /&gt;
m_Camera-&amp;gt;setPosition(vp.position);&lt;br /&gt;
m_Camera-&amp;gt;pitch(Degree(90));&lt;br /&gt;
m_Camera-&amp;gt;rotate(vp.orientation);&lt;br /&gt;
m_Camera-&amp;gt;setFixedYawAxis(true, Vector3::UNIT_Z);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Установка значений «ближней» и «дальней» дистанций обрезания необходима, потому что наша камера работает внутри замкнутой&lt;br /&gt;
области, и нужно фокусироваться на вещах, расположенных близко&lt;br /&gt;
к камере. Метод getSuggestedViewport() считывает произвольную начальную позицию игрока на карте и устанавливает камеру в эту&lt;br /&gt;
точку. Нам необходимо установить оси камеры pitch и yaw потому,&lt;br /&gt;
что Quake использует для плоскости пола координаты Х и Y, а Z – для&lt;br /&gt;
высоты, а мы обычно используем для пола X и Z и Y – для высоты.&lt;br /&gt;
&lt;br /&gt;
Мы еще не закончили: понадобится добавить две строки в начало&lt;br /&gt;
метода createOutdoorScene(), чтобы Ogre обновлял все свои ресурсы&lt;br /&gt;
при загрузке сцены в открытом пространстве. Без них закрытая сцена обновит ресурсы и выгрузит все ресурсы открытой сцены. Итак,&lt;br /&gt;
добавляем две строки:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
ResourceGroupManager::getSingleton().clearResourceGroup(ResourceGroupManager::getSingleton().getWorldResourceGroupName());&lt;br /&gt;
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Наконец, проверим, что вызов createScene() в конструкторе&lt;br /&gt;
CChadGame() (который находится в начале chad.cpp) заменен на&lt;br /&gt;
createOutdoorScene(). Ну вот и все: запустите make, затем chad.&lt;br /&gt;
Посмотрим, заметите ли вы разницу....&lt;br /&gt;
&lt;br /&gt;
=== Сложный вопрос ===&lt;br /&gt;
ОК, разницы нет – по крайней мере, с точки зрения игрока. Это&lt;br /&gt;
потому, что мы написали код обработки для закрытой сцены, но не&lt;br /&gt;
написали кода, загружающего эту сцену. Вы вольны написать код,&lt;br /&gt;
способный обнаруживать, что игрок входит в дверь дома, а мы напишем более простую (лишь бы работала) «клавишную реализацию&lt;br /&gt;
переключения сцен», которую можно использовать в любом месте&lt;br /&gt;
ландшафта.&lt;br /&gt;
&lt;br /&gt;
У нас уже есть функции обработки клавиатуры frameStaretd*(),&lt;br /&gt;
поэтому остается добавить в них поддержку двух дополнительных&lt;br /&gt;
клавиш: F1 (для загрузки закрытой сцены) и F2 (для загрузки открытой сцены). Код, который загружает и выгружает ресурсы, камеры и&lt;br /&gt;
области просмотра, расположен в методах create*Scene(), поэтому&lt;br /&gt;
о них беспокоиться не надо. Все, что нам надо сделать, это вызвать&lt;br /&gt;
требуемый метод create*Scene(),например, так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_F1)) createIndoorScene();&lt;br /&gt;
if (m_InputReader-&amp;gt;isKeyDown(KC_F2)) createOutdoorScene();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Поместите эти две строчки вместе с остальными вызовами&lt;br /&gt;
isKeyDown(), перезапустите make, затем саму игру. На этот раз вы&lt;br /&gt;
должны попасть на карту Quake и исследовать ваш новый интерьер,&lt;br /&gt;
просто нажав клавишу F1 и пару секунд подождав, пока загрузятся&lt;br /&gt;
необходимые ресурсы Ogre.&lt;br /&gt;
&lt;br /&gt;
Мы рассмотрели в этом руководстве много нового. Труднее всего&lt;br /&gt;
уместить в голове переход от одного менеджера сцены к нескольким;&lt;br /&gt;
все остальное сравнительно просто! Я надеюсь, что вам понравилось, как легко Ogre создает освещение и тени и работает с уровнями BSP, хотя покамест некоторые недостатки игры могут и раздражать – отсутствие обнаружения столкновений, плохой ввод, небо, на&lt;br /&gt;
котором не сказывается освещение, и так далее. Часть недостатков&lt;br /&gt;
вы можете исправить сами, ведь это руководство написано для того,&lt;br /&gt;
чтобы игру программировали вы, а не я. Но с остальными мы разберемся вместе. До следующего раза!&lt;/div&gt;</description>
			<pubDate>Sat, 22 Nov 2008 18:21:59 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF84:Ogre</comments>		</item>
	</channel>
</rss>