<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
  <title>Сообщества</title>
  <link>http://www.gamedev.ru/community/</link>
  <description>Сообщества</description>
  <language>ru</language>
  <generator>http://skif.qrim.ru/</generator>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/k5engine/blog/?id=5107</guid>
  <pubDate>Fri, 30 Jul 2010 15:45:57 GMT</pubDate>
  <title>Обновление от 30.07.2010</title>
  <link>http://www.gamedev.ru/community/k5engine/blog/?id=5107</link>
  <description>
&lt;p&gt;Добавлена новая статья &amp;quot;Система событий движка&amp;quot; и урок к ней.
&lt;br /&gt;Обновлён сам движок, несколько небольших изменений в коде.
&lt;br /&gt;Так же сделано одно важное изменение в распространении уроков, теперь все они идут в одном архиве для всех статей. Соответственно новые уроки будут просто добавляться в этот архив. &lt;/p&gt;
&lt;p&gt;Далее по плану статья о системе действий движка и работа над кодом.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/k5engine/articles/?id=5106</guid>
  <pubDate>Fri, 30 Jul 2010 15:40:55 GMT</pubDate>
  <title>Система событий движка</title>
  <link>http://www.gamedev.ru/community/k5engine/articles/?id=5106</link>
  <description>
&lt;p&gt;&lt;b&gt;Система событий движка&lt;/b&gt;
&lt;p&gt;Система событий состоит из двух компонентов: очередь и структура-событие. Устройство генерирует в указанную очередь описания того или иного события, произошедшего в системе. Это может быть событие тика таймера, движения или клика мышки, нажатие на клавишу клавиатуры, потеря фокуса окна.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Как работать с системой событий&lt;/b&gt;
&lt;p&gt;Для начала надо создать событийную очередь &amp;mdash; TEventDeque и передать устройству указатель на неё:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;TEventDeque EventDeque;
Device.SetEventDeque&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&amp;amp;EventDeque&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Далее в процессе работы приложения надо у устройства вызвать метод ProcessEvent(). Оно обработает события, произошедшие в системе за время рисования кадра и добавит в очередь на каждое событие структуру TEvent.
&lt;br /&gt;Далее в цикле выполняем извлечение событий и их обработку:
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;EventDeque.IsNotEmpty&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{
  TEvent Event&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;EventDeque.Pop&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  ...
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Типы и подтипы событий описаны в enum-типе enEventTypes, который находится в заголовочном файле enum_EventTypes.
&lt;br /&gt;По поводу организации описаний типов событий в&amp;nbsp; enEventTypes: в задании подтипов событий используется запись такого вида: например EN_SYSTEM в перечислении равна 1, тогда события, которые относятся к системным, в своём значении будут начинаться с единицы: EN_QUIT&amp;nbsp; = 100, EN_ACTIVATE = 102, EN_DEACTIVATE = 103 и так далее. &lt;/p&gt;
&lt;p&gt;Для того, что бы узнать, какой тип события произошёл, надо проверить значение переменной Type у&amp;nbsp; TEvent:
&lt;br /&gt;EN_NONE &amp;mdash; нет события, данный параметр не должен появляться у события, извлечённого из очереди, но он по умолчанию присваивается новому экземпляру&amp;nbsp; TEvent
&lt;br /&gt;EN_SYSTEM&amp;nbsp;  &amp;mdash; системное событие, такое как потеря фокуса, изменения размера окна, закрытие окна. 
&lt;br /&gt;EN_KEYBOARD &amp;mdash; события клавиатуры: нажатия на клавиши 
&lt;br /&gt;EN_MOUSE &amp;mdash; события мыши: движение, клики 
&lt;br /&gt;EN_TIMER &amp;mdash; событие тика таймера, время указывается в миллисекундах&amp;nbsp; 
&lt;br /&gt;EN_USER &amp;mdash; события пользователя, в данный момент не используется&lt;/p&gt;
&lt;p&gt;Код событий может выглядеть так:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;EventDeque.IsNotEmpty&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{

  TEvent Event&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;EventDeque.Pop&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Event.Type&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{
    &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; EN_TIMER:{}&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; EN_SYSTEM:{}&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; EN_KEYBOARD:{}&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; EN_MOUSE:{}&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;default&lt;/span&gt;:&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  }
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Далее в зависимости от типа произошедшего события нужно выполнить те или иные действия. 
&lt;br /&gt;TEvent имеет вложенные структуры для каждого типа события:
&lt;br /&gt;TSystemEvent System &amp;mdash; параметры системного события
&lt;br /&gt;TKeyboardEvent Keyboard &amp;mdash; параметры события клавиатуры
&lt;br /&gt;TMouseEvent Mouse &amp;mdash; параметры события мыши
&lt;br /&gt;TTimerEvent Timer &amp;mdash; таймер&lt;/p&gt;
&lt;p&gt;&lt;b&gt;TSystemEvent&lt;/b&gt;
&lt;p&gt;Структура имеет такие параметры:&lt;/p&gt;
&lt;p&gt;enEventTypes Type &amp;mdash; тип системного события, принимает значения:
&lt;br /&gt;&amp;nbsp; EN_QUIT &amp;mdash; закрытие окна 
&lt;br /&gt;&amp;nbsp; EN_WINDOWRESIZE &amp;mdash; изменение размера окна
&lt;br /&gt;&amp;nbsp; EN_ACTIVATE &amp;mdash; окно стало активно
&lt;br /&gt;&amp;nbsp; EN_DEACTIVATE &amp;mdash; окно стало не активно
&lt;br /&gt;&amp;nbsp; EN_PAINT &amp;mdash; перерисовка окна, выполняется при не активном окне
&lt;br /&gt;&amp;nbsp; EN_MINIMIZE &amp;mdash; событие сворачивания окна
&lt;br /&gt;&amp;nbsp; EN_RESTORE &amp;mdash; событие восстановления окна&lt;/p&gt;
&lt;p&gt;int&amp;nbsp; WindowWidth &amp;mdash; новая ширина окна, приходит при изменении размера окна 
&lt;br /&gt;int&amp;nbsp; WindowHeight &amp;mdash; новая высота окна, приходит при изменении размера окна&lt;/p&gt;
&lt;p&gt;&lt;b&gt;TKeyboardEvent&lt;/b&gt;
&lt;p&gt;Структура имеет такие параметры:&lt;/p&gt;
&lt;p&gt;enEventTypes Type &amp;mdash; тип клавиатурного события. Может принимать такие значения:
&lt;br /&gt;&amp;nbsp; EN_KEYDOWN &amp;mdash; кнопка нажата
&lt;br /&gt;&amp;nbsp; EN_KEYUP &amp;mdash; кнопка отжата&lt;/p&gt;
&lt;p&gt;enEventTypes Key &amp;mdash; вируальный код клавиши, которая нажата. Список большой и него нет смысла здесь приводить. Коды начинаются с префикса EN_KEY_ и буквы, цифры или сокращения&amp;nbsp; клавиши на английском языке, например: EN_KEY_A, EN_KEY_K, EN_KEY_9,&amp;nbsp; EN_KEY_MINUS&lt;/p&gt;
&lt;p&gt;wchar_t Symbol &amp;mdash; реальный символ, который был введён с клавиатуры. Символ приходит толко при событиии&amp;nbsp; EN_KEYDOWN&lt;/p&gt;
&lt;p&gt;&lt;b&gt;TMouseEvent&lt;/b&gt;
&lt;p&gt;enEventTypes Type &amp;mdash; тип события мыши. Может принимать такие значения:
&lt;br /&gt;&amp;nbsp; EN_MOUSEMOTION &amp;mdash; движение мыши
&lt;br /&gt;&amp;nbsp; EN_MOUSEBUTTONDOWN &amp;mdash; кнопка мыши нажата
&lt;br /&gt;&amp;nbsp; EN_MOUSEBUTTONUP &amp;mdash; кнопка мыши отпущена&lt;/p&gt;
&lt;p&gt;enEventTypes Button &amp;mdash; кнопка мыши, которая была нажата, значение задаётся при&amp;nbsp; EN_MOUSEBUTTONUP и EN_MOUSEBUTTONDOWN и принимает такие значения:
&lt;br /&gt;&amp;nbsp; EN_MOUSEBUTTONLEFT &amp;mdash; левая кнопка 
&lt;br /&gt;&amp;nbsp; EN_MOUSEBUTTONMIDDLE &amp;mdash; кнопка по середние
&lt;br /&gt;&amp;nbsp; EN_MOUSEBUTTONRIGHT &amp;mdash; правая кнопка&lt;/p&gt;
&lt;p&gt;int X &amp;mdash; координата курсора по оси X экрана
&lt;br /&gt;int Y &amp;mdash; координата курсора по оси Y экрана&lt;/p&gt;
&lt;p&gt;&lt;b&gt;TTimerEvent&lt;/b&gt;
&lt;p&gt;Событие таймера, имеет только один параметр Delay. Показывает время в миллисекундах, прошедшее с последнего рисования сцены. &lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;На этом всё.
&lt;br /&gt;Уроки можно скачать по ссылке:
&lt;br /&gt;&lt;a href=&quot;http://narod.ru/disk/23268052000/Tutorials.zip.html&quot;&gt;Tutorials&lt;/a&gt;
&lt;br /&gt;К данной статье относится урок №8&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/ufa_proj/articles/?id=5105</guid>
  <pubDate>Thu, 29 Jul 2010 03:29:39 GMT</pubDate>
  <title>Мои впечатления и проект</title>
  <link>http://www.gamedev.ru/community/ufa_proj/articles/?id=5105</link>
  <description>
&lt;p&gt;Всем привет. Хотел бы поделится впечатлением о Уфимских разработчиках игр. 
&lt;br /&gt;Начну с того что очень мало людей в Уфе занимаются программированием игр. Большинство конечно любят придумывать сюжет, дизайн игры, и т.д. 
&lt;br /&gt;Скажу и то что видел пару почти готовых игр, которые могли бы выйти хоть в маленький но в свет. Конечно не буду судить сейчас эти игры, просто расскажу что видел. Первую увидел игру в 3D - что похвально. Но сама игра мне показалось печальной, особенно графика. Вторая была онлайн игра 2D. Использовался чей то движок, SQL.
&lt;br /&gt;В общем в Уфе можно найти пару проектов, почти дошедших до конца.
&lt;br /&gt;Я пытался сделать свой движок, но то не хватало времени, то начинал сначала. Были иногда мысли, что это мне не нужно. Что раз не получается значит так и надо. Убил много времени, сил и денег. На этот раз движок получается удачно. Основную ставку сделаю на графику. Пишу на C++ DirectX SDK 10.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;Ну и раз он получается удачно, я решил написать об этом и попробовать собрать сообщество.
&lt;br /&gt;Думаю создать что нибудь шикарное... Если графику поднять до высокого уровня, и обзавестись красивой идеей :) то получится отлично....&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;Вот номер аськи, если кто нибудь захочет посодействовать:
&lt;br /&gt;ICQ 630963877 СТАС.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://iphone.gamedev.ru/blog/?id=5102</guid>
  <pubDate>Wed, 28 Jul 2010 15:43:11 GMT</pubDate>
  <title>Imp - моя вторая игра для iPhone</title>
  <link>http://iphone.gamedev.ru/blog/?id=5102</link>
  <comments>http://iphone.gamedev.ru/forum/?id=136300</comments>
  <description>
&lt;p&gt;Игра была сделана быстрее-бегом за 3 недели с нуля. Как обычно писалась на MSVS, ну а после уже на Xcode.
&lt;br /&gt;Сначала задумывалась быть бесконечным платформером, но теперь выглядит не совсем как платформер, т.к. 3/4 пространства занимают монстры. Игра может показаться быстрой, но на самом деле это не так. (просто так зарабатываю 5000 очков, если постараться, то более 15000)
&lt;br /&gt;Собственно сам линк на игру: &lt;a href=&quot;http://itunes.apple.com/us/app/imp/id382291633?mt=8&quot;&gt;http://itunes.apple.com/us/app/imp/id382291633?mt=8&lt;/a&gt;
&lt;br /&gt;Игровое видео: &lt;a href=&quot;http://www.youtube.com/watch?v=yTnHFWzcAww&quot;&gt;http://www.youtube.com/watch?v=yTnHFWzcAww&lt;/a&gt;
&lt;br /&gt;Промо-коды:
&lt;br /&gt;H46YJAN43FEP
&lt;br /&gt;LY69HATXPXTW
&lt;br /&gt;EL34W4397F7A&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/ogre_3d/articles/?id=5099</guid>
  <pubDate>Tue, 27 Jul 2010 07:38:53 GMT</pubDate>
  <title>Сборка и настройка Огра (WIN32 VS2010)</title>
  <link>http://www.gamedev.ru/community/ogre_3d/articles/?id=5099</link>
  <description>
&lt;p&gt;Попробуем просто и без подробностей собрать Огр и создать рабочий проект который будет рисовать нам пустую сцену.
&lt;p&gt;Собираем связку Огр + Буст. Все остальное трогать не будем для упрощения. Как было сказано в заголовке, сборка будет под 32 бита в Visual Studio 2010.&lt;/p&gt;
&lt;h2&gt;Архивы сырцов.&lt;/h2&gt;
&lt;p&gt;Вначале скачаем все нужные архивы с сырцами и программы - DXSDK, BOOST, CMAKE, OGRE_SRC и OGRE_DEPENDENCIES.&lt;/p&gt;
&lt;p&gt;DXSDK - июнь 2010 г.
&lt;br /&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?familyid=3021D52B-514E-41D3-AD02-438A3BA730BA&amp;amp;displaylang=en&quot;&gt;http://www.microsoft.com/downloads/details.aspx?familyid=3021D52B&amp;hellip; isplaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;BOOST - 1.43.0
&lt;br /&gt;&lt;a href=&quot;http://sourceforge.net/projects/boost/files/&quot;&gt;http://sourceforge.net/projects/boost/files/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CMAKE - 2.8.2
&lt;br /&gt;&lt;a href=&quot;http://www.cmake.org/cmake/resources/software.html&quot;&gt;http://www.cmake.org/cmake/resources/software.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OGRE_SRC 1.7.1 и OGRE_DEPENDENCIES от 2010.05.01
&lt;br /&gt;&lt;a href=&quot;http://www.ogre3d.org/download/source&quot;&gt;http://www.ogre3d.org/download/source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Соответственно это сейчас версии такие, в будущим они изменятся и далее в сответствующих путях надо будет их поменять.&lt;/p&gt;
&lt;h2&gt;Сборка буста.&lt;/h2&gt;
&lt;p&gt;Подробности сборки можно найти здесь: &lt;a href=&quot;http://boost.org/more/getting_started/windows.html&quot;&gt;http://boost.org/more/getting_started/windows.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если коротко, то:
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;Извлекаем архив (&amp;quot;boost_1_43_0.zip&amp;quot; или другой) в &amp;quot;C:\Program Files\&amp;quot;.
Там появляется папка &amp;quot;boost_1_43_0&amp;quot; или другая с соответствующей версией буста.
Открываем консоль и переходим в эту папку.
Запускаем bootstrap.bat и ждем его завершения.
Потом &amp;quot;bjam.exe --build-type=complete&amp;quot; и ждем очень долго.&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Результатом является папка буста весящая около шести гигабайт.&lt;/p&gt;
&lt;p&gt;Теперь осталось создать переменные окружения:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;BOOST_INCLUDE_DIRS = C:\Program Files\boost_1_43_0\boost
BOOST_LIBRARIES = C:\Program Files\boost_1_43_0\stage\lib
BOOST_ROOT = C:\Program Files\boost_1_43_0&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Они нам нужны для того, чтобы CMake сумел найти буст.&lt;/p&gt;
&lt;h2&gt;Установка SDK для DirectX а потом и CMake.&lt;/h2&gt;
&lt;p&gt;Это сложности представлять не должно. Поэтому описывать это я не буду.&lt;/p&gt;
&lt;h2&gt;Подготовка окончена. Далее начинается, собственно, Огр.&lt;/h2&gt;
&lt;p&gt;Внвчале извлечение сырцов и сборка зависимостей.&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px; overflow: auto; overflow-x: auto; overflow-y:hidden; height:auto;&quot;&gt;&lt;pre&gt;Извлекаем архив с сырцами Огра (&amp;quot;ogre_src_v1-7-1.exe&amp;quot; или другой) в &amp;quot;C:\Program Files\&amp;quot;.
Там появляется папка &amp;quot;ogre_src_v1-7-1&amp;quot; или другая с соответствующей версией Огра.
Я ее для красоты переименовал в &amp;quot;ogre_1_7_1&amp;quot;.
Далее извлекаем зависимости (&amp;quot;OgreDependencies_MSVC_20100501.zip&amp;quot; или другой) в &amp;quot;C:\Program Files\ogre_1_7_1\&amp;quot;.
Затем переходим в &amp;quot;C:\Program Files\ogre_1_7_1\Dependencies\src\&amp;quot;.
Открываем проект для соответствующей версии студии и собираем его в релизе и дебаге.&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Создание проектов.&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px; overflow: auto; overflow-x: auto; overflow-y:hidden; height:auto;&quot;&gt;&lt;pre&gt;Теперь можно запустить CMake (cmake-gui), сказать ему, что и сырцы и бинарники лежат в &amp;quot;C:/Program Files/ogre_1_7_1&amp;quot;.
Далее жмем на кнопку &amp;quot;Configure&amp;quot; и смотрим, чтобы в окне конфигурации параметр OGRE_CONFIG_THREAD_PROVIDER = boost.
Если нет, то надо разбираться с причиной.
Далее жмем кнопку &amp;quot;Generate&amp;quot; и CMake, один раз спросив, для чего проекты генерить, сгенерит нам все что нужно.
Если же эта кнопка не активна, то еще раз нажимаем на &amp;quot;Configure&amp;quot;.&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Теперь открываем &amp;quot;C:\Program Files\ogre_1_7_1\OGRE.sln&amp;quot; и собираем собственно Огр для нужных нам конфигураций.&lt;/p&gt;
&lt;p&gt;ОДНАКО! Не забываем после сборки очередной конфирурации собирать специальный проект &amp;quot;INSTALL&amp;quot;. Он будет копировать нужные файлы в папку &amp;quot;C:\Program Files\ogre_1_7_1\SDK\&amp;quot;.&lt;/p&gt;
&lt;p&gt;Теперь осталось создать переменные окружения:&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;OGRE_SDK = C:\Program Files\ogre_1_7_1\SDK
Добавить в переменную Path:
Path += ;C:\Program Files\ogre_1_7_1\SDK\bin\debug;C:\Program Files\ogre_1_7_1\SDK\bin\release&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Зачем ? Для удобства. Далее станет понятно.&lt;/p&gt;
&lt;h2&gt;Создание простого проекта на Огре.&lt;/h2&gt;
&lt;p&gt;Попробуем теперь собрать простенькое приложеньице для Огра.&lt;/p&gt;
&lt;p&gt;Для этого создаем в удобном месте пустой Win32 проект и начинаем его настраивать.&lt;/p&gt;
&lt;p&gt;Добавляем файл Main.cpp с содержимым как ниже:&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;ExampleApplication.h&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #0030fF; &quot;&gt;class&lt;/span&gt; AppFrameListener : &lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt; ExampleFrameListener
{
&lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt;:
  AppFrameListener&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;RenderWindow *win, Camera *cam, &lt;span style=&quot;color: #0030fF; &quot;&gt;const&lt;/span&gt; String &amp;amp;debugText&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    : ExampleFrameListener&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;win, cam&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    mDebugText = debugText;
  }

  &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; frameStarted&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;const&lt;/span&gt; FrameEvent&amp;amp; evt&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    mDebugText = &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;P: &amp;quot;&lt;/span&gt; + StringConverter::toString&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;mCamera-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;getDerivedPosition&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; +
           &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot; &amp;quot;&lt;/span&gt; + &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;O: &amp;quot;&lt;/span&gt; + StringConverter::toString&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;mCamera-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;getDerivedOrientation&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt; ExampleFrameListener::frameStarted&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;evt&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; == &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
      &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;true&lt;/span&gt;;
  }
};

&lt;span style=&quot;color: #0030fF; &quot;&gt;class&lt;/span&gt; Application : &lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt; ExampleApplication
{
&lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt;:
  Application&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; {}

&lt;span style=&quot;color: #0030fF; &quot;&gt;protected&lt;/span&gt;:
  String mDebugText;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; createScene&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    mSceneMgr-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;setAmbientLight&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;ColourValue&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;f, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;f, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;f&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    mCamera-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;setNearClipDistance&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;f&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    mCamera-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;setFarClipDistance&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;f&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    mCamera-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;setPosition&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }

  &lt;span style=&quot;color: #808080&quot;&gt;// Create new frame listener&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; createFrameListener&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    mFrameListener= &lt;span style=&quot;color: #0030fF; &quot;&gt;new&lt;/span&gt; AppFrameListener&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;mWindow, mCamera, mDebugText&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    mRoot-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;addFrameListener&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;mFrameListener&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }
};

&lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt; WINAPI WinMain&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;HINSTANCE, HINSTANCE, LPSTR, &lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;try&lt;/span&gt;
  {
    Application app;
    app.go&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }
  &lt;span style=&quot;color: #0030fF; &quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Ogre::Exception&amp;amp; e&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    MessageBox&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;NULL, e.getFullDescription&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.c_str&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;, &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;An exception has occurred!&amp;quot;&lt;/span&gt;, MB_ICONERROR | MB_TASKMODAL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Далее открываем свойство проекта и комбобокс &amp;quot;Configuration&amp;quot; ставим в &amp;quot;All Configurations&amp;quot;.&lt;/p&gt;
&lt;p&gt;Далее ставим:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px; overflow: auto; overflow-x: auto; overflow-y:hidden; height:auto;&quot;&gt;&lt;pre&gt;General -&amp;gt; Output Directory = $(SolutionDir)
General -&amp;gt; Character Set = Use Multi-Byte Character Set
C/C++ -&amp;gt; General -&amp;gt; Additional Include Directories = $(OGRE_SDK)/include/ogre;$(OGRE_SDK)/include;$(BOOST_ROOT)
Linker -&amp;gt; general -&amp;gt; Additional Library Directories = $(OGRE_SDK)/lib/$(Configuration);$(BOOST_LIBRARIES)
Linker -&amp;gt; Input -&amp;gt; Additional Dependencies += OgreMain.lib;OIS.lib;     // Лучше добавлять в начало&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Потом переключаемся: &amp;quot;Configuration&amp;quot; ставим в &amp;quot;Debug&amp;quot;.&lt;/p&gt;
&lt;p&gt;Идем в Linker -&amp;gt; Input -&amp;gt; Additional Dependencies, там дописываем к&amp;nbsp; OgreMain.lib;OIS.lib; буквы &amp;quot;_d&amp;quot; в конце имен (т.е. станет &amp;quot;OgreMain_d.lib;OIS_d.lib;&amp;quot;).&lt;/p&gt;
&lt;p&gt;Все! Можно собирать. Однако запускаться оно пока не будет.&lt;/p&gt;
&lt;p&gt;Для успешного запуска надо скопировать несколько файликов в папку с нашим проектом.&lt;/p&gt;
&lt;p&gt;C:\Program Files\ogre_1_7_1\bin\debug\plugins_d.cfg
&lt;br /&gt;C:\Program Files\ogre_1_7_1\bin\release\plugins.cfg
&lt;br /&gt;C:\Program Files\ogre_1_7_1\SDK\OSX\Xcode Templates\Xcode\Project Templates\Ogre\iPhone OS\Resources\media\packs\OgreCore.zip&lt;/p&gt;
&lt;p&gt;И создать resources_d.cfg и resources.cfg с одинаковым содержанием:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[General]
FileSystem=.
Zip=OgreCore.zip&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Собственно это все.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/k5engine/articles/?id=5091</guid>
  <pubDate>Tue, 20 Jul 2010 14:19:19 GMT</pubDate>
  <title>Графическая система движка</title>
  <link>http://www.gamedev.ru/community/k5engine/articles/?id=5091</link>
  <comments>http://www.gamedev.ru/community/k5engine/forum/?id=136021</comments>
  <description>
&lt;p&gt;&lt;b&gt;Введение.&lt;/b&gt;
&lt;p&gt;В данной статье описывается роль класса-устройства в работе графической системы, система координат сцены, менеджмент ресурсов, типы графических объектов, списки графических объектов а так же очередь рендера и пул вершин. Так же к статье прилагается набор примеров-проектов.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Базовые принципы в K5Engine&lt;/b&gt;
&lt;p&gt;Есть несколько общих правил, которым подчиняется структура движка:&lt;/p&gt;
&lt;p&gt;Именование классов, все имена классов начинаются с префикса T, так же есть стандартные указатели на классы, они начинаются с префикса p. Например класс TDevice, экземпляр класса Device и указатель на&amp;nbsp; устройство pTDevice.&lt;/p&gt;
&lt;p&gt;Все основные объекты имеют во первых &amp;mdash; имя, во вторых &amp;mdash; индивидуальный идентификатор. Он есть у ресурсов, графических объектов и классов-действий. &lt;/p&gt;
&lt;p&gt;Так же почти все основные объекты имеют специальные списки и менеджеры списков. Например это TSpriteList,&amp;nbsp; TSpriteListManager, TTextureList, TActionList и другие.&lt;/p&gt;
&lt;p&gt;Если проверка параметров проходит не удачно, то система кидает исключение. Выбрасывается класс-исключение TBaseException, который несёт в себе сообщение о месте происшествия и описание ошибки. Более подробно о системе генерации исключений можно прочитать в отдельной статье: 
&lt;br /&gt;&lt;a href=&quot;http://monax-at.blogspot.com/2010/02/blog-post.html&quot;&gt;класс-генератор исключений&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;В движке широко используются перечисления, они все начинаются с префикса en, например: enEventTypes, enColorComponent, enChangeValueDirection. Имена значений перечислений&amp;nbsp; начинаются с составного префикса EN_ + сокращение от имени самого перечисления. Например: EN_CVD_Set, EN_ACS_Run, EN_CC_Alpha. Единственное исключение &amp;mdash; имена типов событий, они имеют только начальный префикс EN_, например: EN_SYSTEM, EN_ACTIVATE, EN_MOUSEMOTION.&lt;/p&gt;
&lt;p&gt;У классов движка стандартизированы методы. Метод задания параметра всегда начинается с префикса Set, получение параметра &amp;mdash; Get, увеличение или уменьшение параметра &amp;mdash; Inc и&amp;nbsp; Dec. Например &amp;mdash; у класса TPoint3D функции:&lt;/p&gt;
&lt;p&gt;void Set(const float &amp;amp;x,const float &amp;amp;y);
&lt;br /&gt;void Set(const TPoint3D &amp;amp;Point);
&lt;br /&gt;float GetX() const;
&lt;br /&gt;void IncY(const float &amp;amp;Value);
&lt;br /&gt;void Dec(const float &amp;amp;x,const float &amp;amp;y);&lt;/p&gt;
&lt;p&gt;Так же часто для удобства имеются переопределённые операторы, в частности оператор круглых скобок, которые можно использовать вместо функций Set. 
&lt;br /&gt;Для получения прямого доступа к элементам классов, если такая возможность предоставлена, используются функции вида Get..Ptr, например GetPointPtr, GetActionsPtr.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Device в K5Engine&lt;/b&gt;
&lt;p&gt;Класс-устройство играет большую роль в структуре движка: он создаёт окно приложение, классы, зависящие от платформы и рендера а также преобразовывает системные события в события движка. 
&lt;br /&gt;Его базовая реализация &amp;mdash; TBaseDevice, предоставляет интерфейс для создания классов-устройств, зависящих от типа системы (Windows, Linux, Mac-OS и тд). В данный момент есть две предметные реализации устройства &amp;mdash; WinApiDX8Device и WinApiGLDevice которые, соответственно, предоставляют рендер через DirectX8 и OpenGL с обработкой событий через WinApi. Так же есть &amp;laquo;высокоуровевая&amp;raquo; реализация TDevice, благодаря которой не нужно беспокоиться о типе устройства. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Система координат&lt;/b&gt;
&lt;p&gt;Сцена в движке по сути трёхмерная. Координаты x и y &amp;mdash; позиция объекта на экране, z &amp;mdash; его позиция по глубине. Центр системы координат находится в верхнем левом углу создаваемого окна. Так же и при обращении к текстурным координатам, их центр координат находится в верхнем левом углу текстуры. Координаты позиции графических объектов задаются float значением, то есть могут быть дробными. Глубина расположения объекта (координата z) измеряется от 0 до 100, чем больше значение координаты, тем глубже находится объект.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ресурсы графической системы: текстуры и шрифты&lt;/b&gt;
&lt;p&gt;В данный момент в движке представлены такие ресурсы: текстуры и глифы шрифтов. 
&lt;br /&gt;Файл текстуры представлен виртуальным классом TTexture, от которого уже наследуются TGLTexture и TDX8Texture. В то же время TGlyph не зависит от реализации, в нём есть указатель на&amp;nbsp; TTexture, по которому уже и создаётся текстура глифа. &lt;/p&gt;
&lt;p&gt;Текстурами можно оперировать и через указатель на базовый класс, но для более удобного хранения и их использования были созданы два класса &amp;mdash; список текстур и менеджер списков текстур: TTextureList и TTextureListManager. Они позволяют более удобно управлять текстурами, так же при удалении списка или менеджера автоматически будут удалены все подчинённые текстуры. В небольших проектах достаточно и списка текстур, для более крупных проектов удобно использовать менеджер. Например: использовать несколько списков текстур, в одном лежат текстуры интерфейса, в другом текстуры сцены, в третьем частицы, тогда что бы отчистить всё, что связано с сценой, достаточно просто отчистить список сцены или удалить его за ненадобностью.&lt;/p&gt;
&lt;p&gt;Работа же с шрифтами отличается от работы с текстурами. TGlyph &amp;mdash; это представление одного символа с текстурой, сформированной для использования в системе, TFont &amp;mdash; набор глифов, который используется текстовой, TFontFaceList &amp;mdash; исходный шрифт, из которого уже формируются глифы, которые может использовать система. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Графические объекты в K5Engine&lt;/b&gt;
&lt;p&gt;В данный момент представлено три вида графических объектов: спрайт, банк спрайтов, текст. 
&lt;br /&gt;Так же к каждому объекту добавлен список и менеджер списков. 
&lt;br /&gt;Каждый графический объект наследуется от TBaseGraphicObject и имеет такие методы:&lt;/p&gt;
&lt;p&gt;unsigned long GetID(); - получение индивидуального идентификатора объекта&lt;/p&gt;
&lt;p&gt;void&amp;nbsp; &amp;nbsp; SetName(const wstring &amp;amp;Val); - установка имени объекта
&lt;br /&gt;wstring GetName() const; - получение имени объекта &lt;/p&gt;
&lt;p&gt;void SetView(const bool &amp;amp;Val = true); - установка флага отрисовки объекта
&lt;br /&gt;bool GetView() const; - получение флага отрисовки объекта&lt;/p&gt;
&lt;p&gt;void SetDevice(const pTBaseDevice &amp;amp;Val); - установка устройства, пока устройство не будет установлено, объект не будет отрисовываться, так как устройство создаёт его класс-отрисовщик &lt;/p&gt;
&lt;p&gt;pTBaseDevice GetDevice(); - получение устрйства. &lt;/p&gt;
&lt;p&gt;void SetMinFilter(const enTextureFilter &amp;amp;Val); - установка минимального текстурого фильтра
&lt;br /&gt;void SetMagFilter(const enTextureFilter &amp;amp;Val); - установка максимального текстурого фильтра
&lt;br /&gt;void SetFilter(const enTextureFilter &amp;amp;Val); - установка обоих типов фильтров&lt;/p&gt;
&lt;p&gt;enTextureFilter GetMinFilter() const; - получение минимального текстурого фильтра
&lt;br /&gt;enTextureFilter GetMagFilter() const; - получение максимального текстурого фильтра&lt;/p&gt;
&lt;p&gt;void Draw(); - рисование графического объекта&lt;/p&gt;
&lt;p&gt;От базового графического объекта наследуются три потомка: TSprite, TSpriteBank, TBaseText.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Спрайт&lt;/b&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;class&lt;/span&gt; TSprite: &lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt; TBaseGraphicObject
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;protected&lt;/span&gt;:
    pTSpriteViewer   Viewer; 
    pTBaseVertexData VertexPool;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;protected&lt;/span&gt;:
    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; ToSetDevice&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; ToDraw&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt;:
    TPoint3D        Pos;
    TPoint3D        Center;
    TGraphicElementValue    Angle;
    TGraphicElementSquare     Square;

    TGraphicElementColorArray  Color;
    TGraphicElementSpriteTexture   Texture;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt;:
    TSprite&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;virtual&lt;/span&gt; ~TSprite&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;operator&lt;/span&gt;=&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;const&lt;/span&gt; TSprite &amp;amp;Val&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    pTSpriteViewer GetViewer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; SetVertexPool&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;const&lt;/span&gt; pTBaseVertexData &amp;amp;Val&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    pTBaseVertexData GetVertexPool&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
};&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
Viewer – класс-отрисовщик спрайта, как раз он отвечает за отображение спрайта в той или иной системе рендера. 
&lt;br /&gt;VertexPool &amp;mdash; пул вертиксов, отдельная система, позволяющая задавать внешний пул вертексов для группы спрайтов. Нужна, если надо обрабатывать большую группу объектов в сцене. Благодаря ему можно нексколько увеличить скорость рендера. 
&lt;br /&gt;Методы void ToSetDevice() и void ToDraw() - это переопределённые функции базового класса.
&lt;br /&gt;Далее идут публичные члены класса. Структура графического объекта организована так, что работа с его параметрами идёт через специальные компоненты. Благодаря этому можно относительно безболезненно заменять или изменять тот или иной элемент а так же добавлять новые. Так же так как такие элемены стандартизированны, то к ним удобно обращаться на прямую, а не через множество отдельных функций. 
&lt;br /&gt;Так же у спрайта переопределен оператор присваивания для возможности без проблем выполнять присваивание между объектами.
&lt;p&gt;Теперь про элементы спрайта:
&lt;br /&gt;Pos – позиция на сцене. Задаётся тремя координатами x,y и z.
&lt;br /&gt;Center – смещение центра спрайта, так же задаётся тремя координатами.
&lt;br /&gt;Оба эти элемента &amp;mdash; экземпляры класса TPoint3D, имеют методы увеличения, уменьшения, установки значения координаты а так же переопределённый опратор круглых скобок и возможность прямого доступа к внутренним переменным. Списко методов не приводится, так как он занимает много текста. 
&lt;br /&gt;Далее идёт угол наклона спрайта, элемент Angle. Он является экземпляром класса&amp;nbsp; TGraphicElementValue, который имеет такие методы:&lt;/p&gt;
&lt;p&gt;void operator()(const float &amp;amp;Val); - установка значения
&lt;br /&gt;void operator=(const float &amp;amp;Val); - установка значения&lt;/p&gt;
&lt;p&gt;void&amp;nbsp; Set(const float &amp;amp;Val); - установка значения
&lt;br /&gt;void&amp;nbsp; Inc(const float &amp;amp;Val = 1.0f); - увеличение значения
&lt;br /&gt;void&amp;nbsp; Dec(const float &amp;amp;Val = 1.0f); - уменьшение значения&lt;/p&gt;
&lt;p&gt;float Get() const; - получение значения&lt;/p&gt;
&lt;p&gt;Небольшое пояснение: каждый TGraphicElement.. является наследником от TBaseGraphicElement, который представляет собой интерфейс для работы с виевером графического объекта. При изменении параметров, зависящих от типа рендера,&amp;nbsp; TBaseGraphicElement посылает сообщение виеверу, что произошли изменения и нужно обновить данные.&lt;/p&gt;
&lt;p&gt;Далее идёт Square спрайта. Фактически можно было обойтись и без него, использовать два&amp;nbsp; TGraphicElementValue как Width и Height параметры, с другой стороны благодаря расширенному функционалу TGraphicElementSquare имеет больше возможностей. 
&lt;br /&gt;Он имеет методы для установки высоты и ширины спрайта, разнообразных итераций размеров, получения параметров а так же даёт доступ к редактированию параметров каждой из четырёх точек сторон спрайта. &lt;/p&gt;
&lt;p&gt;Color &amp;mdash; цвет спрайта. Представляет собой экземпляр TGraphicElementColorArray созданный с одним элементом. Этот элемент сделан расширяемым и его можно использовать например для полигонов для придания цвета каждой вершине. Элемент имеет разнообразные методы задания параметров цвета и итерации цвета. В движке используется класс TColor с четырьмя компонентами &amp;mdash; red green blue alpha. Компоненты цвета задаются в диапазоне от 0 до 1. &lt;/p&gt;
&lt;p&gt;Texture &amp;mdash; элемент, задающий текстуру спрайта. Спрайт не будет отображаться, если текстура не задана. Текстура является одним из главных элементов спрайта. 
&lt;br /&gt;Есть два способа использования текстуры: использовать часть текстуры (задать Rect),&amp;nbsp; использовать всю текстуру с одним или несколькими повторениями по одной из осей. Так же можно зеркально отображать текстуру. 
&lt;br /&gt;Её поведение задаётся при вызове тех или иных функций. Например для задания области используемой текстуры есть группа методов SetRect. Для задания повтора текстуры использется группа функций SetRepeat, так же можно получить доступ на прямую к текстурным координатам через функции GetPointPtr.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Банк спрайтов&lt;/b&gt;
&lt;p&gt;Банк спрайтов &amp;mdash; специальный графический объект, позволяющий хранить и управлять группой спрайтов. Он полезен в случаях, когда надо обрабатывать группу спрайтов как один объект, например: боевая машина, состоящая их нескольких блоков, эффект взрыва, который выводится при помощи частиц, кнопка интерфейса, состоящая из нескольких частей. 
&lt;br /&gt;У него есть три публичных элемента, аналогичные спрайту:&lt;/p&gt;
&lt;p&gt;TPoint3D&amp;nbsp; &amp;nbsp; &amp;nbsp; Pos; - позиция на сцене группы страйтов
&lt;br /&gt;TPoint3D&amp;nbsp; &amp;nbsp; &amp;nbsp; Center;&amp;nbsp; - смещение центра группы спрайтов
&lt;br /&gt;TGraphicElementValue&amp;nbsp; Angle; - угол наклона&amp;nbsp; группы спрайтов&lt;/p&gt;
&lt;p&gt;В банке спрайтов можно добавлять и удалять спрайты, изменять цвет, можно получить доступ на прямую к каждому из спрайтов или к их списку. Так же есть возможность перенести спрайты из одного банка в другой &amp;mdash; провести их слияние.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Текст&lt;/b&gt;
&lt;p&gt;Класс TText является наследником TBaseText который уже в свою очередь наследуется от TBaseGraphicObject. Такая структура осталась ещё от старых версий движка и пока что не была переделана к принятому построению графических обектов. В будущем планируется приведение текстовых объектов к единому виду, но его текущая структура уже отработана и используется на протяжении большого промежутка времени.
&lt;br /&gt;По сути текст в движке &amp;mdash; это набор спрайтов с натянутыми на них текстурами букв и выставленных по определённым правилам. В TText &amp;mdash; каждая строка это отдельный банк спрайтов, строки собраны в список банков спрайтов. Большая часть методов управления параметрами текста в&amp;nbsp; TText досталась от&amp;nbsp; TBaseText. Сам TText имеет такие методы:&lt;/p&gt;
&lt;p&gt;float GetWidth()&amp;nbsp; const; - получение ширины области, ограничивающей текст
&lt;br /&gt;float GetHeight() const; - получение высоты области, ограничивающей текст
&lt;br /&gt;void SetLineSpacing(const float &amp;amp;Val);&amp;nbsp; - установка отступа между строками, по умолчанию равен 1,2 от высоты шрифта.
&lt;br /&gt;float GetLineSpacing() const; - получение отступа между строками
&lt;br /&gt;void SetAlignment(const enTextAlignment &amp;amp;Value); - установка выравнивания, принимает такие значени: EN_TA_Left, EN_TA_Center, EN_TA_Right. По умолчанию &amp;mdash; EN_TA_Center.
&lt;br /&gt;enTextAlignment GetAlignment(); - получение выравнивания.
&lt;br /&gt;pTSpriteBankList GetLinesPtr(); - получение указателя на список банков спрайтов, в котором находятся строки и символы. 
&lt;br /&gt;void SetVertexPool(const pTBaseVertexData &amp;amp;Val); - установка пула вершин
&lt;br /&gt;pTBaseVertexData GetVertexPool(); - получение пула вершин&lt;/p&gt;
&lt;p&gt;От&amp;nbsp; TBaseText к&amp;nbsp; TText достались функции установки текста, шрифта, цвета текста, очистка текста. Так же можно без преобразований задавать текст как целое число или число с плаваюзщей точкой. &lt;/p&gt;
&lt;p&gt;В данный момент система текста использует создание глифов из системных шрифтов, используя библиотеку FreeType, однако можно легко добавить создание шрифта из текстурной карты. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Списки графических объектов и менеджеры списков&lt;/b&gt;
&lt;p&gt;Списки нужны для более удобного управления графическими объектами, они автоматически устанавливают устройство объектам, очередь рендера и пул вертексов, так же позволяют скрывать сразу группу объектов, удалять, сортировать в порядке расположения на сцене. Так же список объектов выполняет роль менеджера ресурсов. Списки представляют из себя шаблонный класс, который уже доопределяется для каждого типа графических&amp;nbsp; объектов.
&lt;br /&gt;В данный момент представлены такие списки: TSpriteList, TSpriteBankList, TTextList.
&lt;br /&gt;У каждого списка есть имя, которое используется, если его надо идентифицировать в менеджере. При удалении списка он автоматически удалит все объекты, находящиеся в нём.
&lt;br /&gt;Менеджеры списков предназначены для управления самими спискампи объектов. По своей структуре они аналогичны спискам, но с поправкой на нужный функционал.
&lt;br /&gt;Одна из особенностей &amp;mdash; набор методов, позволяющий добавлять как список, так и графический объект в указанный список. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Очередь рендера&lt;/b&gt;
&lt;p&gt;TRenderQueue - очередь рендера, нужна для корректного расположения графических объектов на сцене и правильного выполнения смешивания их альфа-каналов текстур а так же для удобной отрисоки сцены.
&lt;br /&gt;Очередь рендера автоматически работает со списками и менеджерами графических объектов, достаточно передать им указатель на TRenderQueue. Далее при добавлении или удалении графического объекта автоматически будет выполняться обновление ячеек очереди рендера. Однако после добавления графического объекта или изменения его глубины расположения, если он устанавливается куда нибудь в центр сцены, стоит выполнить сортировку очереди отрисовки. 
&lt;br /&gt;TRenderQueue имеет простой инерфейс:&lt;/p&gt;
&lt;p&gt;void Add(const pTBaseRenderQueueCell &amp;amp;Cell); - добавления ячейки рендера&lt;/p&gt;
&lt;p&gt;void Del(const unsigned long &amp;amp;Id); - удаление ячейки рендера по идентификатору объекта
&lt;br /&gt;void Del(const pTBaseGraphicObject &amp;amp;Object); - удаление ячейки рендера по указателю на объект&lt;/p&gt;
&lt;p&gt;void SetCellDraw(const unsigned long &amp;amp;Id,const bool &amp;amp;DrawFlag); - изменения флага отрисовки ячейки
&lt;br /&gt;bool GetCellView(const unsigned long &amp;amp;Id); - получение флага отрисовки объекта&lt;/p&gt;
&lt;p&gt;void Draw(); - отрисовка очереди
&lt;br /&gt;void Clear(); - отчистка очереди
&lt;br /&gt;void Sort(); - сортировка очереди&lt;/p&gt;
&lt;p&gt;Так же помещать и удалять объкты из очереди рендера можно вручную. Для этого нужно использовать классы-ячейки графических объектов: TSpriteRenderQueueCell, TSpriteBankRenderQueueCell и TTextRenderQueueCell. Все они наследники от виртуального класса TBaseRenderQueueCell. 
&lt;br /&gt;Однако ручное добавление или удалениче ячеек если и может понадобиться, то крайне редко.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Пул вершин&lt;/b&gt;
&lt;p&gt;TVertexDataPool &amp;mdash; самая новая система движка, предназначеная для некоторой оптимизиции системы рендера за счёт сведения зависящих от платформы данных графических объектов в один массив вершин. При использовании большого числа спрайтов в одной сцене она позволяет достаточно ощутимо повысить количество кадров. Списки и менеджеры списков работают с пулом вершин автоматически, достаточно передать им указатель на него.
&lt;br /&gt;Сама работа с TVertexDataPool происходит по алгоритму: передал устройство, создал пул на определённое количество спрайтов, можно передавать указатель на него целевым системам и объектам. В данный момент пул имеет ограниченый размер и не может расширяться динамически. В будущем планируется добавить возможность его автоматического расширения при достижении лимита по размеру. &lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;На данный момент всё.
&lt;br /&gt;Примеры к статье представлены группой уроков с второго по седьмой:
&lt;br /&gt;&lt;a href=&quot;http://narod.ru/disk/23268052000/Tutorials.zip.html&quot;&gt;Tutorials&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/k5engine/blog/?id=5092</guid>
  <pubDate>Tue, 20 Jul 2010 14:18:56 GMT</pubDate>
  <title>Обновление движка и новая статья</title>
  <link>http://www.gamedev.ru/community/k5engine/blog/?id=5092</link>
  <comments>http://www.gamedev.ru/community/k5engine/forum/?id=136217</comments>
  <description>
&lt;p&gt;Готова новая статья: &amp;quot;Графическая система движка&amp;quot;
&lt;br /&gt;Так же к ней прилагается пачка уроков по одному на каждый раздел, описанный в статье.&lt;/p&gt;
&lt;p&gt;Так же обновился движок:
&lt;br /&gt;1. В процессе написания статьи некоторый старый код был приведён к &amp;quot;современной&amp;quot; структуре.
&lt;br /&gt;2. Добавлены типы указателей для некоторых классов.
&lt;br /&gt;3. В списки графических объектов добавлены методы:
&lt;br /&gt;&amp;nbsp; &amp;nbsp; - получение объекта по его индивидуальному идентификатору:
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TObject* Get(const unsigned long &amp;amp;ObjId) 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; - группа методов для извлечение объекта из списка:
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TObject* Extract(const int &amp;amp;Id) - по позиции в списке
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TObject* Extract(const unsigned long &amp;amp;ObjId) - по индивидуальному идентификатору
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TObject* Extract(const wstring &amp;amp;ObjName) - по имени
&lt;br /&gt;Так же подобные методы добавлены в TSpriteBank
&lt;br /&gt;4. В менеджер списков графических объектов добавлены методы для получения графического объекта по его идентификатору:
&lt;br /&gt;&amp;nbsp; &amp;nbsp; TObject* Get(const int &amp;amp;List, const unsigned long &amp;amp;Id)
&lt;br /&gt;&amp;nbsp; &amp;nbsp; TObject* Get(const wstring &amp;amp;List, const unsigned long &amp;amp;Id)&lt;/p&gt;
&lt;p&gt;Планы на ближайшее будущее:
&lt;br /&gt;1. Статья, описывающая систему событий движка.
&lt;br /&gt;2. Создание roadmap&lt;/p&gt;
&lt;p&gt;Критика, конструктивные предложения и идеи приветствуются :)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/gde/articles/?id=5088</guid>
  <pubDate>Mon, 19 Jul 2010 05:42:48 GMT</pubDate>
  <title>S.T.A.L.K.E.R. Level. Часть 04. Статические объекты уровня.</title>
  <link>http://www.gamedev.ru/community/gde/articles/?id=5088</link>
  <description>
&lt;p&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/pripyat_4.jpg&quot; alt=&quot;Припять. Одна из карт Зова Припяти. Собственный рендер. | S.T.A.L.K.E.R. Level. Часть 04. Статические объекты уровня.&quot; /&gt;
&lt;p&gt;В этой главе мы рассмотрим загрузку статических объектов уровня в огр и в конце получим все как на картинке.
&lt;p&gt;Блок 3 файла &amp;quot;level&amp;quot; имет немного более сложную структуру, чем те блоки, которые мы рассмотрели. Его структура примерно следующая:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;Некоторое число объектов разного размера, повторяющихся до конца блока
{
  Номер объекта
  Размер блоков общий (см. далее)
  Некоторое число блоков разного размера, повторяющихся до конца объекта
  {
    Тип блока
    Размер блока (см. далее)
    Блок (один)
    {
      Содержимое блока
    }
  }
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Нам нужны блоки с типами 1 и 21. Потому, что в блоке 1 описываются номера материалов и всякие ббоксы, а в 21 описываются используемые вершинные, индексные буферы, оффсеты в них и прочее.&lt;/p&gt;
&lt;p&gt;А теперь вначале некоторые объявления, а потом код:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #808080&quot;&gt;// Преобразовывает тип элемента вершинной декларации из D3D9 в Ogre&lt;/span&gt;
VertexElementType GetVertexElementType&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DDECLTYPE vType&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;vType&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_D3DCOLOR: &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_COLOUR; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_FLOAT1  : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_FLOAT1; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_FLOAT2  : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_FLOAT2; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_FLOAT3  : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_FLOAT3; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_FLOAT4  : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_FLOAT4; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_SHORT2  : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_SHORT2; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_SHORT4  : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_SHORT4; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLTYPE_UBYTE4  : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_UBYTE4; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  }
  &lt;span style=&quot;color: #808080&quot;&gt;// to keep compiler happy&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VET_FLOAT3;
}

&lt;span style=&quot;color: #808080&quot;&gt;// Преобразовывает &amp;quot;использование&amp;quot; (как там usage по русски ?)&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;// элемента вершинной декларации из D3D9 в Ogre&lt;/span&gt;
VertexElementSemantic GetVertexElementSemantic&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DDECLUSAGE sem&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;sem&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_BLENDINDICES: &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_BLEND_INDICES      ; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_BLENDWEIGHT : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_BLEND_WEIGHTS      ; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_COLOR       : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_DIFFUSE            ; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_NORMAL      : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_NORMAL             ; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_POSITION    : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_POSITION           ; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_TEXCOORD    : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_TEXTURE_COORDINATES; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_BINORMAL    : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_BINORMAL           ; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; D3DDECLUSAGE_TANGENT     : &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_TANGENT            ; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
  }
  &lt;span style=&quot;color: #808080&quot;&gt;// to keep compiler happy&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; VES_POSITION;
}

&lt;span style=&quot;color: #808080&quot;&gt;// Корневая нода, к ней мы будем присоединять все объекты уровня.&lt;/span&gt;
SceneNode    *SR;
&lt;span style=&quot;color: #808080&quot;&gt;// Менежер сцены с помощью которого мы будем создавать новые entity&lt;/span&gt;
SceneManager *SM;

&lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; LevelLoader::LoadLevel&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;String foldername, SceneManager *mgr&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  SM = mgr;
  SR = mgr-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;getRootSceneNode&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;createChildSceneNode&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;Level Root&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  LogManager::getSingleton&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.logMessage&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;Loading geometry...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #808080&quot;&gt;// Помните функцию загрузки буферов из прошлой статьи ? Это она и есть&lt;/span&gt;
  LoadBuffers&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;foldername + String&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;/level.geom&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  LogManager::getSingleton&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.logMessage&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;Loading spatial-DB...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #808080&quot;&gt;// А это новая функция (см. ниже)&lt;/span&gt;
  LoadVisuals&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;foldername + String&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;/level&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;true&lt;/span&gt;;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #808080&quot;&gt;// Visuals (Static Geometry)&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;// level chunk 3&lt;/span&gt;
&lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; LevelLoader::LoadVisuals&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;String filename&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  StreamReader sr;
  u32 sizeChu;

  &lt;span style=&quot;color: #808080&quot;&gt;// Пытаемся открыть файл &amp;quot;level&amp;quot; и перейти к блоку 3&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt; sr.open&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;filename&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;sizeChu = sr.open_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

  &lt;span style=&quot;color: #808080&quot;&gt;// Конец 3 блока на этой позиции в файле&lt;/span&gt;
  u32 maxChunkPos = sr.tell&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; + sizeChu;

  &lt;span style=&quot;color: #808080&quot;&gt;// Повторяем пока не достигли конца 3 блока&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;maxChunkPos &lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt; sr.tell&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    &lt;span style=&quot;color: #808080&quot;&gt;// Для каждого объекта первым идет его номер&lt;/span&gt;
    u32 objNumb = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #808080&quot;&gt;// А затем суммарный размер его блоков со всякими вещами&lt;/span&gt;
    u32 sizeBlo = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #808080&quot;&gt;// Найден ли блок с типом 1 ?&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; type1 = &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #808080&quot;&gt;// Далее содержимое&lt;/span&gt;
    &lt;span style=&quot;color: #808080&quot;&gt;// Материалы&lt;/span&gt;
    u16 CformID;
    u16 materialID;
    &lt;span style=&quot;color: #808080&quot;&gt;// Боундинг бокс&lt;/span&gt;
    Vector3 min, max;
    &lt;span style=&quot;color: #808080&quot;&gt;// А это, возможно, сфера (не смотрел поскольку не нужно было)&lt;/span&gt;
    Vector3 cen;
    f32 rad;

    &lt;span style=&quot;color: #808080&quot;&gt;// Найден ли блок с типом 21 ?&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; type21 = &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;
    &lt;span style=&quot;color: #808080&quot;&gt;// Далее содержимое (думаю, что они означают объяснять не надо)&lt;/span&gt;
    u32 VertexBufferID;
    u32 StartVertex;
    u32 VertexCount;
    u32 IndexBufferID;
    u32 StartIndex;
    u32 IndicesCount;

    &lt;span style=&quot;color: #808080&quot;&gt;// Конец блоков на этой позиции в файле&lt;/span&gt;
    u32 maxBlockPos = sr.tell&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; + sizeBlo;

    &lt;span style=&quot;color: #808080&quot;&gt;// Повторяем пока не достигли конца блоков&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;maxBlockPos &lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt; sr.tell&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    {
      &lt;span style=&quot;color: #808080&quot;&gt;// Для каждого блока вначале идет его тип&lt;/span&gt;
      u32 type = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      &lt;span style=&quot;color: #808080&quot;&gt;// А потом размер&lt;/span&gt;
      u32 size = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

      &lt;span style=&quot;color: #0030fF; &quot;&gt;switch&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;type&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
      {
      &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;: &lt;span style=&quot;color: #808080&quot;&gt;// Информация о материалах и ббоксах&lt;/span&gt;
        {
          &lt;span style=&quot;color: #808080&quot;&gt;// Material&lt;/span&gt;
          CformID    = sr.r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          materialID = sr.r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

          &lt;span style=&quot;color: #808080&quot;&gt;// BBox&lt;/span&gt;
          min.x = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;; min.y = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;; min.z = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          max.x = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;; max.y = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;; max.z = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          &lt;span style=&quot;color: #808080&quot;&gt;// BSphere ???&lt;/span&gt;
          cen.x = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;; cen.y = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;; cen.z = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          rad = sr.r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

          type1 = &lt;span style=&quot;color: #0030fF; &quot;&gt;true&lt;/span&gt;;
        }
        &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
      &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;21&lt;/span&gt;: &lt;span style=&quot;color: #808080&quot;&gt;// Информация об используемых вершинных и индексных буферах&lt;/span&gt;
        {
          VertexBufferID = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          StartVertex    = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          VertexCount    = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          IndexBufferID  = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          StartIndex     = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          IndicesCount   = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

          type21 = &lt;span style=&quot;color: #0030fF; &quot;&gt;true&lt;/span&gt;;
        }
        &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
      &lt;span style=&quot;color: #0030fF; &quot;&gt;default&lt;/span&gt;: &lt;span style=&quot;color: #808080&quot;&gt;// Остальные типы нам не интересны, так что мы их пропускаем&lt;/span&gt;
        sr.skip&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;size&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      }
    }

    &lt;span style=&quot;color: #808080&quot;&gt;// Если текущий объект содержит блоки обоих типов, то можно его добавить на сцену&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;type1 &amp;amp;&amp;amp; type21&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    {
      &lt;span style=&quot;color: #808080&quot;&gt;// Для этого придумываем ему имя&lt;/span&gt;
      String  name = &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;Visual_&amp;quot;&lt;/span&gt; + StringConverter::toString&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;objNumb&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      &lt;span style=&quot;color: #808080&quot;&gt;// Создаем собственный меш (все объекты в один меш кидать не стоит,&lt;/span&gt;
      &lt;span style=&quot;color: #808080&quot;&gt;// т.к. они будут разом рисоваться)&lt;/span&gt;
      MeshPtr mesh = MeshManager::getSingleton&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.createManual&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;name, &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;General&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      &lt;span style=&quot;color: #808080&quot;&gt;// И субмеш (в нем как раз и определяется геометрия)&lt;/span&gt;
      SubMesh *sub = mesh-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;createSubMesh&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;name + &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;_0&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

      &lt;span style=&quot;color: #808080&quot;&gt;// Заполняем структуру вершин&lt;/span&gt;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexData = &lt;span style=&quot;color: #0030fF; &quot;&gt;new&lt;/span&gt; VertexData&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexData-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexBufferBinding-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;setBinding&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;, VB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;VertexBufferID&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexData-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexCount = VertexCount;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexData-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexStart = StartVertex;

      &lt;span style=&quot;color: #808080&quot;&gt;// Соответствующую вершинную декларацию&lt;/span&gt;
      &lt;span style=&quot;color: #0030fF; &quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 i = &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; VD&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;VertexBufferID&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.vDeclLength; i++&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
      {
        D3DVERTEXELEMENT9 el = VD&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;VertexBufferID&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.vDecl&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;;
        sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexData-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;vertexDeclaration-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;addElement&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;el.Stream, el.Offset,
          GetVertexElementType&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DDECLTYPE&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;el.Type&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;,
          GetVertexElementSemantic&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DDECLUSAGE&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;el.Usage&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;, el.UsageIndex&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      }

      &lt;span style=&quot;color: #808080&quot;&gt;// По идее здесь должно быть true, но для меня секрет,&lt;/span&gt;
      &lt;span style=&quot;color: #808080&quot;&gt;// почему если ставить true, то получаем AV при старте ?&lt;/span&gt;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;useSharedVertices = &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

      &lt;span style=&quot;color: #808080&quot;&gt;// И для индексов&lt;/span&gt;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;indexData = &lt;span style=&quot;color: #0030fF; &quot;&gt;new&lt;/span&gt; IndexData&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;indexData-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;indexBuffer = IB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;IndexBufferID&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;indexData-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;indexCount = IndicesCount;
      sub-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;indexData-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;indexStart = StartIndex;

      &lt;span style=&quot;color: #808080&quot;&gt;// Не забываем, что заполнять ббокс обязательно !!!&lt;/span&gt;
      AxisAlignedBox bbox&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;min, max&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      mesh-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;_setBounds&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;bbox, &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

      &lt;span style=&quot;color: #808080&quot;&gt;// Ну и подсоединяем объект к сцене&lt;/span&gt;
      SceneNode *Node = SR-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;createChildSceneNode&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;name&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      Entity *Ent = SM-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;createEntity&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;name&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      Node-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;attachObject&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Ent&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    }
  }

  &lt;span style=&quot;color: #808080&quot;&gt;// Закрываем файл&lt;/span&gt;
  sr.close&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;true&lt;/span&gt;;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Как ни странно, но это все, что нужно чтобы нарисовать уровень без материалов и полетать по нему ...&lt;/p&gt;
&lt;p&gt;Достаточно написать приложеньице на огре на основе ExampleApplication и в нем сделать:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;LevelLoader mLevelLoader;
&lt;span style=&quot;color: #808080&quot;&gt;// ...&lt;/span&gt;
mLevelLoader.LoadLevel&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;gamedata/levels/pripyat&amp;quot;&lt;/span&gt;, mSceneMgr&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Следующую статью я, наверное, напишу про огра. Как его ставить и прочее. А уже потом попробуем добавить материалы к сцене (и это будет 2 блок файла &amp;quot;level&amp;quot;).&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/gde/blog/?id=5087</guid>
  <pubDate>Mon, 19 Jul 2010 04:30:17 GMT</pubDate>
  <title>Небольшое обновление статьи &quot;S.T.A.L.K.E.R. Level. Часть 03. Геометрия уровня.&quot;</title>
  <link>http://www.gamedev.ru/community/gde/blog/?id=5087</link>
  <description>
&lt;p&gt;Спасибо пользователю &lt;b&gt;arabesc&lt;/b&gt; за идею, что
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DVERTEXELEMENT9&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;*&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;MAXD3DDECLLENGTH + &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; == 520&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/fabermun/articles/?id=5085</guid>
  <pubDate>Sun, 18 Jul 2010 08:39:59 GMT</pubDate>
  <title>Мысли вслух 3. ХР он же опыт.</title>
  <link>http://www.gamedev.ru/community/fabermun/articles/?id=5085</link>
  <description>
&lt;p&gt;&lt;font color=&quot;#FF0000&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Мысль третья. Опыт&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Что же такое опыт?
&lt;br /&gt;Опыт это некая числовая величина, в которой учитываются все достижения персонажа. Под достижениями подразумевается выполнение миссий, победы над врагами и монстрами, исследование новых территорий, обнаружение сокровищ, решение загадок и многое другое.
&lt;br /&gt;Каждое такое действие повышает опыт. Значение, на которое будет повыше опыт, зависит от вас, от того насколько геймдизайнер оценил сложность выполненных действий.&lt;/p&gt;
&lt;p&gt;Сейчас мы разберем самую сложную и наиболее частую ситуацию - получение опыта за убийство врага. Почему сложную поймете в процессе разбора, а почему частую и так понятно.
&lt;br /&gt;Противники вашего персонажа могут быть абсолютно разными: больше, меньше, сильнее, слабее, быстрее, поэтому естественно, что все они не должны приносить персонажу одинаковое количество опыта.
&lt;br /&gt;С этой целью, учитывая мощь(здесь имеется ввиду общая оценка существа, его боевой потенциал) существа необходимо построить таблицу опыта.
&lt;br /&gt;Примерно так:&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;http://www.gamedev.ru/files/images/xp.jpg&quot; alt=&quot;таблица опыта | Мысли вслух 3. ХР он же опыт.&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Здесь количество опыта берется на основе предполагаемого потенциала. Только от желания геймдизайнера зависит, будет волк сильнее гоблина или гоблин сильнее волка.
&lt;br /&gt;НО, боевой потенциал игрока не постоянен. Со временем персонаж становится сильнее, естественно предположить, что чем дальше, тем проще ему будет справляться с одними и теми же противниками. Так же естественно, чтобы такие легкие победы приносили ему меньше опыта.
&lt;br /&gt;Необходимо как то учесть соотношение между мощью персонажа и его противника. Нужно использовать еще один показатель. Для этих целей опять может подойти уровень. Если уровень игрока и уровень убитого им существа одинаковый, то игрок получает полное количество опыта. Если уровни отличаются, то вычисление идет по такой формуле:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Количество полученного опыта = БО*( уровень существа/уровень персонажа)&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Здесь:
&lt;br /&gt;&lt;b&gt;БО&lt;/b&gt; – Базовый опыт, то есть количество опыта согласно таблицы&lt;/p&gt;
&lt;p&gt;Привожу пример, как эта формула работает
&lt;br /&gt;Допустим, персонаж 5 уровня сражается с волком 10 уровня.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Количество полученного опыта = 30 * (10/5) = 60&lt;/b&gt;
&lt;p&gt;Как мы видим, в случае победы игрок получит двойное количество опыта.&lt;/p&gt;
&lt;p&gt;Теперь обратная ситуация. Персонаж 30 уровня сражается с волком 10 уровня.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Количество полученного опыта = 30 * (10/30) = 10&lt;/b&gt;
&lt;p&gt;Соответственно, чем большее преимущество имеет персонаж, тем меньше опыта он получит.&lt;/p&gt;
&lt;p&gt;С этим все ясно. Теперь переходим к ситуации посложнее. Допустим, что противников несколько. Понятно, что брать предыдущую формулу не имеет смысла. Ведь справится одновременно с двумя явно сложнее, причем с каждым новым противником сложность увеличивается на порядок.
&lt;br /&gt;Здесь можно пойти несколькими путями.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;font color=&quot;#0000FF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;ПЕРВЫЙ&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;br /&gt;Первый, увеличивать количество опыта согласно количеству врагов. То если в приведенном выше примере напало два волка, то подсчет ведем так:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;КПО= (БО*( уровень существа/уровень персонажа))* количество врагов&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;br /&gt;Здесь &lt;b&gt;КПО&lt;/b&gt; - Количество полученного опыта.
&lt;p&gt;&lt;b&gt;Количество полученного опыта = (30 * (10/30))*2 = 20&lt;/b&gt;
&lt;p&gt;То есть за каждого волка будет получено 20 опыта.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;font color=&quot;#0000FF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;ВТОРОЙ&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;br /&gt;Второй способ, и он мне нравится больше. Вообще не считать количество врагов, а учитывать интервал времени между их убийством.
&lt;br /&gt;Допустим, в качестве интервала мы выбрали 10 секунд. Если после первого убийства, до истечения 10 секунд происходит второе убийство, то за второе убитое существо дается двойное количество опыта. Далее если после второго убийства опять до истечения 10 секунд происходит третье, то количество опыта утраивается и так далее.&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Весь КПО = Количество полученного опыта * номер врага&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Здесь &lt;b&gt;номер врага&lt;/b&gt; – порядковый номер врага, убитого до истечения интервала.&lt;/p&gt;
&lt;p&gt;Пример:
&lt;br /&gt;&lt;i&gt;Персонаж 20 уровня убивает 3 врагов. Все три убийства укладываются в заданный интервал
&lt;br /&gt;1.&amp;nbsp; Орк 13 уровня.
&lt;br /&gt;2.&amp;nbsp; Орк 17 уровня.
&lt;br /&gt;3.&amp;nbsp; Шаман орков 10 уровня.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Считаем, сколько опыта отгребем:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.&amp;nbsp; Орк 13 уровня = (100 * (13/20))*1 = 65 опыта&lt;/b&gt;
&lt;p&gt;Здесь *1 – это и есть порядковый номер врага.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.&amp;nbsp; Орк 17 уровня = (100 * (17/20))*2 = 170 опыта
&lt;p&gt;3.&amp;nbsp; Шаман орков 10 уровня = (250 * (10/20))*3 = 375 опыта&lt;/p&gt;&lt;/b&gt;
&lt;p&gt;Как видим, здесь, хоть шаман и был хилым, опыта он принес намного больше.&lt;/p&gt;
&lt;p&gt;Формулу можно еще улучшить, учтя насколько быстро, в отведенный интервал, произошло следующее убийство.
&lt;br /&gt;Например, так:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Весь КПО = КПО * (1+(номер врага + интервал времени – прошедшее время)/ интервал времени)&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Пример:
&lt;br /&gt;&lt;i&gt;Предыдущая ситуация. Добавим, что второй орк был убит спустя 5 секунд после первого, а шаман - спустя 8 после второго орка.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.&amp;nbsp; Орк 13 уровня = (100 * (13/20)) = 65 опыта
&lt;p&gt;2.&amp;nbsp; Орк 17 уровня = (100 * (17/20))*(1+(2+10-5)/10) = 144 опыта&lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; Шаман орков 10 уровня = (250 * (10/20))*(1+(3+10-8)/10) = 187 опыта&lt;/p&gt;&lt;/b&gt;
&lt;p&gt;Как видим, чем быстрее убит следующий противник, тем больше опыта нам дадут.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#0000FF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;ТРЕТИЙ&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Предыдущий вариант имеет один маленький недостаток.&lt;/p&gt;
&lt;p&gt;Пример:
&lt;br /&gt;&lt;i&gt;Предыдущая ситуация. Добавим, что вместе с&amp;nbsp; шаманом мы массовым заклинанием&amp;nbsp; завалили еще и прятавшихся в кустах 5 волков 10 уровня .&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;b&gt;1.&amp;nbsp; Орк 13 уровня = (100 * (13/20)) = 65 опыта
&lt;p&gt;2.&amp;nbsp; Орк 17 уровня = (100 * (17/20))*(1+(2+10-5)/10) = 144 опыта&lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; Шаман орков 10 уровня = (250 * (10/20))*(1+(3+10-8)/10) = 187 опыта&lt;/p&gt;
&lt;p&gt;4.&amp;nbsp; Волк 10 уровня = (30*(10/20))*(1+(4+10-0)/10) = 36&lt;/p&gt;
&lt;p&gt;5.&amp;nbsp; Волк 10 уровня = (30*(10/20))*( 1+(5+10-0)/10) = 37&lt;/p&gt;
&lt;p&gt;6.&amp;nbsp; Волк 10 уровня = (30*(10/20))*( 1+(6+10-0)/10) = 39&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp; Волк 10 уровня = (30*(10/20))*( 1+(7+10-0)/10) = 40&lt;/p&gt;
&lt;p&gt;8.&amp;nbsp; Волк 10 уровня = (30*(10/20))*( 1+(8+10-0)/10) = 42&lt;/p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;То есть за попутно затоптанную мелкотню мы получили неприлично большое количество опыта. Как с этим бороться. Необходимо вводить такой показатель, как Боевая сила группы. Он поможет нам выдавать опыт пропорционально силе конкретного существа.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;Сначала вычисляем Боевую силу каждого существа. В принципе его сила уже учтена в количестве получаемого за убийство существа опыта, поэтому делаем это перемножая базовый опыт с таблицы на уровень. &lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Боевая сила существа = Базовый опыт * уровень&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;&lt;b&gt;1.&amp;nbsp; Орк 13 уровня = (100 * 13) = 1300
&lt;p&gt;2.&amp;nbsp; Орк 17 уровня = (100 * 17) = 1700 &lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; Шаман орков 10 уровня = (250 * 10) = 2500&lt;/p&gt;
&lt;p&gt;4.&amp;nbsp; Волк 10 уровня = (30*10) = 300&lt;/p&gt;
&lt;p&gt;5.&amp;nbsp; Волк 10 уровня = (30*10) = 300&lt;/p&gt;
&lt;p&gt;6.&amp;nbsp; Волк 10 уровня = (30*10) = 300&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp; Волк 10 уровня = (30*10) = 300&lt;/p&gt;
&lt;p&gt;8.&amp;nbsp; Волк 10 уровня = (30*10) = 300 &lt;/p&gt;&lt;/b&gt;
&lt;p&gt;Теперь, суммируя эти значения, получаем Боевую силу всей группы&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Боевая сила группы = 1300+1700+2500+300*5 = 7000&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;Теперь количество полученного опыта для каждого существа вычисляем по формуле, учитывающей силу существа пропорщионально силе всей группы.&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;КПО = БСС/ уровень персонажа * БСГ / БСС_МАКС/&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Здесь:
&lt;br /&gt;БСС – боевая сила существа
&lt;br /&gt;БСГ – боевая сила группы
&lt;br /&gt;БСС_МАКС – боевая сила самого сильного существа в группе, поскольку во многом сила группы зависит от самого сильного.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;b&gt;1.&amp;nbsp; Орк 13 уровня = (1300/20) * (7000/2500)&amp;nbsp; = 182 опыта
&lt;p&gt;2.&amp;nbsp; Орк 17 уровня = (1700/20) * (7000/2500) = 238 опыта&lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; Шаман орков 10 уровня = (2500/20) * (7000/2500) = 350 опыта&lt;/p&gt;
&lt;p&gt;4.&amp;nbsp; Волк 10 уровня = (300/20) * (7000/2500) = 42&lt;/p&gt;
&lt;p&gt;5.&amp;nbsp; Волк 10 уровня = (300/20) * (7000/2500) = 42&lt;/p&gt;
&lt;p&gt;6.&amp;nbsp; Волк 10 уровня = (300/20) * (7000/2500) = 42&lt;/p&gt;
&lt;p&gt;7.&amp;nbsp; Волк 10 уровня = (300/20) * (7000/2500) = 42&lt;/p&gt;
&lt;p&gt;8.&amp;nbsp; Волк 10 уровня = (300/20) * (7000/2500) = 42&lt;/p&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Правда эта формула не учитывает интервал и последовательность убиения, но думаю, что добавить не трудно.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;font color=&quot;#0000FF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;КУЧЕЙ НА КУЧУ&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Ну, с этим тоже вроде разобрались. Теперь рассмотрим обратную ситуацию. Допустим, вы с напарником атакуете одного врага. В этом случае получить полное количество опыта будет нечестно.
&lt;br /&gt;Как поступить? Да все просто - поделить количество опыта пропорционально нанесенному урону:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Количество опыта = БО * (количество нанесенного урона/жизнь существа)&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;То есть пример:
&lt;br /&gt;&lt;b&gt;Противник&lt;/b&gt; – &lt;i&gt;Шаман орков – 10 уровень – 300 жизни&lt;/i&gt;
&lt;br /&gt;&lt;b&gt;Персонаж&lt;/b&gt; - &lt;i&gt;10 уровня нанес 200 урона&lt;/i&gt;
&lt;br /&gt;&lt;b&gt;Напарник&lt;/b&gt; - &lt;i&gt;15 уровня – 100 урона&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Считаем для персонажа:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Количество опыта = 250 *(200/300) = 166 опыта&lt;/b&gt;
&lt;p&gt;И используем полученное количество опыта в следующей формуле:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Количество полученного опыта = (166 * (10/10) = 166&lt;/b&gt;
&lt;p&gt;Считаем для напарника:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Количество опыта = 250 *(100/300) = 83 опыта
&lt;br /&gt;Количество полученного опыта = (83 * (10/15) = 55&lt;/b&gt;
&lt;p&gt;Кроме всего этого также не лишним будет учесть ваше численное превосходство:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#00FFFF&quot;&gt;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Количество опыта = (БО * (количество нанесенного урона/жизнь существа))/1+количество напарников – количество врагов.&lt;/b&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Эта формула подойдет для ситуации толпа на толпу. 
&lt;br /&gt;В общем, на основе изложенного здесь можно придумать еще много чего.&lt;/p&gt;
&lt;p&gt;Надеюсь мои мысли будут кому-то полезны. Я не претендую на абсолютную непогрешимость и полную правоту. Это всего лишь мои мысли, и как и любые другие, они могут быть ошибочны. Моя цель, всего лишь подтолкнуть вас в верном направлении.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/gde/articles/?id=5079</guid>
  <pubDate>Fri, 16 Jul 2010 10:26:19 GMT</pubDate>
  <title>S.T.A.L.K.E.R. Level. Часть 03. Геометрия уровня.</title>
  <link>http://www.gamedev.ru/community/gde/articles/?id=5079</link>
  <comments>http://www.gamedev.ru/community/gde/forum/?id=135798</comments>
  <description>
&lt;p&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/pripyat_3.jpg&quot; alt=&quot;Припять. Одна из карт Зова Припяти. Собственный рендер. | S.T.A.L.K.E.R. Level. Часть 03. Геометрия уровня.&quot; /&gt;
&lt;p&gt;В этой главе мы рассмотрим загрузку вершинных и индексных буферов из файла &amp;quot;level.geom&amp;quot; в огр.
&lt;p&gt;В прошлой статье мы рассмотрели как можно читать файлы &amp;quot;level&amp;quot; и &amp;quot;level.geom&amp;quot; с помощью небольшого класса.&lt;/p&gt;
&lt;p&gt;А теперь основательно займемся файлом &amp;quot;level.geom&amp;quot;. Внутри него нам интересны блоки 9 и 10, которые представляют, соответственно, вершины и индексы геометрии уровня.&lt;/p&gt;
&lt;p&gt;Я обещал много кода ? Вот он, но вначале некоторые объявления:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;struct&lt;/span&gt; IntVertexDeclaration
{
  u32 vDeclLength; &lt;span style=&quot;color: #808080&quot;&gt;// Количество элементов в vDecl минус 1&lt;/span&gt;
  std::vector&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;D3DVERTEXELEMENT9&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt; vDecl;
};

&lt;span style=&quot;color: #808080&quot;&gt;// Вершинные декларации, их столько же, сколько вершинных буферов&lt;/span&gt;
std::vector&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;IntVertexDeclaration&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;          VD;
&lt;span style=&quot;color: #808080&quot;&gt;// Ссылки на вершинные буфера огра&lt;/span&gt;
std::vector&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;HardwareVertexBufferSharedPtr&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt; VB;
&lt;span style=&quot;color: #808080&quot;&gt;// Ссылки на индексные буфера огра&lt;/span&gt;
std::vector&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;HardwareIndexBufferSharedPtr&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;  IB;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Почему там минус 1 ? Смотри дальше.&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #808080&quot;&gt;// Vertex and index buffers&lt;/span&gt;
&lt;span style=&quot;color: #808080&quot;&gt;// level.geom chunks 9 and 10&lt;/span&gt;
&lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; LevelLoader::LoadBuffers&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;String filename&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  StreamReader sr;

  &lt;span style=&quot;color: #808080&quot;&gt;// Пытаемся открыть файл &amp;quot;level.geom&amp;quot;&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!sr.open&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;filename&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

  &lt;span style=&quot;color: #808080&quot;&gt;//&lt;/span&gt;
  &lt;span style=&quot;color: #808080&quot;&gt;// Загрузка вершинных буферов&lt;/span&gt;
  &lt;span style=&quot;color: #808080&quot;&gt;//&lt;/span&gt;

  &lt;span style=&quot;color: #808080&quot;&gt;// На самом деле это и открытие блока 9 и проверка на то, что это файл &amp;quot;level.geom&amp;quot;&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!sr.open_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;9&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

  u32 vbCount;

  &lt;span style=&quot;color: #808080&quot;&gt;// В блоке номер 9 первые 4 байта - количество вершинных буферов&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt; vbCount = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

  &lt;span style=&quot;color: #808080&quot;&gt;// Выделяем нужное количество вершинных буферов и вершинных деклараций&lt;/span&gt;
  VB.resize&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;vbCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  VD.resize&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;vbCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #808080&quot;&gt;// Максимальный размер вершинной декларации + 1 (это для D3DDECL_END())&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;const&lt;/span&gt; u32 vDeclMaxSize = &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DVERTEXELEMENT9&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; * &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;MAXD3DDECLLENGTH + &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #808080&quot;&gt;// Выделяем буфер под вершинную декларацию&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; *buf = malloc&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;vDeclMaxSize&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 i = &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; vbCount; ++i&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    &lt;span style=&quot;color: #808080&quot;&gt;// Читаем в буфер максимально возможный размер вершинной декларации. Зачем ?&lt;/span&gt;
    &lt;span style=&quot;color: #808080&quot;&gt;// Потому, что мы не знаем ее размер.&lt;/span&gt;
    sr.r&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;buf, vDeclMaxSize&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    sr.advance&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;vDeclMaxSize&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #808080&quot;&gt;// Для определения размера вершинной декларации используем функцию из d3dx9&lt;/span&gt;
    VD&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.vDeclLength = D3DXGetDeclLength&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DVERTEXELEMENT9 *&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;buf&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #808080&quot;&gt;// Выделяем нужное количество элеменов&lt;/span&gt;
    VD&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.vDecl.resize&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;VD&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.vDeclLength + &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #808080&quot;&gt;// Ну и заполняем их, они нам понадобятся позже&lt;/span&gt;
    sr.r&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&amp;amp;VD&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.vDecl&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DVERTEXELEMENT9&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; * &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;VD&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.vDeclLength + &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #808080&quot;&gt;// Для определения размера вершины также используем функцию из d3dx9&lt;/span&gt;
    u32 vSize = D3DXGetDeclVertexSize&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;D3DVERTEXELEMENT9 *&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;buf, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #808080&quot;&gt;// После вершинных деклараций идет количество вершин в буфере&lt;/span&gt;
    u32 vCount = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    LogManager::getSingleton&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.logMessage&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;* [Loading VB] &amp;quot;&lt;/span&gt;
        + StringConverter::toString&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;vCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; + &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot; verts, &amp;quot;&lt;/span&gt;
        + StringConverter::toString&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;vCount * vSize&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; + &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot; Kb&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #808080&quot;&gt;// Создаем вершинный буфер в огре&lt;/span&gt;
    VB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt; = HardwareBufferManager::getSingleton&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.createVertexBuffer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;
                vSize, vCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #808080&quot;&gt;// Ну и заполняем его&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; *pVertexes = VB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;lock&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;HardwareBuffer::HBL_NORMAL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    sr.r&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;pVertexes, vSize * vCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    VB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;unlock&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }
  
  free&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;buf&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #808080&quot;&gt;//&lt;/span&gt;
  &lt;span style=&quot;color: #808080&quot;&gt;// Загрузка индексных буферов&lt;/span&gt;
  &lt;span style=&quot;color: #808080&quot;&gt;//&lt;/span&gt;

  &lt;span style=&quot;color: #808080&quot;&gt;// На самом деле это и открытие блока 10 и проверка на то, что это файл &amp;quot;level.geom&amp;quot;&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!sr.open_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

  u32 ibCount;

  &lt;span style=&quot;color: #808080&quot;&gt;// В блоке номер 10 первые 4 байта - количество индексных буферов&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt; ibCount = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

  &lt;span style=&quot;color: #808080&quot;&gt;// Выделяем нужное количество индексных буферов&lt;/span&gt;
  IB.resize&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;ibCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 i = &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; ibCount; ++i&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    &lt;span style=&quot;color: #808080&quot;&gt;// Читаем количество индексов в буфере&lt;/span&gt;
    u32 iCount = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    LogManager::getSingleton&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.logMessage&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;* [Loading IB] &amp;quot;&lt;/span&gt;
        + StringConverter::toString&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;iCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; + &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot; indices, &amp;quot;&lt;/span&gt;
        + StringConverter::toString&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;2&lt;/span&gt; * iCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; + &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot; Kb&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #808080&quot;&gt;// Создаем индексный буфер в огре&lt;/span&gt;
    IB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt; = HardwareBufferManager::getSingleton&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.createIndexBuffer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;
                HardwareIndexBuffer::IT_16BIT, iCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #808080&quot;&gt;// Ну и заполняем его&lt;/span&gt;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; *pIndexes = IB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;lock&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;HardwareBuffer::HBL_NORMAL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    sr.r&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;pIndexes, &lt;span style=&quot;color: #F04000; &quot;&gt;2&lt;/span&gt; * iCount&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    IB&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;unlock&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }

  sr.close&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;true&lt;/span&gt;;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Ну а теперь кое-что разберем.&lt;/p&gt;
&lt;p&gt;Вершинные декларации представляют собой просто массив из D3DVERTEXELEMENT9, и кончаются на D3DDECL_END().&lt;/p&gt;
&lt;p&gt;Почему VD&lt;i&gt;.vDecl.resize(VD&lt;/i&gt;&lt;i&gt;.vDeclLength + 1); ? Почему именно &amp;quot;+ 1&amp;quot; ? Потому, что D3DXGetDeclLength возвращает размер без завершающей D3DDECL_END(), а в блоке записано с ней.
&lt;p&gt;Вот собственно и все ... Даже как-то странно. Я, когда начинал эти блоки изучать, думал что там будет что-то очень сложное и навороченное, а оказалось ... Но теперь у нас есть загруженные в огр, и готовые к использованию вершинные, индексные буферы, а также вершинные декларации для соответствующих вершинных буферов.&lt;/p&gt;
&lt;p&gt;ОНДНАКО ! То, что у нас есть вершины и индексы, не значит, что мы просто их можем нарисовать. Для этого надо кое-что еще, а это следующая статья.&lt;/p&gt;
&lt;p&gt;В следующей статье мы попробуем загрузить 3 блок из файла &amp;quot;level&amp;quot; и, собственно, нарисовать уровень !!!&lt;/p&gt;&lt;/i&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/jetx/articles/jul2010update</guid>
  <pubDate>Thu, 15 Jul 2010 23:08:50 GMT</pubDate>
  <title>Июльское обновление</title>
  <link>http://www.gamedev.ru/community/jetx/articles/jul2010update</link>
  <category>PhysX and etc</category>
  <description>
&lt;p&gt;Содержание обновления
&lt;p&gt;Обновление затронет функционал,но не стабильность(на стадии альфы)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  В&amp;nbsp; данный момент сделано: &lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  1) Интеграция PhysX 2.8.3.21&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  2) Повышение версии пакетов&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  3) Восстановлен Script analyzer&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  4) Рабочий PHAT&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  5) Обновление DXSDK до август2007&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  в планах&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  1) Начало адаптации&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  а) Плагина для Maya&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  б) Анпакера пакетов&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  2) Обновление DXSDK до Июль 2010-ошибка в шейдерах&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  3) Интеграция модуля Substance Air от UE3 2009&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/gde/articles/?id=5074</guid>
  <pubDate>Thu, 15 Jul 2010 13:35:43 GMT</pubDate>
  <title>S.T.A.L.K.E.R. Level. Часть 02. Кое-что о форматах файлов.</title>
  <link>http://www.gamedev.ru/community/gde/articles/?id=5074</link>
  <comments>http://www.gamedev.ru/community/gde/forum/?id=135779</comments>
  <description>
&lt;p&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/pripyat_2.jpg&quot; alt=&quot;Припять. Одна из карт Зова Припяти. Собственный рендер. | S.T.A.L.K.E.R. Level. Часть 02. Кое-что о форматах файлов.&quot; /&gt;
&lt;p&gt;В этой главе мы рассмотрим кое-что о форматах файлов &amp;quot;level&amp;quot; и &amp;quot;level.geom&amp;quot;.
&lt;p&gt;Собственно, основными файлами, с которыми мы будем работать, будут &amp;quot;level&amp;quot; и &amp;quot;level.geom&amp;quot;. Во втором хранится сама геометрия и еще кое-что, а в первом, так сказать, ссылки на геометрию из второго файла, источники освещения, описание материалов и еще дофига всего.&lt;/p&gt;
&lt;p&gt;Эти, а также еще многие другие файлы Сталкера содержат в себе данные в виде блоков &amp;quot;тип-флаг-размер-данные&amp;quot;. И эти блоки повторяются до конца файла.&lt;/p&gt;
&lt;p&gt;Проиллюстрировать это можно простым примером:&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;fstream&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #0030fF; &quot;&gt;#include&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;iostream&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span style=&quot;color: #0030fF; &quot;&gt;using&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;namespace&lt;/span&gt; std;

&lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt; main&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt; argc, &lt;span style=&quot;color: #0030fF; &quot;&gt;char&lt;/span&gt; **argv&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  ifstream f;

  f.open&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;gamedata/levels/mp_pool/level&amp;quot;&lt;/span&gt;, ios::binary&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;f.good&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    &lt;span style=&quot;color: #0030fF; &quot;&gt;short&lt;/span&gt; type; f.read&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;char&lt;/span&gt; *&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&amp;amp;type, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;type&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;short&lt;/span&gt; flag; f.read&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;char&lt;/span&gt; *&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&amp;amp;flag, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;flag&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt;   size; f.read&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;char&lt;/span&gt; *&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&amp;amp;size, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;size&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!f.good&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;

    cout &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;type = &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; type &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot; flag = &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; flag &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot; size = &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; size &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; endl;

    f.seekg&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;size, ios_base::cur&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Мы предполагаем, что все собирается на 32 битной машине, т.е. sizeof(short) == 2 байта, а sizeof(int) == 4 байта.&lt;/p&gt;
&lt;p&gt;Заметим, что тип и флаг - это short, а размер - int.&lt;/p&gt;
&lt;p&gt;Что выводит эта программа ?&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;type = 1 flag = 0 size = 4
type = 4 flag = 0 size = 2480
type = 6 flag = 0 size = 2268
type = 7 flag = 0 size = 324
type = 3 flag = 0 size = 83940
type = 2 flag = 0 size = 3136
type = 8 flag = 0 size = 712&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Т.е. файл содержит 7 блоков таких-то типов и у них такой-то размер.&lt;/p&gt;
&lt;p&gt;Что такое flag ? В сети про него написано, что это флаг compressed. И если он равен 0xffff, то блок сжатый и перед использованием его надо распаковать. Так ли это - не знаю, но везде, где он мне встречался, он был равен 0, и поэтому мы на него особого внимания обращать не будем.&lt;/p&gt;
&lt;p&gt;Для удобства работы с такими файлами, я написал простенький класс, который можно использовать для их чтения, так сказать, с удобствами:&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;class&lt;/span&gt; StreamReader
{
&lt;span style=&quot;color: #0030fF; &quot;&gt;private&lt;/span&gt;:
  HANDLE _file;

&lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt;:
  StreamReader&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  ~StreamReader&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; open&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;String &amp;amp;file&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; close&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; find_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 chunk, &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; *compressed = NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  u32  open_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 chunk&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; advance&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 adv&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; skip&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 adv&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  u32  tell&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; eof&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; r&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; *dst, u32 size&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  u16  r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  u32  r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  f32  r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  f64  r_f64&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
};

StreamReader::StreamReader&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  _file = NULL;
}

StreamReader::~StreamReader&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    close&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; StreamReader::open&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;String &amp;amp;file&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    close&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  _file = CreateFileA&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;file.c_str&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; _file != INVALID_HANDLE_VALUE;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; StreamReader::close&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    CloseHandle&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    _file = NULL;
  }
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; StreamReader::find_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 chunk, &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; *compressed&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  u32 pos = SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;, NULL, FILE_CURRENT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;, NULL, FILE_BEGIN&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!eof&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    u16 id       = r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    u16 compress = r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    u32 size     = r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;id == chunk&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    {
      SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, pos, NULL, FILE_BEGIN&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

      &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;compressed&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
        *compressed = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;compress == &lt;span style=&quot;color: #F04000; &quot;&gt;0xFFFF&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

      &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;true&lt;/span&gt;;
    }

    SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, size, NULL, FILE_CURRENT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  }

  SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, pos, NULL, FILE_BEGIN&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;
}

u32 StreamReader::open_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 chunk&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;find_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;chunk&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;, NULL, FILE_BEGIN&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!eof&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
    {
      u16 id      = r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      u16 compres = r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      u32 size    = r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

      &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;id == chunk&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
        &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; size - &lt;span style=&quot;color: #F04000; &quot;&gt;4&lt;/span&gt;; &lt;span style=&quot;color: #808080&quot;&gt;// Не учитываем заголовок&lt;/span&gt;

      SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, size, NULL, FILE_CURRENT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    }
  }

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; StreamReader::advance&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 adv&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, - &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;adv, NULL, FILE_CURRENT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; StreamReader::skip&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;u32 adv&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;long&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;adv, NULL, FILE_CURRENT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}

u32 StreamReader::tell&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;, NULL, FILE_CURRENT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; StreamReader::eof&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;char&lt;/span&gt; dst;
  DWORD nBytesRead;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;bool&lt;/span&gt; eof = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;ReadFile&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &amp;amp;dst, &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;, &amp;amp;nBytesRead, NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &amp;amp;&amp;amp; nBytesRead == &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!eof&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; SetFilePointer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, - &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;, NULL, FILE_CURRENT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; eof;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; StreamReader::r&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; *dst, u32 size&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  DWORD nBytesRead;
  ReadFile&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, dst, size, &amp;amp;nBytesRead, NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}

u16 StreamReader::r_u16&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  u16 r;
  DWORD nBytesRead;
  ReadFile&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &amp;amp;r, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;, &amp;amp;nBytesRead, NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; r;
}

u32 StreamReader::r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  u32 r;
  DWORD nBytesRead;
  ReadFile&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &amp;amp;r, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;, &amp;amp;nBytesRead, NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; r;
}

f32 StreamReader::r_f32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  f32 r;
  DWORD nBytesRead;
  ReadFile&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &amp;amp;r, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;, &amp;amp;nBytesRead, NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; r;
}

f64 StreamReader::r_f64&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  f64 r;
  DWORD nBytesRead;
  ReadFile&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;_file, &amp;amp;r, &lt;span style=&quot;color: #0030fF; &quot;&gt;sizeof&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;r&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;, &amp;amp;nBytesRead, NULL&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; r;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Комментариев в коде нет потому, что по-моему он очень простой и прозрачный для понимания.&lt;/p&gt;
&lt;p&gt;При этом я для удобства объявил нескоько типов:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;unsigned&lt;/span&gt; __int16 u16;
&lt;span style=&quot;color: #0030fF; &quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;unsigned&lt;/span&gt; __int32 u32;
&lt;span style=&quot;color: #0030fF; &quot;&gt;typedef&lt;/span&gt;          __int16 s16;
&lt;span style=&quot;color: #0030fF; &quot;&gt;typedef&lt;/span&gt;          __int32 s32;

&lt;span style=&quot;color: #0030fF; &quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt;            f32;
&lt;span style=&quot;color: #0030fF; &quot;&gt;typedef&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;double&lt;/span&gt;           f64;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Кто-то может сказать: зачем ? Ну ... уж так захотелось ...&lt;/p&gt;
&lt;p&gt;Испоьзовать его просто:&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;StreamReader sr;
u32 size;

&lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;!&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt; sr.open&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;filename&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &amp;amp;&amp;amp; sr.find_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;size = sr.open_chunk&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;false&lt;/span&gt;;

&lt;span style=&quot;color: #808080&quot;&gt;// ........&lt;/span&gt;

txCount = sr.r_u32&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;color: #808080&quot;&gt;// ..........&lt;/span&gt;

sr.r&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;buf, size&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

&lt;span style=&quot;color: #808080&quot;&gt;// .........&lt;/span&gt;

sr.close&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;При этом, на самом деле, вызывать&amp;nbsp; sr.find_chunk(...) не нужно - все-равно будет работать, но с ним красивее.&lt;/p&gt;
&lt;p&gt;Теперь, когда мы научились более или менее работать с такими файлами, возникает вопрос про типы блоков. Какие есть и что там хранится ?&lt;/p&gt;
&lt;p&gt;Опять-же, будем рассматривать только блоки в файлах &amp;quot;level&amp;quot; и &amp;quot;level.geom&amp;quot;. Поскольку все, что нам нужно, лежит в них.&lt;/p&gt;
&lt;p&gt;Есть во всех таких файлах:
&lt;br /&gt;1 - версия компилятора карты. Вот, например, пара версий: 0x2000E, 0x1000E. Заметьте - я их записал в шестнадцатиричном представлении. Так они красивее выглядят.&lt;/p&gt;
&lt;p&gt;Есть в файле &amp;quot;level&amp;quot;
&lt;br /&gt;4 - описание порталов
&lt;br /&gt;6 - источники света
&lt;br /&gt;7 - короны источников света
&lt;br /&gt;3 - объекты
&lt;br /&gt;2 - материалы
&lt;br /&gt;8 - секторы&lt;/p&gt;
&lt;p&gt;Есть в файле &amp;quot;level.geom&amp;quot;
&lt;br /&gt;9 - блоки вершин
&lt;br /&gt;10 - блоки индексов
&lt;br /&gt;11 - что-то, что где-то называют &amp;quot;синхронизацией&amp;quot;, где-то &amp;quot;Slide Window&amp;quot;, а где-то ЛОДами.&lt;/p&gt;
&lt;p&gt;Что означают подробнее некоторые из блоков, мы будем смотреть дальше, в следующей главе. Там же попытается загрузить в огр блоки 9 и 10 из файла &amp;quot;level.geom&amp;quot;.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/gde/articles/?id=5073</guid>
  <pubDate>Thu, 15 Jul 2010 10:01:38 GMT</pubDate>
  <title>S.T.A.L.K.E.R. Level. Часть 01. Введение.</title>
  <link>http://www.gamedev.ru/community/gde/articles/?id=5073</link>
  <comments>http://www.gamedev.ru/community/gde/forum/?id=135753</comments>
  <description>
&lt;p&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/pripyat_1.jpg&quot; alt=&quot;Припять, карта Зова Припяти. Собственный рендер. | S.T.A.L.K.E.R. Level. Часть 01. Введение.&quot; /&gt;
&lt;p&gt;Когда я копался в файлах уровней Сталкера, то обнаружил, что в инете по этому поводу информации не мало, но какая-то она вся раздробленная, и, как правило, совсем без примеров. Поэтому очень многое приходилось путем проб и ошибок выяснять на практике. Ну я и решил написать небольшой цикл статей на тему &amp;quot;уровни Сталкера - что это и с чем их едят&amp;quot;.
&lt;p&gt;НО! Более ориентированных на практику, а не теорию. А из-за этого здесь не будет больших и муторных описаний форматов, всяких там констант и прочего. Будет практика (читай - код), ну, и совсем немного теории.&lt;/p&gt;
&lt;p&gt;Сразу скажу, что формат и использование игровых архивов здесь рассматриваться не будут, и, предполагается, что вы мы их все аккуратно распаковали в папку &amp;quot;gamedata&amp;quot;. Т.е. в ней есть папки &amp;quot;ai&amp;quot;, &amp;quot;anims&amp;quot;, &amp;quot;configs&amp;quot;, &amp;quot;levels&amp;quot;&amp;nbsp; и так далее. Вот эту папочку мы и будем использовать. Также насчет версий игры - я использую &amp;quot;Зов Припяти&amp;quot; последней версии и все будет именно для него. Ну это не беда, в Сталкере все меняется медленно, плавно и постепенно, поэтому, я думаю, почти все будет работать и на более старых версиях.&lt;/p&gt;
&lt;p&gt;Ну, и как последнее. Насколько я хочу глубоко опуститься ? Решил, что будет достаточно, если в Огре можно будет отрисовать геометрию уровня и хоть как-то ее затекстурировать. А вобще посмотрим ...&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/nebula/blog/?id=5072</guid>
  <pubDate>Thu, 15 Jul 2010 06:05:37 GMT</pubDate>
  <title>Nebula3 Level Editor</title>
  <link>http://www.gamedev.ru/community/nebula/blog/?id=5072</link>
  <comments>http://www.gamedev.ru/community/nebula/forum/?id=135745</comments>
  <category>nebula3</category>
  <description>
&lt;p&gt;Как то случайно наткнулся на этот блог - &lt;a href=&quot;http://gscept.com/index.php/sp2010/C27/&quot;&gt;http://gscept.com/index.php/sp2010/C27/&lt;/a&gt;
&lt;br /&gt;Думаю многим будет интересно.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/k5engine/articles/K5Engine_intro</guid>
  <pubDate>Tue, 13 Jul 2010 20:23:39 GMT</pubDate>
  <title>Введение в K5Engine</title>
  <link>http://www.gamedev.ru/community/k5engine/articles/K5Engine_intro</link>
  <comments>http://www.gamedev.ru/community/k5engine/forum/?id=135767</comments>
  <description>
&lt;p&gt;Статья введение в движок K5Engine.
&lt;br /&gt;В ней описана структура ядра движка и создание минимального приложения. 
&lt;p&gt;&lt;b&gt;Введение.&lt;/b&gt;
&lt;p&gt;В данной статье даётся краткое описание внутренних структур игрового движка K5Engine а так же приводится пример минимального приложения.&lt;/p&gt;
&lt;p&gt;Движок&amp;nbsp; K5Engine предназначен для разработки 2D игр. Он поддерживает 2 типа рендера: DirectX8 и OpenGL. Архитектура модульная, позволяет без лишних проблем интегрировать нужные библиотеки и системы в общую структуру. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Структрура движка:&lt;/b&gt;
&lt;p&gt;Движок состоит из трёх основных частей: ядро, расширения и библиотека тестового кода.&lt;/p&gt;
&lt;p&gt;Ядро &amp;mdash; реализация базового функционала, набор графических&amp;nbsp; объектов, работа с текстом, устройства ввода-вывода. Код данного модуля стабилен, меняется и дополняется редко.&lt;/p&gt;
&lt;p&gt;Расширения &amp;mdash; разнообразные вспомогательные инструмены, такие как проверка на попадание точки в спрайт, эффекты типа вращния спрайта или движения. В данный модуль переносятся те системы, которые себя хорошо показали в работе и часто используются.&lt;/p&gt;
&lt;p&gt;Библиотека тестового кода &amp;mdash; представляет собой широкий набор разнообразных вспомогательных инструментов, значительно облегчающих разработку приложений. В данный модуть добавляются реализации новых механизмов для их тестирования. Далее при стабилизации кода блока он переносится в модуль расширений движка. &lt;/p&gt;
&lt;p&gt;Для начала рассмотрим структуру ядра движка. В него входят такие копоненты:
&lt;br /&gt;ActionSystem &amp;mdash; система классов-действий(реакций). Действия делятся на два типа: обычные и событийные. Обычные действия &amp;mdash; выполняются в момент вызова. Событийные действия &amp;mdash; выполняются как реакция на то или иное событие. Сюда входят базовые классы для создания действий, приминяющихся к графическим объектам, к их спискам и менеджерам, а также сами списки и менеджеры списков действий. Эта система предназначена для построения игровой логики.&lt;/p&gt;
&lt;p&gt;EventSystem &amp;mdash; обобщённая событийная система движка. В неё входит перечесление типов событий, описание события и очередь событий.&lt;/p&gt;
&lt;p&gt;GraphicSystem &amp;mdash; графическая система движка. В неё входят такие графические примитивы: спрайт, банк спрайтов, текст. Так же шаблон для построения списков объектов и менеджера объектов и их реализации для каждого графического объекта. Очередь рисования, базовый класс текстур, списки текстур и менеджер текстур.
&lt;br /&gt;Инструментальные классы &amp;mdash; генератор исключений, базовые классы устройства, приложения, камеры,&amp;nbsp; чтения цвета пикселя с экрана, загрузчика текстур.&lt;/p&gt;
&lt;p&gt;Cover &amp;mdash; высокоуровневые реализации систем, зависимых от платформы а так же вспомогательные классы. Состав:
&lt;br /&gt;Реализация камеры для двух типов рендера.
&lt;br /&gt;Реализация устройства с возможностью инициализации для работы с тем или иным типом рендера.
&lt;br /&gt;Реализация класса для чтения пикселя экрана.
&lt;br /&gt;Реализация загрузчика текстур.
&lt;br /&gt;Собранная графическая сцена, включает в себя менеджеры графических объектов, камеру и очередь рисования. &lt;/p&gt;
&lt;p&gt;LibMath &amp;mdash; математическая библиотека. Сюда входит реализация двумерных векторов, матриц и вспомогательный математические функции.&lt;/p&gt;
&lt;p&gt;LibShell &amp;mdash; библиотека реализаций функционала, который зависит от платформы. Благодаря использования данной библиотеки в движок вносится функционал, который зависит от платформы или библиотеки, например: реализации устройства вывода для DirectX8 и OpenGL на WinApi, шел для библиотеки SDL для поддержки *Nix систем (Linux и MacOS).&lt;/p&gt;
&lt;p&gt;LibTools &amp;mdash; базовые вспомогательные инструменты, таки как работа с логом, преобразование форматов, например: wstring в string и обратно, числовых типов в строки, строки в числовые типы.&lt;/p&gt;
&lt;p&gt;Ядра игрового движка достаточно для создания игровых проектов. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Создание приложения.&lt;/b&gt;
&lt;p&gt;Движок может использоваться на разных компиляторах и в разных средах разработки. Его работоспособность проверена для MinGW и Microsoft Visual C++ 2005/2008 Compiller. Для разработки приложений можно использовать любые среды, поддерживающие эти компиляторы, в примере приложение создаётся при помощи среды Code::Blocks.
&lt;br /&gt;Процесс настройки проекта:
&lt;br /&gt;1.При помощи визарда среды разработки создаётся консольное приложение
&lt;br /&gt;2.Подключаются все нужные библиотеки, в данном случае будет использоваться полное ядро движка, то есть надо подключить оба рендера к проекту. Это такие библиотеки: K5Engine, OpenGL32, glu32, DevIL, ILU, ILUT, D3D8, D3DX8d, freetype, а так же библиотеки user32, kernel32, gdi32, winmm
&lt;br /&gt;3.Движок для представления текста использует &amp;laquo;широкие символы&amp;raquo;, поэтому для корректной работы надо добавить флаги UNICODE, _UNICODE. Так же нужно добавить _STDCALL_SUPPORTED. Так же для того, что бы убрать вывод консольного окна, в опции линковки стоит добавить флаг -mwindows.&lt;/p&gt;
&lt;p&gt;Настройка проекта готова. Далее есть несколько вариантов работы: можно использовать бесконечный цикс для работы приложения или воспользоваться готовым классом. 
&lt;br /&gt;Добавляем в проект модуль Application. В заголовочном файле добавляем такой код:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;class&lt;/span&gt; TApplication: &lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt; TBaseApplication
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;private&lt;/span&gt;:
    TDevice  Device;
    TEventDeque EventDeque;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;private&lt;/span&gt;:
    &lt;span style=&quot;color: #0030fF; &quot;&gt;inline&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; ProcessEvents&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;inline&lt;/span&gt; &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; DrawScene&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;public&lt;/span&gt;:
    TApplication&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    ~TApplication&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Init&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Quit&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Main&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
};&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Класс TApplication является наследников от виртуального класса TBaseApplication и включает в себя две основные системы: реализацию устройства TDevice и очередь событий&amp;nbsp; TEventDeque. &lt;/p&gt;
&lt;p&gt;В файл-реализацию добавляем такой код:&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;TApplication::TApplication&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;:TBaseApplication&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
}

TApplication::~TApplication&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; TApplication::ProcessEvents&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  Device.ProcessEvent&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;EventDeque.IsNotEmpty&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{

    TEvent Event&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;EventDeque.Pop&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

    &lt;span style=&quot;color: #0030fF; &quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Event.Type&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{
      &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; EN_TIMER:{
      }&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;


      &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; EN_SYSTEM:{
        &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Event.System.Type == EN_QUIT&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{
          Stop&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
        }
      }&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;

      &lt;span style=&quot;color: #0030fF; &quot;&gt;case&lt;/span&gt; EN_KEYBOARD:{
        &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Event.Keyboard.Type == EN_KEYUP&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{
          &lt;span style=&quot;color: #0030fF; &quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Event.Keyboard.Key == EN_KEY_ESCAPE&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;{
            Stop&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
          }
        }
      }&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;

      &lt;span style=&quot;color: #0030fF; &quot;&gt;default&lt;/span&gt;:&lt;span style=&quot;color: #0030fF; &quot;&gt;break&lt;/span&gt;;
    }
  }
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; TApplication::DrawScene&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  Device.ClearSceneColor&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  Device.SwapSceneBuffers&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; TApplication::Init&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  wstring Type&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;L&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;directx8&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  Device.Construct&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Type&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  Device.SetEventDeque&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&amp;amp;EventDeque&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  Device.SetCaption&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;L&lt;span style=&quot;color: #00808F&quot;&gt;&amp;quot;Tutorial 01&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  Device.SetClearColor&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;f,&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;f,&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;f,&lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;f&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  Device.Create&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #F04000; &quot;&gt;1024&lt;/span&gt;,&lt;span style=&quot;color: #F04000; &quot;&gt;768&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  Device.ResetTimer&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  Start&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; TApplication::Quit&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; TApplication::Main&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  ProcessEvents&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  DrawScene&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;В main.cpp добавляем код вида:
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt; WINAPI WinMain&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;  HINSTANCE hInstance, HINSTANCE hPrevInstance,
          PSTR pCmdLine, &lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt; nShowCmd&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  App.Init&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  App.Work&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
  App.Quit&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Далее компилируем проект и получаем готовое приложение. При запуске создаётся пустое окно заданного размера с заголовком Tutorial 01 и чёрным цветом отчистки.&amp;nbsp; При закрытии окна или при нажатии по ескейп приложение прекратит совю работу. &lt;/p&gt;
&lt;p&gt;Исходники уроков можно скачать по ссылке:
&lt;br /&gt;&lt;a href=&quot;http://narod.ru/disk/23268052000/Tutorials.zip.html&quot;&gt;Tutorials&lt;/a&gt;
&lt;br /&gt;К данной статье относится урок №1.&lt;/p&gt;
&lt;p&gt;Файлы, нужные для разработки, можно найти по этим ссылкам:
&lt;br /&gt;1. Библиотеки, нужные для работы движка:
&lt;br /&gt;&lt;a href=&quot;http://narod.ru/disk/22729347000/%5BUserLibs%5D%5BMinGW%5D.zip.html&quot;&gt;MinGW UserLibs&lt;/a&gt;
&lt;br /&gt;&lt;a href=&quot;http://narod.ru/disk/22729373000/%5BUserLibs%5D%5BVisualC%5D.zip.html&quot;&gt;MinGW UserLibs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Собранные библиотека движка для MinGW и VisualC++
&lt;br /&gt;&lt;a href=&quot;http://narod.ru/disk/23267995000/K5Engine.zip.html&quot;&gt;K5Engine lib&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/k5engine/blog/?id=5071</guid>
  <pubDate>Tue, 13 Jul 2010 20:22:31 GMT</pubDate>
  <title>Открытие группы, посвящённой использованию K5Engine</title>
  <link>http://www.gamedev.ru/community/k5engine/blog/?id=5071</link>
  <description>
&lt;p&gt;&lt;b&gt;Выложена первая публичная версия движка K5Engine.&lt;/b&gt;
&lt;p&gt;Движок K5Engine предназначен для разработки 2D игр. 
&lt;br /&gt;Он поддерживает два типа рендера - через OpenGL и DirectX8. Так же благодаря модульной структуре есть простая возможность добавить нужный разработчику рендер или систему обработки ввода/вывода.&lt;/p&gt;
&lt;p&gt;В данной группе будут выкладываться статьи, уроки, документация и другие материалы по данному движку а так же освещаться его развитие.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/g3d/articles/doc_g3d</guid>
  <pubDate>Thu, 08 Jul 2010 18:32:50 GMT</pubDate>
  <title>Перевод документации</title>
  <link>http://www.gamedev.ru/community/g3d/articles/doc_g3d</link>
  <comments>http://www.gamedev.ru/community/g3d/forum/?id=135501</comments>
  <category>g3d</category>
  <description>
&lt;p&gt;Документация по инновационному движку G3D engine
&lt;br /&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/ooRWE1t1ZQA&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;embed src=&quot;http://www.youtube.com/v/ooRWE1t1ZQA&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br /&gt;Прошу в этой теме выкладывать все что нашли по этому движку и все кто с ним работает планируется создание русского компьюнити но инфы мала прошу людей откликнутся или связатся по аське 550632194&lt;/p&gt;
&lt;p&gt;G3D - Это инновационный Open Source (BSD лицензия) C++ 3D движок AAA класса. Он используется в коммерческих играх, научных статьях, в военных симуляторах, университетские курсы. G3D поддерживает аппаратное ускорение реального времени отрисовки, офф-лайн отрисовки как луч трассировки и общие цели вычислений на GPUs. &lt;/p&gt;
&lt;p&gt;G3D предоставляет набор процедур и структур, так широко, что они необходимы в почти каждый графический редактор. Это упрощает использование без ограничения функциональности и производительности низкоуровневой библиотеки как OpenGL и сокеты. G3D является надежной, оптимизированной базой для создания 3D-приложения. &lt;/p&gt;
&lt;p&gt;Основные характеристики включают в себя: 
&lt;br /&gt;3Ds, МФСМЦ, MD2, MD3, BSP, PLY2, OFF и пользовательских моделей 
&lt;br /&gt;Изображения JPG, PNG, BMP, PPM, PCX, TGA, НСР и ICO 
&lt;br /&gt;MP4, MPG, MOV, AVI, DV, QT, WMV, видео 
&lt;br /&gt;Средства отладки во время выполнения и разработчик HUD 
&lt;br /&gt;Themed Превдографическим и отрисовки шрифтов 
&lt;br /&gt;Необязательный автоматическое управление памятью 
&lt;br /&gt;TCP и UDP на сети с P2P сети обнаружения 
&lt;br /&gt;Оптимизированный n x м матрицы, включая обратный и СВД 
&lt;br /&gt;Windows XP, Vista, OS X, Linux и FreeBSD поддерживает 
&lt;br /&gt;Visual C++, XCode и gcc совместимый 
&lt;br /&gt;Чтение файла конфигурации 
&lt;br /&gt;Сплайновый, kd дерево, пирамиды обзора и другие необходимые 3D классов 
&lt;br /&gt;Java совместимости для файла и сетевых классов 
&lt;br /&gt;Инструменты: Модель зрителя, графический процессор ориентир и построить утилиты 
&lt;br /&gt;500 страниц ссылок и обзор документации, а также демонстрационные ролики &lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;Команда разработчиков охватывает индустрии графики. Она включает в себя профессиональных разработчиков игр, военных и подрядчиков, доктора наук, студентов и преподавателей.
&lt;br /&gt;&lt;b&gt;Добавлено&lt;/b&gt; (21.06.2010, 12:30)
&lt;br /&gt;---------------------------------------------
&lt;br /&gt;Взято с &lt;a href=&quot;http://sourceforge.net/apps/mediawiki/g3d/index.php?title=Russian_translation&quot;&gt;WIKI&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/kergame/blog/?id=5060</guid>
  <pubDate>Wed, 30 Jun 2010 05:00:41 GMT</pubDate>
  <title>Up: Всё по немногу</title>
  <link>http://www.gamedev.ru/community/kergame/blog/?id=5060</link>
  <comments>http://www.gamedev.ru/community/kergame/forum/?id=135426</comments>
  <description>
&lt;p&gt;Сессия закончилась и появилось много свободного времени, которое было потрачено с пользой.
&lt;br /&gt;За последнюю неделю в движке было сделано много изменений:
&lt;br /&gt;- переделано хранение объектов теперь карта весит на 160 метров меньше и более функциональна
&lt;br /&gt;- написан плагин для 3ds MAX в нём правда не всё гладко почему то на некоторых моделях неправильно экспортируется развёртка и я не уверен в правильности расчёта тангента.
&lt;br /&gt;- в редакторе карты появилась возможность добавлять объекты на карту, пока правда не очень удобно 
&lt;br /&gt;- добавлена нормальная система событий/сообщений
&lt;br /&gt;- много чего переделано внутри что повысило стабильность и скорость работы.&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;div style=&quot; overflow: auto; overflow-x: scroll hidden; overflow-y:hidden;&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/55682_1277873876_clp26.jpg&quot; alt=&quot;clp26 | Up: Всё по немногу&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style=&quot; overflow: auto; overflow-x: scroll hidden; overflow-y:hidden;&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/clp38.jpg&quot; alt=&quot;clp38 | Up: Всё по немногу&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style=&quot; overflow: auto; overflow-x: scroll hidden; overflow-y:hidden;&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/55684_1277873920_clp40.jpg&quot; alt=&quot;clp40 | Up: Всё по немногу&quot; /&gt;&lt;/div&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/ir/articles/?id=5056</guid>
  <pubDate>Tue, 29 Jun 2010 11:56:32 GMT</pubDate>
  <title>Оформление математических формул.</title>
  <link>http://www.gamedev.ru/community/ir/articles/?id=5056</link>
  <comments>http://www.gamedev.ru/community/ir/forum/?id=135367</comments>
  <description>
&lt;p&gt;==Оформление математических формул.==
&lt;br /&gt;Для того, чтобы вставить формулу в сообщение необходимо использовать тег:
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]...[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Язык формул аналогичен tex’овскому. Поддерживаются основные команды и символы.&lt;/p&gt;
&lt;p&gt;Команды в TeX’е обозначаются с помощью обратного слеша - &lt;font color=&quot;#ff0000&quot;&gt;\&lt;/font&gt;. 
&lt;br /&gt;Пробелы в формулах между символами игнорируются.
&lt;br /&gt;\qquad. - команда вставки пробела
&lt;br /&gt;\\ - команда перевода строки. 
&lt;br /&gt;\\[10pt] перевод строки на 10 точек 
&lt;br /&gt;Символы фигурных скобок { } используются для группировки выражений &amp;mdash; {a+b}.
&lt;br /&gt;Если необходимо использовать фигурные скобки в формулах (напр. теория множеств), необходимо поставить перед ними обратный слеш. &lt;/p&gt;
&lt;p&gt;Пример:
&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;A = \{1, 2, 3\}&lt;/font&gt;&lt;/p&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=A%20%3D%20%5C%7B1%2C%202%2C%203%5C%7D&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]A = \{1, 2, 3\}[/cht]&quot; /&gt;
&lt;p&gt;не поддерживаются индексы от индексов (\scriptscriptstyle) &lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;==Латинские буквы==&lt;/p&gt;
&lt;p&gt;A B C D E&amp;nbsp; F G H I J K L M N O P Q R S T U V W X Y Z
&lt;br /&gt;a b c d e f g h i j k l m n o p q r s t u v w x y z&lt;/p&gt;
&lt;p&gt;==Греческие буквы==
&lt;br /&gt;&lt;b&gt;Малые буквы греческого алфавита&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\alpha \beta \gamma \delta \epsilon \zeta \eta \theta \kappa&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\lambda \mu \nu \xi \pi \rho \sigma \tau \phi \chi \psi \omega &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Calpha%5Ctheta%5Cupsilon%0A%5Cbeta%5Cvartheta%5Cpi%5Cphi%0A%5Cgamma%5Ciota%5Cvarpi%5Cvarphi%0A%5Cdelta%5Ckappa%5Crho%5Cchi%0A%5Cepsilon%5Clambda%5Cvarrho%5Cpsi%0A%5Cvarepsilon%5Cmu%5Csigma%5Comega%0A%5Czeta%5Cnu%5Cvarsigma%0A%5Ceta%5Cxi%5Ctau%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\alpha\theta\upsilon
\beta\vartheta\pi\phi
\gamma\iota\varpi\varphi
\delta\kappa\rho\chi
\epsilon\lambda\varrho\psi
\varepsilon\mu\sigma\omega
\zeta\nu\varsigma
\eta\xi\tau
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;Большие буквы греческого алфавита&lt;/b&gt; (остальные совпадают по виду с латинскими)
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\Gamma \Lambda \Sigma \Psi \Delta \Xi \Upsilon \Omega \Theta \Pi \Phi&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5CGamma%5CLambda%5CSigma%5CPsi%0A%5CDelta%5CXi%5CUpsilon%5COmega%0A%5CTheta%5CPi%5CPhi%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\Gamma\Lambda\Sigma\Psi
\Delta\Xi\Upsilon\Omega
\Theta\Pi\Phi
[/cht]&quot; /&gt;
&lt;br /&gt; 
&lt;br /&gt;&lt;b&gt;наклонная буква&lt;/b&gt; - &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Cmathit%5CDelta%20&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\mathit\Delta [/cht]&quot; /&gt; 
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\mathit\Delta&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Не поддерживаются греческие буквы:&lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;\varGamma \varXi \varPhi \varDelta \varPi \varPsi \varTheta \varSigma 
&lt;br /&gt;\varOmega \varLambda \varUpsilon \digamma \varkappa&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Не поддерживаются греческие буквы прямого начертания:&lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;\alphaup \thetaup \piup \phiup \betaup \varthetaup \varpiup \varphiup
&lt;br /&gt;\gammaup \iotaup \rhoup \chiup \deltaup \kappaup \varrhoup \psiup
&lt;br /&gt;\epsilonup \lambdaup \sigmaup \omegaup \varepsilonup \muup \varsigmaup
&lt;br /&gt;\zetaup \nuup \tauup \etaup \xiup \upsilonup&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt; 
&lt;br /&gt;==Многоточия==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\cdots&amp;nbsp; \ddots&amp;nbsp; \ldots&amp;nbsp; \vdots &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Ccdots%20%5Cqquad%5Cqquad%5Cqquad%5Cqquad%0A%5Cddots%20%5Cqquad%5Cqquad%5Cqquad%5Cqquad%0A%5Cldots%20%5Cqquad%5Cqquad%5Cqquad%5Cqquad%0A%5Cvdots%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\cdots \qquad\qquad\qquad\qquad
\ddots \qquad\qquad\qquad\qquad
\ldots \qquad\qquad\qquad\qquad
\vdots
[/cht]&quot; /&gt;
&lt;p&gt;==Символы бинарных операций==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\amalg&amp;nbsp; \ast&amp;nbsp; \bigcirc&amp;nbsp; \bigtriangledown&amp;nbsp; \bigtriangleup&amp;nbsp; \bullet&amp;nbsp; \cap&amp;nbsp; \cdot&amp;nbsp; \circ&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Camalg%20%5Cqquad%0A%5Cast%20%5Cqquad%0A%5Cbigcirc%20%5Cqquad%0A%5Cbigtriangledown%20%5Cqquad%0A%5Cbigtriangleup%20%5Cqquad%0A%5Cbullet%20%20%5Cqquad%0A%5Ccap%20%5Cqquad%0A%5Ccdot%20%5Cqquad%0A%5Ccirc%20%5Cqquad%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\amalg \qquad
\ast \qquad
\bigcirc \qquad
\bigtriangledown \qquad
\bigtriangleup \qquad
\bullet  \qquad
\cap \qquad
\cdot \qquad
\circ \qquad
[/cht]&quot; /&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\cup \dagger \ddagger\diamond \div \mp \odot \ominus \oplus \oslash \otimes \pm&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Ccup%20%5Cqquad%0A%5Cdagger%20%0B%5Cqquad%0A%5Cddagger%5Cqquad%0A%5Cdiamond%20%5Cqquad%0A%5Cdiv%5Cqquad%0A%5Cmp%5Cqquad%0A%5Codot%5Cqquad%0A%5Cominus%5Cqquad%0A%5Coplus%5Cqquad%0A%5Coslash%5Cqquad%0A%5Cotimes%5Cqquad%0A%5Cpm%5Cqquad%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\cup \qquad
\dagger \qquad
\ddagger\qquad
\diamond \qquad
\div\qquad
\mp\qquad
\odot\qquad
\ominus\qquad
\oplus\qquad
\oslash\qquad
\otimes\qquad
\pm\qquad
[/cht]&quot; /&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\setminus \sqcap \sqcup \star \times \triangleleft \triangleright \uplus \vee \wedge \wr&lt;/font&gt;&lt;/p&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Csetminus%5Cqquad%0A%5Csqcap%5Cqquad%0A%5Csqcup%5Cqquad%0A%5Cstar%5Cqquad%0A%5Ctimes%5Cqquad%0A%5Ctriangleleft%5Cqquad%0A%5Ctriangleright%5Cqquad%0A%5Cuplus%5Cqquad%0A%5Cvee%5Cqquad%0A%5Cwedge%5Cqquad%0A%5Cwr%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\setminus\qquad
\sqcap\qquad
\sqcup\qquad
\star\qquad
\times\qquad
\triangleleft\qquad
\triangleright\qquad
\uplus\qquad
\vee\qquad
\wedge\qquad
\wr
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются:&lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt; \unlhda \rhda \unrhda \lhda&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;==Дополнительные символы бинарных операций==&lt;/p&gt;
&lt;p&gt;&lt;b&gt;поддерживаются:&lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\boxdot \curlyvee \curlywedge&lt;/font&gt;&lt;/p&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Cboxdot%5Cqquad%5Ccurlyvee%5Cqquad%5Ccurlywedge&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\boxdot\qquad\curlyvee\qquad\curlywedge[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются:&lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt; \barwedge \circledcirc \intercal \circleddash \leftthreetimes
&lt;br /&gt;\boxminus \Cup \doublecup \ltimes \boxplus \rightthreetimes
&lt;br /&gt;\boxtimes&amp;nbsp; \rtimes \Cap \doublecap \divideontimes \smallsetminus
&lt;br /&gt;\centerdot \dotplus \veebar \circledast \doublebarwedge \Anda&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;==Символы бинарных отношений==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\approx \in \prec \subset \asymp \preceq \subseteq \leq&lt;/font&gt;&lt;/p&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Capprox%20%5Cqquad%0A%5Cin%20%5Cqquad%0A%5Cprec%20%5Cqquad%0A%5Csubset%20%5Cqquad%0A%5Casymp%20%5Cqquad%0A%5Cpreceq%20%5Cqquad%0A%5Csubseteq%20%5Cqquad%0A%5Cleq%20%5Cqquad%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\approx \qquad
\in \qquad
\prec \qquad
\subset \qquad
\asymp \qquad
\preceq \qquad
\subseteq \qquad
\leq \qquad
[/cht]&quot; /&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\le \propto \succ \sim \succeq \dashv \mid \simeq \supset &lt;/font&gt;&lt;/p&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cle%20%5Cqquad%0A%5Cpropto%20%5Cqquad%0A%5Csucc%20%5Cqquad%0A%5Csim%20%5Cqquad%0A%5Csucceq%20%5Cqquad%0A%5Cdashv%20%5Cqquad%0A%5Cmid%20%5Cqquad%0A%5Csimeq%20%5Cqquad%0A%5Csupset%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\le \qquad
\propto \qquad
\succ \qquad
\sim \qquad
\succeq \qquad
\dashv \qquad
\mid \qquad
\simeq \qquad
\supset
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются символы бинарных отношений&lt;/b&gt; - &lt;font color=&quot;#ff0000&quot;&gt;&amp;lt;&amp;nbsp; &amp;gt;&amp;nbsp; =&amp;nbsp; : &amp;lt;&amp;nbsp; &amp;gt; &lt;/font&gt;
&lt;p&gt;==Дополнительные символы бинарных отношений==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\sqsubset \sqsupset \therefore \trianglelefteq \trianglerighteq &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Csqsubset%5Cqquad%0A%5Csqsupset%5Cqquad%0A%5Ctherefore%5Cqquad%0A%5Ctrianglelefteq%5Cqquad%0A%5Ctrianglerighteq%5Cqquad%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\sqsubset\qquad
\sqsupset\qquad
\therefore\qquad
\trianglelefteq\qquad
\trianglerighteq\qquad
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются дополнительные символы бинарных отношений:&lt;/b&gt; 
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;\approxeq \gtrdo \smallsmile&amp;nbsp; \backepsilon \gtreqless&amp;nbsp; \backsim \gtreqqless&amp;nbsp; 
&lt;br /&gt;\backsimeq \gtrless \Subset&amp;nbsp; \because \gtrsim \subseteqq \between \leqq \succapprox 
&lt;br /&gt;\blacktriangleleft \leqslant \succcurlyeq \blacktriangleright \lessapprox \succsim 
&lt;br /&gt;\Bumpeq \lessdot \Supset \bumpeq \lesseqgtr \supseteqq \circeq \lesseqqgtr 
&lt;br /&gt;\curlyeqprec \lessgtr \thickapprox \curlyeqsucc \lesssim \thicksim \doteqdot \Doteq
&lt;br /&gt;\lll \llless \eqcirc \pitchfork \triangleq \eqslantgtr \precapprox \eqslantless \preccurlyeq
&lt;br /&gt;\varpropto \fallingdotseq \precsim \vartriangleleft \geqq \risingdotseq \vartriangleright 
&lt;br /&gt;\geqslant \shortmid \Vdash&amp;nbsp; \ggg \gggtr \shortparallel \vDash \gtrapprox \smallfrown \Vvdash&lt;/font&gt;&amp;lt;/p&amp;gt;
&lt;p&gt;==Дополнительные знаки отрицательных бинарных отношений==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\ntriangleleft \ntriangleright \ntrianglelefteq \ntrianglerighteq &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cntriangleleft%20%5Cqquad%0A%5Cntriangleright%20%5Cqquad%0A%5Cntrianglelefteq%20%5Cqquad%0A%5Cntrianglerighteq%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\ntriangleleft \qquad
\ntriangleright \qquad
\ntrianglelefteq \qquad
\ntrianglerighteq
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются дополнительные символы отрицательных бинарных отношений:&lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;\nless \ngtr \varsubsetneqq \lneq \gneq \varsupsetneqq \nleq \ngeq \nsubseteqq 
&lt;br /&gt;\nleqslant \ngeqslant \nsupseteqq \lneqq \gneqq \nmid \lvertneqq \gvertneqq \nparallel 
&lt;br /&gt;\nleqq \ngeqq \nshortmid \lnsim \gnsim \nshortparallel \lnapprox \gnapprox \nsim 
&lt;br /&gt;\nprec \nsucc \ncong \npreceq \nsucceq \nvdash \precneqq \succneqq \nvDash 
&lt;br /&gt;\precnsim \succnsim \nVdash \precnapprox \succnapprox \nVDash \subsetneq \supsetneq 
&lt;br /&gt;\varsubsetneq \varsupsetneq \nsubseteq \nsupseteq \subsetneqq \supsetneqq&lt;/font&gt;
&lt;p&gt;== Символы пунктуации==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;,&amp;nbsp; ,&amp;nbsp; ;&amp;nbsp; ;&amp;nbsp; ·&amp;nbsp;  :&amp;nbsp; . &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются: &lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#ff0000&quot;&gt;\cdotp \colon \ldotp&lt;/font&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5C%28%20f%3A%20X%5Cto%20Y%20%20f%3AX%20%5Cto%20Y%20%5C%29&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\( f: X\to Y  f:X \to Y \)[/cht]&quot; /&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\( f: X\to Y  f:X \to Y \)[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;==Акценты==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\acute{a} \check{a} \grave{a} \vec{a} \bar{a} 
&lt;br /&gt;\dot{a} \hat{a} \breve{a} \ddot{a} \tilde{a}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cacute%7Ba%7D%20%5Cqquad%0A%5Ccheck%7Ba%7D%20%5Cqquad%0A%5Cgrave%7Ba%7D%20%5Cqquad%0A%5Cvec%7Ba%7D%5Cqquad%0A%5Cbar%7Ba%7D%20%5Cqquad%0A%5Cdot%7Ba%7D%20%5Cqquad%0A%5Chat%7Ba%7D%5Cqquad%0A%5Cbreve%7Ba%7D%5Cqquad%0A%5Cddot%7Ba%7D%5Cqquad%0A%5Ctilde%7Ba%7D%5Cqquad%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\acute{a} \qquad
\check{a} \qquad
\grave{a} \qquad
\vec{a}\qquad
\bar{a} \qquad
\dot{a} \qquad
\hat{a}\qquad
\breve{a}\qquad
\ddot{a}\qquad
\tilde{a}\qquad
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются:&lt;/b&gt; &lt;font color=&quot;#ff0000&quot;&gt;\dddot{a} \ddddot{a}&lt;/font&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Chat%7B%5Cvec%7BS%7D%7D&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\hat{\vec{S}}[/cht]&quot; /&gt; &lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\hat{\vec{S}}[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;==Корни==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\sqrt&lt;/font&gt; - квадратные корни.
&lt;br /&gt;&lt;font color=&quot;#2a52be&quot;&gt;\sqrt[...]&lt;/font&gt; - в скобках показатель корня.
&lt;p&gt;Пример:&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%20%5C%5B%5Csqrt%5B3%5D%7Bx%5E3%7D%3Dx%20%20%5Cqquad%20%20%5Cqquad%20%20%5Cqquad%20%20%5Cqquad%20%20%5Cqquad%20%5Csqrt%7Bx%5E2%7D%3D%7Cx%7C%5C%5D&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht] \[\sqrt[3]{x^3}=x  \qquad  \qquad  \qquad  \qquad  \qquad \sqrt{x^2}=|x|\][/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht] \[\sqrt[3]{x^3}=x \qquad \sqrt{x^2}=|x|\][/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются:&lt;/b&gt; &lt;font color=&quot;#ff0000&quot;&gt;\mathstrut \leftroot \uproot&lt;/font&gt;
&lt;p&gt;==Дроби==&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Десятичные.&lt;/b&gt; Запятая в цифрах записывается с помощью фигурных скобок - &lt;font color=&quot;#2a52be&quot;&gt;{,}&lt;/font&gt;.
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Cpi%5Capprox%203%7B%2C%7D14&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\pi\approx 3{,}14[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\pi\approx 3{,}14[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Обыкновенные. - &lt;/b&gt;&lt;font color=&quot;#2a52be&quot;&gt;\frac&lt;/font&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Cfrac12%20%2B%20%5Cfrac%20x%202%20%3D%20%5Cfrac%7B1%2Bx%7D2&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\frac12 + \frac x 2 = \frac{1+x}2[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\frac12 + \frac x 2 = \frac{1+x}2[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%20%2B%5Cdisplaystyle%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%2B%5Cdisplaystyle%5Cfrac%7B1%7D%7B%5Csqrt%7B2%7D%2B%5Ccdots%7D%7D%7D&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\frac{1}{\sqrt{2} +\displaystyle\frac{1}{\sqrt{2}+\displaystyle\frac{1}{\sqrt{2}+\cdots}}}[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px; overflow: auto; overflow-x: auto; overflow-y:hidden; height:auto;&quot;&gt;&lt;pre&gt;[cht]\frac{1}{\sqrt{2} +\displaystyle\frac{1}{\sqrt{2}+\displaystyle\frac{1}{\sqrt{2}+\cdots}}}[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются:&lt;/b&gt; &lt;font color=&quot;#ff0000&quot;&gt;\cfrac \dfrac \tfrac&lt;/font&gt;
&lt;p&gt;==Пределы==&lt;/p&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Clim_%7Bn%20%5Cto%20%5Cinfty%7D%20%5Csum_%7Bk%3D1%7D%5En%20%5Cfrac%7B1%7D%7Bk%5E2%7D%20%3D%20%5Cfrac%7B%5Cpi%5E2%7D%7B6%7D%20%20%20&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\lim_{n \to \infty} \sum_{k=1}^n \frac{1}{k^2} = \frac{\pi^2}{6}   [/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\lim_{n \to \infty} \sum_{k=1}^n  \frac{1}{k^2} = \frac{\pi^2}{6}   [/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Clim_%7Bn%20%5Cto%20%5Cinfty%7D%20%5Csum_%7Bk%3D1%7D%5En%20%5Cfrac%7B1%7D%7Bk%5E2%7D%20%3D%20%5Cfrac%7B%5Cpi%5E2%7D%7B6%7D&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\lim_{n \to \infty} \sum_{k=1}^n \frac{1}{k^2} = \frac{\pi^2}{6}[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\lim_{n \to \infty} \sum_{k=1}^n \frac{1}{k^2} = \frac{\pi^2}{6}[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;==Символы переменного размера==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\bigcap \bigotimes \bigwedge \prod \bigcup \bigsqcup 
&lt;br /&gt;\coprod \sum \bigodot \biguplus \int \bigoplus \bigvee \oint&lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cbigcap%5Cqquad%0A%5Cbigotimes%5Cqquad%0A%5Cbigwedge%5Cqquad%0A%5Cprod%5Cqquad%0A%5Cbigcup%5Cqquad%0A%5Cbigsqcup%5Cqquad%0A%5Ccoprod%5Cqquad%0A%5Csum%5Cqquad%0A%5Cbigodot%5Cqquad%0A%5Cbiguplus%5Cqquad%0A%5Cint%5Cqquad%0A%5Cbigoplus%5Cqquad%0A%5Cbigvee%5Cqquad%0A%5Coint%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\bigcap\qquad
\bigotimes\qquad
\bigwedge\qquad
\prod\qquad
\bigcup\qquad
\bigsqcup\qquad
\coprod\qquad
\sum\qquad
\bigodot\qquad
\biguplus\qquad
\int\qquad
\bigoplus\qquad
\bigvee\qquad
\oint
[/cht]&quot; /&gt;
&lt;p&gt;==Интегралы==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\int&lt;/font&gt; - для обычного интеграла.
&lt;br /&gt;&lt;font color=&quot;#2a52be&quot;&gt;\oint&lt;/font&gt; - для контурного интеграла.
&lt;br /&gt;&lt;font color=&quot;#2a52be&quot;&gt;limits&lt;/font&gt; - для отображения пределов над и под знаком интеграла.
&lt;br /&gt;&lt;font color=&quot;#2a52be&quot;&gt;\iint и \iiint&lt;/font&gt; - для отображения кратных интегралов
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\iiiint \idotsint&lt;/font&gt;
&lt;br /&gt;&lt;b&gt;limits не действует на&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt; \iint и \iiint&lt;/font&gt;
&lt;br /&gt;&lt;b&gt;не поддерживаются дополнительные знаки&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\varointclockwise \fint&lt;/font&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Cint_0%5E1%20f%28x%29%5C%2Cdx%20%5Cqquad%20%5Coint_C%20%5Cmu%5C%2Cdl&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\int_0^1 f(x)\,dx \qquad \oint_C \mu\,dl[/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\int_0^1 f(x)\,dx \qquad \oint_C \mu\,dl[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Cint%5Climits_0%5E%5Cinfty%20y%28x%29%5C%2Cdx%5Cqquad%5Coint%5Climits_C%20%5Cmu%20dl%20%5C&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\int\limits_0^\infty y(x)\,dx\qquad\oint\limits_C \mu dl \[/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\int\limits_0^\infty y(x)\,dx\qquad\oint\limits_C \mu dl \[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5Ciint%20dxdy%5Cquad%20%20%5C%5C%20%5Ciiint%20dxdydz%5Cquad%20%20%5C%5C%20%5Ciiint%20dV%20%20%5C%5C%20%5Cint%20%5Climits_V%20%20d%5Cvec%7Bx%7D%20&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\iint dxdy\quad  \\ \iiint dxdydz\quad  \\ \iiint dV  \\ \int \limits_V  d\vec{x} [/cht]&quot; /&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\iint dxdy\quad  \\ \iiint dxdydz\quad  \\ \iiint dV  \\ \int \limits_V  d\vec{x} [/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются многострочные и сторонние индексы &lt;/b&gt; -&lt;font color=&quot;#ff0000&quot;&gt;\substack \sideset \mathop, &amp;lt;&amp;gt; subarray&lt;/font&gt;
&lt;p&gt;==Скобки==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;() [] \{ \} \langle \rangle&lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%28%29%20%5B%5D%20%5C%7B%20%5C%7D%20%5Clangle%20%5Crangle&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]() [] \{ \} \langle \rangle[/cht]&quot; /&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5C%5B%20e%3D%5Clim_%7Bn%5Cto%5Cinfty%7D%20%5Cleft%28%201%2B%5Cfrac%7B1%7D%7Bn%7D%20%5Cright%29%20%5En%20%5C%5D&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\[ e=\lim_{n\to\infty} \left( 1+\frac{1}{n} \right) ^n \][/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\[ e=\lim_{n\to\infty} \left( 1+\frac{1}{n} \right) ^n \][/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;==Разделители==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;( ( ) ) \uparrow \Uparrow \downarrow \Downarrow \lbrace \updownarrow
&lt;br /&gt;\Updownarrow \lfloor \rfloor \lceil \rceil \langle \rangle \backslash&lt;/font&gt;
&lt;p&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%28%20%28%20%29%20%29%5Cuparrow%5CUparrow%0A%5Cdownarrow%5CDownarrow%0A%5Clbrace%5Cupdownarrow%5CUpdownarrow%0A%5Clfloor%5Crfloor%5Clceil%5Crceil%0A%5Clangle%5Crangle%5Cbackslash%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
( ( ) )\uparrow\Uparrow
\downarrow\Downarrow
\lbrace\updownarrow\Updownarrow
\lfloor\rfloor\lceil\rceil
\langle\rangle\backslash
[/cht]&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\lbrack\ rbrack\vert \Vert&lt;/font&gt;
&lt;p&gt;&lt;b&gt;форматирование разделителей (скобок)&lt;/b&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0Ae%3D%5Clim_%7Bn%5Cto%5Cinfty%7D%20%5Cleft%28%201%2B%5Cfrac%7B1%7D%7Bn%7D%20%0A%28%20%28%20%29%20%29%5Cuparrow%5CUparrow%0A%5Cdownarrow%5CDownarrow%0A%5Clbrace%5Cupdownarrow%5CUpdownarrow%0A%5Clfloor%5Crfloor%5Clceil%5Crceil%0A%5Clangle%5Crangle%5Cbackslash%0A%5Cright%29%20%5En%20%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
e=\lim_{n\to\infty} \left( 1+\frac{1}{n} 
( ( ) )\uparrow\Uparrow
\downarrow\Downarrow
\lbrace\updownarrow\Updownarrow
\lfloor\rfloor\lceil\rceil
\langle\rangle\backslash
\right) ^n 
[/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px; overflow: auto; overflow-x: auto; overflow-y:hidden; height:auto;&quot;&gt;&lt;pre&gt;[cht]e=\lim_{n\to\infty} \left( 1+\frac{1}{n} ( ( ) )\uparrow\Uparrow\downarrow\Downarrow\lbrace\updownarrow\Updownarrow\lfloor\rfloor\lceil\rceil\langle\rangle\backslash\right) ^n [/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\lvert \rvert \lVert \rVert&lt;/font&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются большие разделители&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\lgroup \rgroup \lmoustache \rmoustache \arrowvert&amp;nbsp; \Arrowvert \bracevert \ulcorner q \urcorner x \llcorner y \lrcorner&lt;/font&gt;
&lt;p&gt;Вместо разделителя после команды \left можно поставить точку - &lt;font color=&quot;#2a52be&quot;&gt;\left. &lt;/font&gt;
&lt;br /&gt;(автоподстройка размеров второго разделителя)&lt;/p&gt;
&lt;p&gt;Пример:&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%20%5Cint%5Climits_a%5Eb%5Cfrac12%0A%281%2Bx%29%5E%7B-3%2F2%7D%5C%2C%5Cmathrm%7Bd%7Dx%3D%0A%5Cleft.-%5Cfrac%7B1%7D%7B%5Csqrt%7B1%2Bx%7D%7D%0A%5Cright%7C_a%5Eb%20%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
 \int\limits_a^b\frac12
(1+x)^{-3/2}\,\mathrm{d}x=
\left.-\frac{1}{\sqrt{1+x}}
\right|_a^b 
[/cht]&quot; /&gt;&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\int\limits_a^b\frac12(1+x)^{-3/2}\,\mathrm{d}x=\left.-\frac{1}{\sqrt{1+x}}\right|_a^b [/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Определители размера скобок&lt;/b&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\bigl \Bigl \biggl \Biggl \bigr \Bigr \biggr \Biggr&lt;/font&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\bigm \Bigm \biggm \Biggm \big \Big \bigg \Bigg&lt;/font&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5CBigl%28%20x%5Cin%20A%28n%29%20%7C%20y%5Cin%20B%28m%29%5CBigr%29&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\Bigl( x\in A(n) | y\in B(m)\Bigr)[/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\Bigl( x\in A(n) | y\in B(m)\Bigr)[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%5CBiggl%28%5Cbiggl%28%5CBigl%28%5Cbigl%28%28x%29%5Cbigr%29%5CBigr%29%5Cbiggr%29%5CBiggr%29&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]\Biggl(\biggl(\Bigl(\bigl((x)\bigr)\Bigr)\biggr)\Biggr)[/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt; [cht]\Biggl(\biggl(\Bigl(\bigl((x)\bigr)\Bigr)\biggr)\Biggr)[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;==Стрелки==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\leftarrow \rightarrow \leftrightarrow \Leftarrow \Rightarrow \Leftrightarrow 
&lt;br /&gt;\mapsto \leftharpoonu \leftharpoondown \rightleftharpoons &lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cleftarrow%20%5Cqquad%0A%5Crightarrow%20%5Cqquad%0A%5Cleftrightarrow%20%5Cqquad%0A%5CLeftarrow%20%5Cqquad%0A%5CRightarrow%20%5Cqquad%0A%5CLeftrightarrow%20%5Cqquad%0A%5Cmapsto%20%5Cqquad%0A%5Cleftharpoonup%20%5Cqquad%0A%5Cleftharpoondown%20%5Cqquad%0A%5Crightleftharpoons%20%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\leftarrow \qquad
\rightarrow \qquad
\leftrightarrow \qquad
\Leftarrow \qquad
\Rightarrow \qquad
\Leftrightarrow \qquad
\mapsto \qquad
\leftharpoonup \qquad
\leftharpoondown \qquad
\rightleftharpoons 
[/cht]&quot; /&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\longleftarrow \longrightarrow \longleftrightarrow \Longleftarrow 
&lt;br /&gt;\Longrightarrow \Longleftrightarrow \rightharpoonup \rightharpoondown&lt;/font&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Clongleftarrow%20%5Cqquad%0A%5Clongrightarrow%20%5Cqquad%0A%5Clongleftrightarrow%20%5Cqquad%0A%5CLongleftarrow%20%5Cqquad%0A%5CLongrightarrow%20%5Cqquad%0A%5CLongleftrightarrow%20%5Cqquad%0A%5Crightharpoonup%20%5Cqquad%0A%5Crightharpoondown%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\longleftarrow \qquad
\longrightarrow \qquad
\longleftrightarrow \qquad
\Longleftarrow \qquad
\Longrightarrow \qquad
\Longleftrightarrow \qquad
\rightharpoonup \qquad
\rightharpoondown
[/cht]&quot; /&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\uparrow \downarrow \updownarrow \Uparrow \Downarrow 
&lt;br /&gt;\Updownarrow \nearrow \searrow \swarrow \nwarrow&lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cuparrow%20%5Cqquad%0A%5Cdownarrow%20%5Cqquad%0A%5Cupdownarrow%20%5Cqquad%0A%5CUparrow%20%5Cqquad%0A%5CDownarrow%20%5Cqquad%0A%5CUpdownarrow%20%5Cqquad%0A%5Cnearrow%20%5Cqquad%0A%5Csearrow%20%5Cqquad%0A%5Cswarrow%20%5Cqquad%20%0A%5Cnwarrow%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\uparrow \qquad
\downarrow \qquad
\updownarrow \qquad
\Uparrow \qquad
\Downarrow \qquad
\Updownarrow \qquad
\nearrow \qquad
\searrow \qquad
\swarrow \qquad 
\nwarrow
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\hookleftarrow&amp;nbsp; \longmapsto \hookrightarrow \iff \leadsto&lt;/font&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются экзотические стрелки&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\dashleftarrow \dashrightarrow&amp;nbsp; \multimap \leftleftarrows \rightrightarrows \upuparrows \leftrightarrows \rightleftarrows \downdownarrows \Lleftarrow \Rrightarrow&amp;nbsp; \upharpoonleft \twoheadleftarrow \twoheadrightarrow \upharpoonright \leftarrowtail&amp;nbsp; \rightarrowtail \downharpoonleft\leftrightharpoons \downharpoonright \Lsh \Rsh \rightsquigarrow \looparrowleft \looparrowright \leftrightsquigarrow\curvearrowleft \curvearrowright \circlearrowleft \circlearrowright&amp;nbsp; &amp;nbsp; &lt;/font&gt;
&lt;p&gt;&lt;b&gt; поддерживается&lt;/b&gt; - &lt;font color=&quot;#2a52be&quot;&gt; \rightleftharpoons&lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Crightleftharpoons%20%20%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\rightleftharpoons  
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются отрицательные стрелки&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\nleftarrow \nrightarrow \nleftrightarrow\nLeftarrow&amp;nbsp; \nRightarrow&amp;nbsp; \nLeftrightarrow&lt;/font&gt;
&lt;p&gt;==Неклассифицированные символы==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\aleph&amp;nbsp; \emptyset \infty \Re \angle \exists \sharp \bot \flat \spadesuit \forall \nabla &lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%20%20%20%0A%5Caleph%20%5Cqquad%20%0A%5Cemptyset%20%5Cqquad%0A%5Cinfty%20%20%5Cqquad%0A%5CRe%20%5Cqquad%0A%5Cangle%20%5Cqquad%0A%5Cexists%20%5Cqquad%0A%5Csharp%5Cqquad%0A%5Cbot%20%5Cqquad%20%0A%5Cflat%5Cqquad%0A%5Cspadesuit%20%20%5Cqquad%0A%5Cforall%20%20%5Cqquad%0A%5Cnabla%20%20%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]   
\aleph \qquad 
\emptyset \qquad
\infty  \qquad
\Re \qquad
\angle \qquad
\exists \qquad
\sharp\qquad
\bot \qquad 
\flat\qquad
\spadesuit  \qquad
\forall  \qquad
\nabla  
[/cht]&quot; /&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\surd \clubsuit \hbar \natural \top \neg \triangle \Im \partial \wp \ell \prime &lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%20%20%20%0A%5Csurd%20%20%5Cqquad%0A%5Cclubsuit%20%20%5Cqquad%0A%5Chbar%20%20%5Cqquad%20%0A%5Cnatural%20%20%20%5Cqquad%0A%5Ctop%20%5Cqquad%0A%5Cneg%20%20%5Cqquad%0A%5Ctriangle%20%20%5Cqquad%0A%5CIm%20%20%5Cqquad%0A%5Cpartial%20%20%20%5Cqquad%0A%5Cwp%20%20%5Cqquad%0A%5Cell%20%20%5Cqquad%0A%5Cprime%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]   
\surd  \qquad
\clubsuit  \qquad
\hbar  \qquad 
\natural   \qquad
\top \qquad
\neg  \qquad
\triangle  \qquad
\Im  \qquad
\partial   \qquad
\wp  \qquad
\ell  \qquad
\prime
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\jmatha \mhob \Boxb \Diamondb \heartsuit \lnot \diamondsuit \imatha &lt;/font&gt;
&lt;p&gt;==Неклассифицированные спецсимволы==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\dag \ddag \P \S &lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cdag%20%5Cqquad%0A%5Cddag%20%5Cqquad%0A%5CP%20%5Cqquad%20%0A%5CS%20%5Cqquad%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\dag \qquad
\ddag \qquad
\P \qquad 
\S \qquad
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\copyright \pounds \checkmark \circledR \maltese &lt;/font&gt;
&lt;p&gt;==Дополнительные неклассифицированные спецсимволы==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;\angle \hbar &lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cangle%20%5Cqquad%0A%5Chbar%20%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\angle \qquad
\hbar 
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\complement&amp;nbsp; \measuredangle \backprime  \diagdown&amp;nbsp; \mho \Bbbk  \diagup \nexists \bigstar \eth \sphericalangle \blacklozenge \Finv \square \blacksquare \Game \triangledown \blacktriangle \varnothing \blacktriangledown \hslash \vartriangle \circledS \lozenge&lt;/font&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются буквы иврита&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\beth \daleth \gimel &lt;/font&gt;
&lt;p&gt;==Надстрочные и подстрочные знаки==&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Шляпки и тильды&lt;/b&gt; (до трех символов)&lt;font color=&quot;#2a52be&quot;&gt;\widetilde \widehat &lt;/font&gt;
&lt;p&gt;Пример:
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cwidetilde%7Bxyz%7D%20%5Cquad%20%5Cwidetilde%7BXYZ%7D%0A%5Cquad%20%5Cwidehat%7Bf%2Ag%7D%3D%5Chat%20f%5Ccdot%5Chat%20g%20%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\widetilde{xyz} \quad \widetilde{XYZ}
\quad \widehat{f*g}=\hat f\cdot\hat g 
[/cht]&quot; /&gt;&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\widetilde{xyz} \quad \widetilde{XYZ}\quad \widehat{f*g}=\hat f\cdot\hat g [/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Линии&lt;/b&gt;&lt;font color=&quot;#2a52be&quot;&gt;\overline \underline&lt;/font&gt;
&lt;br /&gt;Пример: &lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cunderline%7Bm%2Bn%7D%20%5Cqquad%0A%5Coverline%7Bz%7D%2B%5Coverline%7Bk%7D%20%5Cqquad%0A%5Coverline%7Bk%2Bz%7D%20%5Cqquad%0A%5Cunderline%7Ba%2Bb%2Bc%2Bd%2Be%7D%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\underline{m+n} \qquad
\overline{z}+\overline{k} \qquad
\overline{k+z} \qquad
\underline{a+b+c+d+e}
[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px; overflow: auto; overflow-x: auto; overflow-y:hidden; height:auto;&quot;&gt;&lt;pre&gt;[cht]\underline{m+n} \qquad\overline{z}+\overline{k} \qquad\overline{k+z} \qquad\underline{a+b+c+d+e}[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;не поддерживается&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\strut&lt;/font&gt;
&lt;p&gt;&lt;b&gt;Фигурные скобки&lt;/b&gt;&lt;font color=&quot;#2a52be&quot;&gt;\overbrace \underbrace&lt;/font&gt;
&lt;p&gt;Пример:
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Cunderbrace%7Ba%2Bb%2B%5Ccdots%2Bz%7D_%7B26%7D%2B1%2B%5Ccdots%2B10%7D%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\underbrace{a+b+\cdots+z}_{26}+1+\cdots+10}
[/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\underbrace{a+b+\cdots+z}_{26}+1+\cdots+10}[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
Пример:
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Coverbrace%7Ba%2Bb%2B%0A%5Ccdots%2Bz%7D%5E%7B36%7D%2B1%2B%5Ccdots%2B10%7D%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\overbrace{a+b+
\cdots+z}^{36}+1+\cdots+10}
[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\overbrace{a+b+\cdots+z}^{36}+1+\cdots+10}[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Стрелки не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\overleftarrow \overrightarrow \underrightarrow \underleftarrow&lt;/font&gt;
&lt;p&gt;==Компоновка символов в формуле==&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Часть формулы над строкой с формулой&lt;/b&gt;&lt;font color=&quot;#2a52be&quot;&gt; \stackrel&lt;/font&gt;
&lt;br /&gt;Пример:
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5C%28x%5E2%5Cstackrel%7B%5Cmathrm%7Bdef%7D%7D%7B%3D%7Dx%5Ccdot%20x%5C%29%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\(x^2\stackrel{\mathrm{def}}{=}x\cdot x\)
[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\(x^2\stackrel{\mathrm{def}}{=}x\cdot x\)[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Индексы над и под формулой&lt;/b&gt;&lt;font color=&quot;#2a52be&quot;&gt; \overset \underset&lt;/font&gt;
&lt;p&gt;Пример:
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5C%28%20%5Coverset%7B%2A%7D%7BX%7D%20%5Cquad%20%5Cunderset%7B%2A%7D%7BX%7D%0A%5Cquad%20%5Coverset%7Ba%7D%7B%5Cunderset%7Bb%7D%7BX%7D%7D%20%5C%29%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\( \overset{*}{X} \quad \underset{*}{X}
\quad \overset{a}{\underset{b}{X}} \)
[/cht]&quot; /&gt;&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\( \overset{*}{X} \quad \underset{*}{X}\quad \overset{a}{\underset{b}{X}} \)[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Стрелки с индексами не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\xleftarrow \xrightarrow&lt;/font&gt;
&lt;br /&gt;&lt;b&gt;Биномиальные коэфициенты AMS не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\binom, \dbinom \tbinom&lt;/font&gt;
&lt;br /&gt;&lt;b&gt;Редкие математические символы не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\varointclockwise \fint \lambdabar \varg \varv \varw \vary&lt;/font&gt;
&lt;p&gt;==Математические функции==
&lt;br /&gt;&lt;font color=&quot;#2a52be&quot;&gt;\arccos \cos \csc \hom \log \tan
&lt;br /&gt;\arcsin \cosh \deg \ker \sec \tanh
&lt;br /&gt;\arctan \cot \dim \lg \sin
&lt;br /&gt;\arg \coth \exp \ln \sinh&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Carccos%20%5Ccos%20%5Ccsc%20%5Chom%20%5Clog%20%5Ctan%0A%5Carcsin%20%5Ccosh%20%5Cdeg%20%5Cker%20%5Csec%20%5Ctanh%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\arccos \cos \csc \hom \log \tan
\arcsin \cosh \deg \ker \sec \tanh
[/cht]&quot; /&gt;
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5Carctan%20%5Ccot%20%5Cdim%20%5Clg%20%5Csin%0A%5Carg%20%5Ccoth%20%5Cexp%20%5Cln%20%5Csinh%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\arctan \cot \dim \lg \sin
\arg \coth \exp \ln \sinh
[/cht]&quot; /&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\arctg \ch \ctg \sh \th \arcctg \cosec \cth \tg \Prob \noda \noka \Proja\Variance \NODa \NOKa&lt;/font&gt;
&lt;p&gt;==Математические функции с пределами==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;lim sup \limsup lim \lim max \max det \det sup \sup
&lt;br /&gt;lim inf \liminf inf \inf min \min gcd \gcd Pr \Pr&lt;/font&gt;
&lt;p&gt;Пример:
&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0A%5C%5B%20%5Cmax_%7B1%5Cle%20n%5Cle%20m%7D%5Clog_2P_n%20%5C%5D%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
\[ \max_{1\le n\le m}\log_2P_n \]
[/cht]&quot; /&gt;&lt;/p&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]\[ \max_{1\le n\le m}\log_2P_n \][/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;не поддерживаются&lt;/b&gt; -&amp;nbsp; &lt;font color=&quot;#ff0000&quot;&gt;\varliminf \varlimsup \projlim \varinjlim \varprojlim&lt;/font&gt;
&lt;p&gt;==Матрицы==&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#2a52be&quot;&gt;matrix&lt;/font&gt;
&lt;p&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?cht=tx&amp;chl=%0AD%3D%5Cleft%7C%5Cmatrix%7B%0Aa_%7B11%7D%20%26%20a_%7B12%7D%20%26%20%5Cldots%20%26%20a_%7B1n%7D%5Ccr%0Aa_%7B21%7D%20%26%20a_%7B22%7D%20%26%20%5Cldots%20%26%20a_%7B2n%7D%5Ccr%0A%5Cvdots%20%26%20%5Cvdots%20%26%20%5Cddots%20%26%20%5Cvdots%5Ccr%0Aa_%7Bn1%7D%20%26%20a_%7Bn2%7D%20%26%20%5Cldots%20%26%20a_%7Bnn%7D%5Ccr%0A%7D%5Cright%7C%0A&quot; style=&quot;vertical-align: middle;&quot; alt=&quot;[cht]
D=\left|\matrix{
a_{11} &amp;amp; a_{12} &amp;amp; \ldots &amp;amp; a_{1n}\cr
a_{21} &amp;amp; a_{22} &amp;amp; \ldots &amp;amp; a_{2n}\cr
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\cr
a_{n1} &amp;amp; a_{n2} &amp;amp; \ldots &amp;amp; a_{nn}\cr
}\right|
[/cht]&quot; /&gt;
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;[cht]
D=\left|\matrix{
a_{11} &amp;amp; a_{12} &amp;amp; \ldots &amp;amp; a_{1n}\cr
a_{21} &amp;amp; a_{22} &amp;amp; \ldots &amp;amp; a_{2n}\cr
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\cr
a_{n1} &amp;amp; a_{n2} &amp;amp; \ldots &amp;amp; a_{nn}\cr
}\right|
[/cht]&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/bycircle/blog/?id=5033</guid>
  <pubDate>Sun, 20 Jun 2010 17:19:16 GMT</pubDate>
  <title>Крестики-нолики</title>
  <link>http://www.gamedev.ru/community/bycircle/blog/?id=5033</link>
  <comments>http://www.gamedev.ru/community/bycircle/forum/?id=134755</comments>
  <description>
&lt;p&gt;Дважды (или даже трижды) велосипедистый проект,&lt;/p&gt;
&lt;p&gt;1. Сама игра, крестики-нолики на поле 3x3
&lt;br /&gt;2. Веб сервер, да играть надо через браузер
&lt;br /&gt;3. Необученная нейросеть в качестве ИИ, хотя есть и идеальный ИИ, + рандомящий ИИ&lt;/p&gt;
&lt;p&gt;Вся суть была в ИИ на нейросети, но ничего хорошего получено так и не было. Написано на C, на основе какого то веб-сервера, написанного на лабах в институте. Код ужасен.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://paravozeg.narod.ru/xonet-091127.tar.gz&quot;&gt;http://paravozeg.narod.ru/xonet-091127.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;http://localhost:4321/&lt;/p&gt;
&lt;p&gt;Есть режимы игры разных ИИ между собой, выбираем активных ИИ с каждой стороны (сделав шаг с помощью этого ИИ), и жмем GenTGT. Останавливать тоже на GenTGT. Сделанные ходы записываются, и можно их использовать для обучения нейросети.&lt;/p&gt;
&lt;p&gt;Можно играть по сети, но это побочная багофича, т.к. можно ходить и за противника.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/tankwar/blog/?id=5030</guid>
  <pubDate>Sat, 19 Jun 2010 15:32:01 GMT</pubDate>
  <title>Новая демка</title>
  <link>http://www.gamedev.ru/community/tankwar/blog/?id=5030</link>
  <comments>http://www.gamedev.ru/community/tankwar/forum/?id=134733</comments>
  <category>demo</category>
  <category>gameplay</category>
  <category>tank</category>
  <description>
&lt;p&gt;На днях прикрутил тени. Простенькие, конечно, но это гораздо лучше, чем было до этого.&lt;/p&gt;
&lt;p&gt;Решил выложить новую демку.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Управление:
&lt;br /&gt;WASD или Стрелки&lt;/b&gt; - движение/ повороты
&lt;br /&gt;&lt;b&gt;ЛКМ&lt;/b&gt; - обычный выстрел текущим типом снарядов.
&lt;br /&gt;&lt;b&gt;ПКМ&lt;/b&gt; - спецвыстрел (в зависимости от того, какой активирован в данный момент).
&lt;br /&gt;&lt;b&gt;M&lt;/b&gt; - обзор всего поля битвы
&lt;br /&gt;&lt;b&gt;1&lt;/b&gt; - Переключение на простые снаряды
&lt;br /&gt;&lt;b&gt;2&lt;/b&gt; - Переключение на улучшенные снаряды
&lt;br /&gt;&lt;b&gt;3&lt;/b&gt; - Переключение на спецвыыстрел &amp;quot;Выстрел по гусеницам&amp;quot;.
&lt;br /&gt;&lt;b&gt;4&lt;/b&gt; - Переключение на спецвыстрел &amp;quot;Выстрел по слабозащищенным местам&amp;quot; 
&lt;br /&gt;&lt;b&gt;Esc&lt;/b&gt; - Меню
&lt;p&gt;&lt;b&gt;Типы снарядов и спецвыстрелов:&lt;/b&gt;
&lt;br /&gt;&lt;b&gt;Обычные снаряды&lt;/b&gt; - примечательны только своим бесконечным боезапасом.
&lt;br /&gt;&lt;b&gt;Улучшенные снаряды&lt;/b&gt; - урон увеличен в два раза. Боезапас органичен.
&lt;br /&gt;&lt;b&gt;Выстрел по гусеницам&lt;/b&gt; - При попадании временно блокирует передвижение танка. Он не может перемещаться и поворачиваться, но может вертеть башней (если она есть) и стрелять. Время перезарядки 10 сек. Применение с улучшенными снарядами не имеет смысла, поэтому при произведении данного выстрела, используются обычные снаряды, даже если активированы улучшенные.
&lt;br /&gt;&lt;b&gt;Выстрел по слабозащищенным местам&lt;/b&gt; - при расчете урона берется минимальная броня цели. Можно использовать совместно с улучшенными снарядами.
&lt;br /&gt;Время перезарядки - 5 сек.
&lt;p&gt;&lt;b&gt;Подсказка:&lt;/b&gt;
&lt;br /&gt;Урон зависит от расстояния по цели. В упор урон всегда будет максимальным, на максимальном отдалении - минимальный. Поэтому, если не удается пробить броню врага, можно попытаться выстрелить с более близкого расстояния. Это же относится и к танку игрока, так что старайтесь не подставляться под выстрелы с близкого расстояния.
&lt;br /&gt; 
&lt;br /&gt;&lt;b&gt;Желаемая обратная связь: &lt;/b&gt;
&lt;br /&gt;Впечатления от геймплея, пожелания, идеи, баги.
&lt;p&gt;Новый скрин:
&lt;br /&gt;&lt;a href=&quot;http://www.gamedev.ru/files/images/?id=55339&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/screen044-small.jpg&quot; alt=&quot;TankWar-smadows-small | Новая демка&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://rapidshare.com/files/400716423/TankWar_Demo4_.rar&quot;&gt;Демка №4&lt;/a&gt; 13.5 Mb</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/tankwar/blog/?id=5028</guid>
  <pubDate>Tue, 15 Jun 2010 20:56:02 GMT</pubDate>
  <title>Обновление. Геймплейное видео.</title>
  <link>http://www.gamedev.ru/community/tankwar/blog/?id=5028</link>
  <comments>http://www.gamedev.ru/community/tankwar/forum/?id=134602</comments>
  <category>gameplay</category>
  <category>TankWar</category>
  <description>
&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Долго я ничего не выкладывал. Но проект жив, здоров и вполне себе развивается :) Темпы, правда, несколько замедлились, и первоначальные сроки прошли, но это все неважно.&lt;/p&gt;
&lt;p&gt;За прошедшее время активней всего докручивался геймплей. 
&lt;br /&gt;Добавлена возможность более менее удобного скриптования каждой миссии по отдельности. Теперь можно не ограничиваться простым &amp;quot;убей всех&amp;quot;, а сочинять задания более гибко. 
&lt;br /&gt;Также добавлены особые способности и боеприпасы, которые немного разнообразят бои в тактическом плане.
&lt;br /&gt;Понемногу начал работать и над артом. Решил моделирование и unwrap взять на себя. С этой задачей я пока могу справляться, учитывая не очень-то большую сложность моделей по задумке. Никаких HiPoly, никаких персонажей. Только техника, растения и всякие здания.&lt;/p&gt;
&lt;p&gt;Добавил, наконец-то, поддержку звуков и музыки. Использую Squall. Только звуковая часть наполнения игры пока полностью является &amp;quot;белым пятном&amp;quot;. Сейчас использую сэмплы, найденные на необъятных просторах интернета. &lt;/p&gt;
&lt;p&gt;Немного геймплейного видео:&lt;/p&gt;
&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/lAFllfCyS14&amp;amp;hl=ru&amp;amp;fs=1&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;embed src=&quot;http://www.youtube.com/v/lAFllfCyS14&amp;amp;hl=ru&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br /&gt;&lt;b&gt;52 Мб&lt;/b&gt;
&lt;p&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/7IVc1OAY4P4&amp;amp;hl=ru&amp;amp;fs=1&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;embed src=&quot;http://www.youtube.com/v/7IVc1OAY4P4&amp;amp;hl=ru&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br /&gt;&lt;b&gt;28 Мб&lt;/b&gt;
&lt;p&gt;&lt;b&gt;И новые скрины:&lt;/b&gt;
&lt;br /&gt;&lt;a href=&quot;http://www.gamedev.ru/files/images/?id=55227&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/screen-01-small.jpg&quot; alt=&quot;tankwar screen10-small | Обновление. Геймплейное видео.&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://www.gamedev.ru/files/images/?id=55229&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/screen-02-small.jpg&quot; alt=&quot;tankwar screen11 small | Обновление. Геймплейное видео.&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;a href=&quot;http://www.gamedev.ru/files/images/?id=55231&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/screen-03-small.jpg&quot; alt=&quot;tankwar screen 12-small | Обновление. Геймплейное видео.&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://www.gamedev.ru/files/images/?id=55233&quot;&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/screen-04-small.jpg&quot; alt=&quot;tankwar screen13-small | Обновление. Геймплейное видео.&quot; /&gt;&lt;/a&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/community/nsfgd/blog/?id=5024</guid>
  <pubDate>Fri, 11 Jun 2010 17:54:11 GMT</pubDate>
  <title>Linus Torvalds on C++, again</title>
  <link>http://www.gamedev.ru/community/nsfgd/blog/?id=5024</link>
  <comments>http://www.gamedev.ru/community/nsfgd/forum/?id=135075</comments>
  <description>
&lt;p&gt;&lt;a href=&quot;http://www.realworldtech.com/forums/index.cfm?action=detail&amp;amp;id=110549&amp;amp;threadid=110549&amp;amp;roomid=2&quot;&gt;http://www.realworldtech.com/forums/index.cfm?action=detail&amp;amp;i&amp;hellip; &amp;amp;roomid=2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ctrl+F, Linus Torvalds, наслаждайтесь.&lt;/p&gt;
&lt;p&gt;Заранее добавлю, что в теме замечен и Walter Bright, автор языка D, являющегося попыткой сделать С++ &amp;quot;правильно&amp;quot;.&lt;/p&gt;
&lt;p&gt;А теперь мои размышления на эту тему:&lt;/p&gt;
&lt;p&gt;Помню как ясный день и сейчас свой опыт ковыряния опен сорс С++ проектов и схожих Си проектов одновременно. Была у меня такая необходимость. И как вы догадываетесь большинство опен сорс программ написаны ленивой ручкой в свободное от повседневных тягот время, а поэтому не содержат ни документации (хотя она чаще есть, чем ее нет, если проект хоть чуточку используется людьми), ни комментариев (с этим вообще все плохо). Но задача есть, разобраться с кодом нужно, поэтому вооружаемся grep&apos;ом на перевес и начинаем активно смотреть, что же в коде происходит. Вы когда-нибудь пробовали такое делать с C++ кодом? Только честно. Ой, а тут метод, а какому классу он принадлежит? А что это за аргументы у функции, не вызывают ли они перегруженный вариант случайно? Ой, а этот метод состоит из одной строчки и вызывает такой метод у другого класса, о боже мой, куда я попал. Ну и так далее. Не сложно догадаться, что понять происходящее внутри Си программы значительно проще. А теперь вспомните великую мудрость, что программа чаще читается, чем пишется и задумайтесь, для чего все эти упоминаемые в треде С++ фичи, которые мы все так любим? Ведь они для того, чтобы проще писать код, не так ли? А куда дели мудрость?&lt;/p&gt;
&lt;p&gt;Однако, Линус взамен С++ предлагает взять нам мифический &amp;quot;real language with real features&amp;quot;, вот только его не существует. Такой вот де-факто парадокс, если хочется всех этих самых фич, то С++ лучшее, что есть на сегодня по многим параметрам. А среди немаловажных свойств такого несуществующего языка должны быть: хорошие компиляторы, сопутствующие библиотеки, человеческие ресурсы aka программисты и прочее прочее, далеко не прямо связанное с самим языком. Вспомните такой опен сорс проект игровой направленности как OpenMW (открытая реализация движка TES III: Morrowing), ведь они решили делать переход с D на C++ именно по причинам приведенным выше. Линус одобряет Go от гугла и напоминает, что он вроде хороший, но не зря же его назвали экспериментальным и он чертовски прав! Кто ж его не одобрит? Молодцы товарищи Кен Томпсон и Роб Пайк (обратите внимание как хорошо русское слово &amp;quot;молодец&amp;quot; описывает ситуацию имея в своем составе корень &amp;quot;молод&amp;quot;). Рано еще, рано, но ведь когда-нибудь это должно свершиться! &amp;quot;Дайте нам новый язык, чтобы был как Си, но для современных нужд!&amp;quot; - скандируют массы. Где же ты, о великий создатель языка будущего?!&lt;/p&gt;
&lt;p&gt;А нету... А жаль...&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://iphone.gamedev.ru/blog/iPhone_Promotion</guid>
  <pubDate>Thu, 10 Jun 2010 14:40:41 GMT</pubDate>
  <title>Рекламное видео продвижения iPhone</title>
  <link>http://iphone.gamedev.ru/blog/iPhone_Promotion</link>
  <category>видео</category>
  <category>реклама</category>
  <description>
&lt;p&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YZpTjqfVa5c&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=ru_RU&amp;amp;feature=player_embedded&amp;amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/YZpTjqfVa5c&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=ru_RU&amp;amp;feature=player_embedded&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;Connecting people, говорят :)&lt;/p&gt;</description>
</item>
</channel>
</rss>
