<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
  <title>Создание игр: как cделать игру, программирование игры, DirectX, OpenGL.</title>
  <link>http://www.gamedev.ru/</link>
  <description>Как сделать игру: программирование, DirectX, OpenGL, создание графического контента, игровой дизайн, события игровой индустрии, поиск работы и сотрудников, обсуждение игровых проектов.</description>
  <language>ru</language>
  <generator>http://skif.qrim.ru/</generator>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/metro2033_game</guid>
  <pubDate>Fri, 12 Mar 2010 10:40:14 GMT</pubDate>
  <title>Системные требования игры «Метро 2033»</title>
  <link>http://www.gamedev.ru/industry/news/metro2033_game</link>
  <comments>http://www.gamedev.ru/industry/forum/?id=131179</comments>
  <category>События</category>
  <category>4A Games</category>
  <category>метро 2033</category>
  <description>
&lt;p&gt;Выход игры &amp;laquo;Метро 2033&amp;raquo; запланирован на 19 марта 2010 года. Компания THQ опубликовала системные требования боевика...&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Минимальные системные требования:
&lt;ul&gt;
&lt;li&gt;Процессор Core 2 Duo+&lt;/li&gt;
&lt;li&gt;Графическая карта GeForce 8800, GeForce GT220+&lt;/li&gt;
&lt;li&gt;1 Гб ОЗУ&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;Рекомендуемые системные требования:
&lt;ul&gt;
&lt;li&gt;Процессор Quad Core 3 ГГц+&lt;/li&gt;
&lt;li&gt;Графическая карта GeForce GTX 260&lt;/li&gt;
&lt;li&gt;2 Гб ОЗУ&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;Оптимальные системные требования:
&lt;ul&gt;
&lt;li&gt;Процессор Core i7&lt;/li&gt;
&lt;li&gt;Графическая карта NVIDIA GeForce GTX 480 и 470&lt;/li&gt;
&lt;li&gt;До 8 Гб ОЗУ&lt;/li&gt;
&lt;li&gt;Быстрый жесткий диск или SSD&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;Как видите, насладится всеми эффектами игры не каждому под силу.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/tip/Luabind_Visual_Studio</guid>
  <pubDate>Fri, 12 Mar 2010 00:10:12 GMT</pubDate>
  <title>Luabind+Visual Studio 2010</title>
  <link>http://www.gamedev.ru/code/tip/Luabind_Visual_Studio</link>
  <category>Общее</category>
  <category>Lua</category>
  <category>luabind</category>
  <category>Visual Studio</category>
  <category>скрипты</category>
  <description>
&lt;p&gt;Установил я вчера Microsoft Visual Studio 2010 RC. И начал переносить свой проект использующий luabind на новую Visual Studio. Как оказалось, luabind v0.9 не скомпилировался под ней.&lt;/p&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;c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(163) : error C2
440: &apos;initializing&apos; : cannot convert from &apos;int&apos; to &apos;void *&apos;
        Conversion from integral type to pointer type requires reinterpret_cast,
 C-style cast or function-style cast
        c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(247) :
see reference to function template instantiation &apos;std::_Pair_base&amp;lt;_Ty1,_Ty2&amp;gt;::_P
air_base&amp;lt;_Ty,_Ty&amp;gt;(_Other1 &amp;amp;&amp;amp;,_Other2 &amp;amp;&amp;amp;)&apos; being compiled
        with
        [
            _Ty1=void *,
            _Ty2=int,
            _Ty=int,
            _Other1=int,
            _Other2=int
        ]
        C:\luabind-0.9\luabind-0.9\luabind/detail/object_rep.hpp(58) : see refer
ence to function template instantiation &apos;std::pair&amp;lt;_Ty1,_Ty2&amp;gt;::pair&amp;lt;int,int&amp;gt;(_Ot
her1 &amp;amp;&amp;amp;,_Other2 &amp;amp;&amp;amp;)&apos; being compiled
        with
        [
            _Ty1=void *,
            _Ty2=int,
            _Other1=int,
            _Other2=int
        ]
c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(163) : error C2
439: &apos;std::_Pair_base&amp;lt;_Ty1,_Ty2&amp;gt;::first&apos; : member could not be initialized
        with
        [
            _Ty1=void *,
            _Ty2=int
        ]
        c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(166) :
see declaration of &apos;std::_Pair_base&amp;lt;_Ty1,_Ty2&amp;gt;::first&apos;
        with
        [
            _Ty1=void *,
            _Ty2=int
        ]&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;&quot;&gt;&lt;pre&gt;std::pair&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;*,&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;*&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;mem, &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
или
std::pair&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;*, &lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;&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;&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;Таких мест в исходниках немного, а суть ошибки оказалась довольно простой. Все что нужно, это во всех местах, где встречаются такие вещи вместо 0 написать (void*)0.&lt;/p&gt;
&lt;p&gt;&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;std::pair&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;*,&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;*&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;mem, &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;&lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
или
std::pair&lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt;*, &lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;&amp;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;void&lt;/span&gt;*&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;&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;После таких изменений luabind будет работать.&lt;/p&gt;
&lt;p&gt;Можете ничего не делать, а сразу качать luabind с моими изменениями.&lt;/p&gt;
&lt;p&gt;Также я там изменил Jamroot, чтобы можно было компилировать без добавления переменных окружения в windows
&lt;br /&gt;(если уже установлены Boost и &lt;a href=&quot;http://www.gamedev.ru/code/terms/Lua&quot; title=&quot;Lua (Скриптовый язык Lua)&quot;&gt;Lua&lt;/a&gt; в стандартные свои папки C:\Boost и C:\program files\lua).&lt;/p&gt;
&lt;p&gt;Для компиляции можно сразу запустить добавленный мной батник (не хватает папки tools, ее взять из boosta):
&lt;br /&gt;&lt;b&gt;&lt;a href=&quot;http://www.gamedev.ru/files/?id=52353&quot;&gt;luabind под Visual Studio 2010 RC&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/?id=4869</guid>
  <pubDate>Fri, 12 Mar 2010 00:00:01 GMT</pubDate>
  <title>Вебинар «Visual Studio 2010 and .NET 4.0».</title>
  <link>http://www.gamedev.ru/code/news/?id=4869</link>
  <category>Общее</category>
  <category>C#</category>
  <category>Visual Studio</category>
  <category>.NET</category>
  <description>
&lt;p&gt;15 марта 2010 года интернет-супермаркет ПО Softkey, компания Microsoft и Центр компьютерного обучения &amp;laquo;Специалист&amp;raquo; проводят бесплатный онлайн-семинар, в рамках которого будут продемонстрированы изменения и новые возможности Visual Studio 2010 and .NET 4.0. Вебинар будет полезен разработчикам, архитекторам ПО, руководителям проектов и IT-отделов, IT-специалистам.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Дата: 15 марта 2010 года.
&lt;br /&gt;Время: с 15:00 до 16:00 часов (мск).
&lt;br /&gt;Тема: &lt;b&gt;&amp;laquo;Visual Studio 2010 and .NET 4.0&amp;raquo;&lt;/b&gt;.
&lt;br /&gt;Докладчик: Александр Кораблин, преподаватель Центра компьютерного обучения &amp;laquo;Специалист&amp;raquo; при МГТУ им. Н.Э.Баумана.&lt;/p&gt;
&lt;p&gt;Зарегистрироваться на вебинар можно по ссылке:
&lt;br /&gt;&lt;a href=&quot;http://www.softkey.ru/webinars/detail.php?ID=1361&quot;&gt;http://www.softkey.ru/webinars/detail.php?ID=1361&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Само мероприятие состоится на &lt;a href=&quot;http://217.74.43.246/r87585847/&quot;&gt;специальной площадке Softkey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;В программе вебинара:
&lt;br /&gt;• новые возможности инструментов для работы на платформе .Net 4.0;
&lt;br /&gt;• изменения в языках С# и VB.Net (динамические типы, ковариантность, именованные параметры); 
&lt;br /&gt;• VS 2010 - сравнение версий VS, расширяемость, удобство использования;
&lt;br /&gt;• изменения в самой платформе: CLR 4.0, безопасность, библиотека классов. &lt;/p&gt;
&lt;p&gt;Для корректного воспроизведения звука и изображения на вашем компьютере должны быть:
&lt;br /&gt;• доступ в Интернет;
&lt;br /&gt;• программа Adobe Flash Player 8 или более новой версии;
&lt;br /&gt;• наушники или колонки;
&lt;br /&gt;• микрофон (по возможности).
&lt;br /&gt;• также необходимо открыть порт TCP 1935 на файерволе.&lt;/p&gt;
&lt;p&gt;Более подробную информацию о вебинаре вы можете найти на сайте Softkey.ru или получить у нашего специалиста&lt;/p&gt;
&lt;p&gt;Анна Негляд-Лукьянова, PR-менеджер,
&lt;br /&gt;тел.: +7 (495) 980-72-50 (доб. 3216),
&lt;br /&gt;e-mail: nl@softkey.ru&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/?id=4868</guid>
  <pubDate>Thu, 11 Mar 2010 23:50:29 GMT</pubDate>
  <title>III Международная конференция разработчиков онлайн игр на Украине</title>
  <link>http://www.gamedev.ru/industry/news/?id=4868</link>
  <category>События</category>
  <category>Разработка игр</category>
  <category>онлайн игры</category>
  <description>
&lt;p&gt;24 апреля 2010 года в Киеве состоится III Международная конференция разработчиков онлайн игр на Украине.&lt;/p&gt;
&lt;p&gt;В конференции примут участие представители ведущих украинских и зарубежных компаний, которые занимаются разработкой игр. Доклады и презентации будут посвящены различным актуальным тематикам.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Представляем некоторые из них:
&lt;br /&gt;•&amp;nbsp; Продвижение онлайн игр в соц. сетях;
&lt;br /&gt;•&amp;nbsp; Альтернативные технологии разработки онлайн игр;
&lt;br /&gt;•&amp;nbsp; Новые направления для браузерных игр (развите, маркетинг) на стыке уже сущствующих ниш (браузерные игры и социальные сети);
&lt;br /&gt;•&amp;nbsp; Браузерные игры и мобильные телефоны;
&lt;br /&gt;•&amp;nbsp; Разработка игр для социальных сетей;
&lt;br /&gt;•&amp;nbsp; Обучающие онлайн игры;
&lt;br /&gt;•&amp;nbsp; Современные финансовые инструменты для работы на внутреннем IT рынке Украины. Формы оптимальной организационно-правовой структуры игровой компании, методы оптимизации издержек на налоги, подготовка компании для продажи;
&lt;br /&gt;•&amp;nbsp; Большие браузерные проекты – сильные и слабые стороны;
&lt;br /&gt;•&amp;nbsp; Онлайн игра как дополнительный аргумент повышения доходности и популярности социальной сети и др.
&lt;br /&gt;Впервые в рамках мероприятия будет организована ярмарка вакансий, которая сможет стать для многих соискателей и работодателей началом плодотворного сотрудничества.&lt;/p&gt;
&lt;p&gt;Немного статистики для спонсоров и партнеров III Конференции разработчиков игр:
&lt;br /&gt;•&amp;nbsp; II Конференцию в октябре 2009 года посетило 250 человек (70% &amp;mdash; владельцы и топ-менеджеры компаний);
&lt;br /&gt;•&amp;nbsp; Представители следующих компаний присутствовали на Конференции: LG Electronics, Kaspersky, Alawar Entertainment,Inc., Абсолютист, Бигмир-Интернет, Aerohills, Ukr.net, Пилот Капитал, eVenture Capital Partners, Casual Games Association, Лаки Софт, Албимедиа, Arkadium,Ink, Stanfy, СМС Онлайн, Pipe Studio, радио &amp;laquo;Эра&amp;raquo;, Joy Team, Uniggames, DJ Games, АВС money, Pilot Group, Антико и много других.
&lt;br /&gt;•&amp;nbsp; В течении 4 месяцев (от подготовки до проведения) сайт Конференции посетило 76 039 уникальных посетителей из Украины, России, Латвии, Молдовы, Германии, Беларуси, Эстонии, Израиля, США, Италии, Испании, Швейцарии, Австрии, которые совершили 331 971 просмотров страниц;&lt;/p&gt;
&lt;p&gt;По всем вопросам можно обращаться:
&lt;br /&gt;Наталия Сапьян,
&lt;br /&gt;Директор по развитию компании&amp;nbsp; &amp;laquo;Art4Art Entertainment&amp;raquo;
&lt;br /&gt;Моб. +38-067-239-83-56
&lt;br /&gt;E-mail: n.sapyan@art4art.kiev.ua
&lt;br /&gt;Skype: nataly.sapyan&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.confog.org.ua&quot;&gt;www.confog.org.ua&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/mobile/news/armobi-mgates-gamedev</guid>
  <pubDate>Wed, 10 Mar 2010 19:34:11 GMT</pubDate>
  <title>ArMOBI: запуск мобильной браузерной игровой платформы mGates</title>
  <link>http://www.gamedev.ru/mobile/news/armobi-mgates-gamedev</link>
  <category>Общее</category>
  <category>MMO</category>
  <category>MMORPG</category>
  <category>mobile</category>
  <category>wap</category>
  <category>браузерные игры</category>
  <category>мобильные игры</category>
  <category>он-лайн игры</category>
  <description>
&lt;p&gt;ArMobi сообщает о запуске игровой платформы mGates, и объявляет начало регистраций участников партнерской программы.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.mgates.ru/skins/web/images/logo.gif&quot; align=&quot;left&quot; style=&quot;padding: 5px&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://wap.mgates.ru&quot; rel=&quot;nofollow&quot;&gt;mGates.ru&lt;/a&gt; – это WAP-портал браузерных on-line игр, объединяющий мобильные ММО-игры. Уникальность проекта не только в мобильности, но и в единстве валюты, аккаунта и баланса игрока для всех игр портала (на данный момент игрокам доступно 5 браузерных игр, 2 из которых добалены в начале марта). Динамика роста регистраций и активных игроков свидетельствует о своевременности проекта в среде приверженцев данного игрового жанра. С ноября 2009 года проект находился в тестировании и дорабатывался в рабочем режиме, и на момент публикации данного материала, количество пользовательских регистраций составило 98 906, из которых активными игроками стали 49 220 пользователя.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Источником монетизации являются платные сервисы в каждой игре портала, воспользоваться которыми имеют возможность все зарегистрированные пользователи. Несмотря на бесплатность игр, платные сервисы востребованы активными игроками. Об этом говорит статистика, приобретенной пользователями, игровой валюты - arm. С момента бета-теста игроками было приобретено 1 743 206 arm, что уже позволяет считать проект коммерчески успешным.&lt;/p&gt;
&lt;p&gt;О партнерской программе mGates:&lt;/p&gt;
&lt;p&gt;Программа ориентирована на 2 категории партнеров: разработчики игр и wap-площадки.&lt;/p&gt;
&lt;p&gt;Разработчики игр, разместив свою игру на портале mGates, получают непосредственный доступ к многотысячной активной целевой аудитории, гибкую систему распределения дохода и вменяемый API. Весь сопутствующий функционал (форумы, чаты, личные сообщения, пополнение баланса, билинг и т.п.) поддерживаются специалистами ArMOBI.&lt;/p&gt;
&lt;p&gt;За владельцами wap-площадок, разместившим код со ссылкой на mGates.ru, навсегда закрепляются пришедшие по ней игроки, а соответственно и процент со всего сгенерированного ими дохода, в любой из игр портала.&lt;/p&gt;
&lt;p&gt;Условия партнерской программы не запрещают разработчикам игр одновременно выступать и в качестве wap-площадки, что увеличивает процент прибыли, позволяя зарабатывать от участия закрепленных за партнером игроков, во всех играх портала mGates.&lt;/p&gt;
&lt;p&gt;Ссылка для регистрации в партнерской программе проекта mGates: &lt;a href=&quot;http://www.mgates.ru&quot;&gt;&lt;a href=&quot;http://www.mgates.ru&quot;&gt;http://www.mgates.ru&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/siggraph-students-2010</guid>
  <pubDate>Wed, 10 Mar 2010 19:29:41 GMT</pubDate>
  <title>SIGGRAPH приглашает студентов</title>
  <link>http://www.gamedev.ru/industry/news/siggraph-students-2010</link>
  <category>События</category>
  <category>SIGGRAPH</category>
  <description>
&lt;p&gt;ACM SIGGRAPH приглашает студентов и учащихся школ принять участие в конкурсе проектов. Предполагается три направления: Изображения, Анимации и Интерактивные работы. Последний день приёма работ – 8 Мая. К участию также допускаются недавние выпускники.&lt;/p&gt;
&lt;p&gt;Больше информации можно будет получить &lt;a href=&quot;http://education.siggraph.org/students/competitions/call-2010&quot;&gt;по ссылке&lt;/a&gt;.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/unity-3d-3-0</guid>
  <pubDate>Wed, 10 Mar 2010 19:28:22 GMT</pubDate>
  <title>Unity 3D расширяет границы</title>
  <link>http://www.gamedev.ru/code/news/unity-3d-3-0</link>
  <category>android</category>
  <category>PS3</category>
  <category>Unity</category>
  <category>XBox 360</category>
  <description>
&lt;p&gt;Новая итерация популярного движка &lt;a href=&quot;http://www.gamedev.ru/code/terms/Unity&quot; title=&quot;Unity (Unity3D)&quot;&gt;Unity 3D 3.0&lt;/a&gt; обещает работать на Play Station 3, iPad и Android OS. Таким образом, по заявлениям разработчиков, Unity 3D станет движком, нацеленным на самый большой кусок рынка игр (по количество проданных устройств). Кроме новых трёх в зачёт движку идут уже поддерживаемые платформы Windows, Mac, iPhone и Wii, к которым должен добавиться XBox 360.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/gizmosdk-2-5</guid>
  <pubDate>Wed, 10 Mar 2010 19:27:16 GMT</pubDate>
  <title>GizmoSDK 2.5</title>
  <link>http://www.gamedev.ru/code/news/gizmosdk-2-5</link>
  <category>GizmoSDK</category>
  <description>
&lt;p&gt;GizmoSDK &amp;mdash; побочный продукт шведской компании Saab Training Systems AB, занимающейся производством тренировочных систем для армии, обновился до версии 2.5. Новая версия включает поддержку Rapid 3D Mapping, новые геометрические шейдеры для отрисовки леса и оптимизации для отрисовки прозрачных поверхностей. Стоимость лицензии составляет 1000$ за одно рабочее место разработчика.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.gizmosdk.com/&quot;&gt;http://www.gizmosdk.com/&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/terms/Sid_Meier</guid>
  <pubDate>Tue, 09 Mar 2010 19:40:57 GMT</pubDate>
  <title>Сид Мейер</title>
  <link>http://www.gamedev.ru/industry/terms/Sid_Meier</link>
  <category>люди</category>
  <description>
&lt;p&gt;Сид Мейер (полное имя Сидней К. Мейер) – канадский программист и игровой дизайнер, известный серией популярных стратегических игр, вложивший немало в развитие индустрии компьютерных игр.&lt;/p&gt;
&lt;p&gt;Первая игра Сида, в которой он отмечен в титрах – Spitfire Ace, в которой он выполнял одновременно роли программиста и игрового дизайнера.&amp;nbsp; Постепенно он ушёл от программирования и сосредоточился именно на игровом дизайне.&lt;/p&gt;
&lt;p&gt;После серии симуляторов военной техники Сид выпускает игру &amp;laquo;Sid Meier’s Pirates!&amp;raquo;. В этой игре впервые его имя попадает в название самой игры, что со временем становится практически традицией. Это отражает авторский дизайн, и становится практически торговой маркой. Сам же симулятор пиратов в 1988 году получает награду &amp;laquo;Action Game of the Year&amp;raquo;. Популярность игры привела к созданию римейка в 2004 году.&lt;/p&gt;
&lt;p&gt;Наибольшую известность Сиду приносит серия игры &amp;laquo;Цивилизация&amp;raquo;. Изначально игра базировалась на идеях настольной игры с тем же названием. Однако позже уже настольная игра стала поспевать за компьютерной игрой. Пятая версия &amp;laquo;Цивилизации&amp;raquo; готовится к выходу в 2010 году.&lt;/p&gt;
&lt;p&gt;Также Сид приложил руку к созданию такого шедевра как коллекционная карточная игра &amp;laquo;Magic: The Gathering&amp;raquo;.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/art/news/xsens-image-metrics</guid>
  <pubDate>Tue, 09 Mar 2010 19:16:05 GMT</pubDate>
  <title>Xsens и Image Metrics объединяют усилия</title>
  <link>http://www.gamedev.ru/art/news/xsens-image-metrics</link>
  <category>animation</category>
  <category>Image Metrics</category>
  <category>Motion Capture</category>
  <category>Xsens</category>
  <description>
&lt;p&gt;Компания &lt;a href=&quot;http://www.xsens.com/&quot;&gt;Xsens&lt;/a&gt;, работающая над решениями по захвату движения, объединяет усилия с компанией &lt;a href=&quot;http://www.image-metrics.com/&quot;&gt;Image Metrics&lt;/a&gt;, которая решает аналогичную задачу для лицевых анимаций. Новый комплексный продукт будет способен захватывать одновременно и движения тела и эмоции на лице, как это было сделано для фильма Avatar. Правда, в отличии от технологии, использованной для фильма, решение от Image Metrics не требует маркеров на лице.&amp;nbsp; Основная цель симбиоза – предоставить для разработчиков игр технологию, которая бы позволяла быстро и качество получать анимации.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/vision-8-new-features</guid>
  <pubDate>Tue, 09 Mar 2010 19:11:56 GMT</pubDate>
  <title>Движок Vision 8 обрастает фичами</title>
  <link>http://www.gamedev.ru/code/news/vision-8-new-features</link>
  <category>Графика</category>
  <category>Intel</category>
  <category>PC</category>
  <category>PS3</category>
  <category>Trinigy</category>
  <category>Wii</category>
  <category>Xbox</category>
  <description>
&lt;p&gt;Разработчик движка Vision 8, компания Trinigy, в новой итерации движка добавляет возможность играть из окна браузера. Похоже, интерес к рынку онлайн-игр с возможностью играть из браузера не даёт покоя всем производителям игровых движков, и в Trinigy не смогли остаться в стороне от модного тренда.&lt;/p&gt;
&lt;p&gt;Кроме браузера PC, движок поддерживает кросс-платформенную разработку для Wii, PS3, Xbox 360 и собственно для PC. Кроме этого движок получит встроенную поддержку &lt;a href=&quot;http://www.gamedev.ru/code/terms/Havok&quot; title=&quot;Havok&quot;&gt;Havok&lt;/a&gt;, возможность использовать DirectX11 и научиться распределять нагрузку по всем ядрам даже новых 6-ядерных процессоров Intel.&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/GR9oMoQAy08&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&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/GR9oMoQAy08&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&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;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/gpu-pro-2-authors</guid>
  <pubDate>Tue, 09 Mar 2010 19:09:57 GMT</pubDate>
  <title>Спешите стать авторами книги GPU Pro 2!</title>
  <link>http://www.gamedev.ru/code/news/gpu-pro-2-authors</link>
  <category>Графика</category>
  <category>Direct3D</category>
  <category>GPU</category>
  <category>OpenGL</category>
  <description>
&lt;p&gt;До 17-го мая у вас ещё есть шанс подать заявку на участие в готовящемся издании книги &amp;laquo;GPU Pro 2&amp;raquo;. В книге будут собраны прогрессивные техники рендеринга, работающие в режиме реального времени при использовании API Direct3D и/или &lt;a href=&quot;http://www.gamedev.ru/code/terms/OpenGL&quot; title=&quot;OpenGL: Open Graphics Library&quot;&gt;OpenGL&lt;/a&gt;. Темы для статей в книгу:
&lt;ul&gt;- Управление геометрией,
&lt;br /&gt;- Техники отрисовки,
&lt;br /&gt;- Программирование мобильных устройств,
&lt;br /&gt;- Эффекты на уровне манипуляцией с изображением,
&lt;br /&gt;- Тени,
&lt;br /&gt;- Архитектура 3D движков,
&lt;br /&gt;- Инструменты для графики,
&lt;br /&gt;- Эффекты окружения,
&lt;br /&gt;- Математика в программировании графики.&lt;/ul&gt;
&lt;br /&gt;Больше информации можно найти в блоге &lt;a href=&quot;http://gpupro2.blogspot.com/2010/02/gpu-pro-2-call-for-authors.html&quot;&gt;GPU Pro 2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/ogre_1_7</guid>
  <pubDate>Mon, 08 Mar 2010 13:17:48 GMT</pubDate>
  <title>Релиз Ogre 1.7</title>
  <link>http://www.gamedev.ru/industry/news/ogre_1_7</link>
  <category>События</category>
  <category>Ogre3D</category>
  <description>
&lt;p&gt;Вышел долгожданный релиз open source render-движка Ogre3d. Список изменений: &lt;a href=&quot;http://www.ogre3d.org/2010/02/28/ogre-1-7-0-final-cthugha-released&quot;&gt;здесь&lt;/a&gt;. Раздел закачки: &lt;a href=&quot;http://www.ogre3d.org/download&quot;&gt;здесь&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/mobile/tip/CUDA_For_Notebooks</guid>
  <pubDate>Mon, 08 Mar 2010 12:09:03 GMT</pubDate>
  <title>Инсталлирование драйвера CUDA на ноутбуки с GPU серии g200</title>
  <link>http://www.gamedev.ru/mobile/tip/CUDA_For_Notebooks</link>
  <category>CUDA</category>
  <category>GPGPU</category>
  <category>GPU</category>
  <category>драйвер</category>
  <category>ноутбук</category>
  <description>
&lt;p&gt;К сожалению стандартные драйверы CUDA&amp;nbsp; от Nvidia не опознают современное железо и при инсталляции делают соответствующее сообщение.&lt;/p&gt;
&lt;p&gt;Эта проблема решается следующим образом:
&lt;br /&gt;1. Стандартный &lt;a href=&quot;http://us.download.nvidia.com/Windows/195.62/195.62_notebook_winvista_win7_64bit_international_whql.exe&quot;&gt;драйвер&lt;/a&gt; с сайта Nvidia распаковывается.
&lt;br /&gt;2. Вместо стандартного конфигурационного файла nvao.inf, нужно вставить файл nvao.inf из &lt;b&gt;&lt;a href=&quot;http://www.gamedev.ru/files/?id=51961&quot;&gt;nvao.inf&lt;/a&gt;&lt;/b&gt;.
&lt;br /&gt;3. Инсталлировать драйвер.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://forums.nvidia.com/index.php?showtopic=154706&quot;&gt;Источник&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/john_carmack_gdc</guid>
  <pubDate>Mon, 08 Mar 2010 12:04:47 GMT</pubDate>
  <title>Джон Кармак получит награду GDC</title>
  <link>http://www.gamedev.ru/industry/news/john_carmack_gdc</link>
  <comments>http://www.gamedev.ru/industry/forum/?id=131052</comments>
  <category>События</category>
  <category>GDC</category>
  <category>Джон Кармак</category>
  <description>
&lt;p&gt;Основатель студии id Software Джон Кармак получит награду на мероприятии &lt;strong&gt;Game Developers Choice Awards&lt;/strong&gt;, получив награду за &amp;laquo;вклад в развитие игровой индустрии&amp;raquo;. По словам главы GDC, Кармак повлиял на развитие всех трёхмерных fps-игр. Напомним, созданные Джоном боевики: Doom, Quake, Wolfenstein 3D. Вручение награды состоится 11 марта этого года.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/nopper-opengl-3-2</guid>
  <pubDate>Mon, 08 Mar 2010 12:03:33 GMT</pubDate>
  <title>Уроки по OpenGL 3.2 для Linux</title>
  <link>http://www.gamedev.ru/code/news/nopper-opengl-3-2</link>
  <category>OpenGL</category>
  <description>
&lt;p&gt;На сайте nopper.tv обновились уроки, посвящённые &lt;a href=&quot;http://www.gamedev.ru/code/terms/OpenGL&quot; title=&quot;OpenGL: Open Graphics Library&quot;&gt;OpenGL&lt;/a&gt; 3.2 и &lt;a href=&quot;http://www.gamedev.ru/code/terms/GLSL&quot; title=&quot;GLSL (OpenGL Shading Language)&quot;&gt;GLSL&lt;/a&gt; 1.50. В уроках появилась поддержка ОС Linux.&lt;/p&gt;
&lt;p&gt;Ссылки на уроки: &lt;a href=&quot;http://nopper.tv/opengl_3_2.html&quot;&gt;http://nopper.tv/opengl_3_2.html&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/universal-controller</guid>
  <pubDate>Mon, 08 Mar 2010 12:00:13 GMT</pubDate>
  <title>Универсальный игровой контроллер от Sony</title>
  <link>http://www.gamedev.ru/industry/news/universal-controller</link>
  <category>Apple</category>
  <category>PS3</category>
  <category>Sony</category>
  <description>
&lt;p&gt;Компания Sony получила патент на &amp;laquo;универсальный игровой контроллер&amp;raquo;, который мог бы позволить управлять играми различных систем. Контроллер будет использовать LCD экран, чувствительный к нажатиям и его можно будет настраивать для разных игровых схем.&lt;/p&gt;
&lt;p&gt;Учитывая, что Apple уже выпустила мышь, у которой вместо кнопки – чувствительная к нажатиям панель, скоро мы совсем забудем, что такое настоящие физические кнопки под пальцами.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/articles/PositionBasedPhysics</guid>
  <pubDate>Sun, 28 Feb 2010 21:38:41 GMT</pubDate>
  <title>Физика «на пальцах»: Position-Based подход</title>
  <link>http://www.gamedev.ru/code/articles/PositionBasedPhysics</link>
  <comments>http://www.gamedev.ru/code/forum/?id=130110</comments>
  <category>Физика</category>
  <category>game dynamics</category>
  <category>физика</category>
  <category>position-based</category>
  <description>
&lt;p&gt;В этой статье из цикла &amp;laquo;Физика на пальцах&amp;raquo; речь пойдёт об одном из подходов, с успехом применяемом в самых разных областях математического моделирования: начиная от динамики жидкости и заканчивая физикой взаимодействия твёрдых тел.&lt;/p&gt;&lt;p&gt;&lt;h1&gt;Основные принципы Position-Based подхода&lt;/h1&gt;&lt;/p&gt;
&lt;p&gt;Рассмотрим обычный подход, ещё называемый velocity-based, к моделированию, например, движения материальной точки. Точку в таком подходе принято описывать её мгновенным положением, скоростью и ускорением:
&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; ClassicPoint
{
  Vector3 position;
  Vector3 velocity;
  Vector3 acceleration;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Move&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; dt&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;И если мы хотим предсказать, как изменится положение точки, когда пройдёт интервал времени dt, мы считаем, что на протяжении этого интервала времени частица движется с постоянным ускорением acceleration. Так как dt мал, мы можем посчитать приближённое изменение скорости и положения, численно проинтегрировав по Эйлеру. Это нетрудно себе представить: скорость изменяется на малую величину acceleration * dt, а положение &amp;mdash; на velocity * dt. В коде это можно представить так:
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; ClassicPoint::Move&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; dt&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  velocity += acceleration * dt;
  position += velocity * dt;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;
здесь * &amp;mdash; оператор умножения вектора на скаляр.&lt;/p&gt;
&lt;p&gt;Отличие же Position-Based подхода от Velocity-Based состоит в том, что мы не храним скорость и ускорение в явном виде. Вместо этого мы храним положение точки на предыдущем кадре и на текущем. Например, так:
&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; PositionBasedPoint
{
  Vector3 position;
  Vector3 prevPosition;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Move&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;А передвигаем точку из интуитивно понятного принципа: если с предыдущего кадра до текущего прошёл малый интервал времени, и за это время частица сместилась на малое расстояние deltaPos, то, скорее всего, за следующий такой же интервал времени частица сместитсяа на такое же расстояние:
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; PositionBasedPoint::Move&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  Vector3 delta = position - prevPosition;
  prevPosition = position;
  position += delta;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Обратим внимание, что в методе ::Move() отсутствует величина, показывающая сколько времени прошло. Мы считаем, что прошло ровно столько же времени, сколько прошло с предыдущего вызова этого метода до текущего. Этот интегратор ещё называется интегратором Верле (Verlet).&lt;/p&gt;&lt;p&gt;&lt;h1&gt;В чём же профит?&lt;/h1&gt;&lt;/p&gt;
&lt;p&gt;У внимательного читателя к этому моменту уже, должно быть, назрел вопрос: &amp;laquo;а зачем это, собственно, нужно? В чём удобство подхода?&amp;raquo; А удобства становятся очевидны при моделировании не самых тривиальных процессов. Рассмотрим, например, взаимодействие большого количества круглых частиц друг с другом:&lt;/p&gt;
&lt;p&gt;Сперва расширим класс нашей position-based точки, добавив ей радиус, теперь это будет полноценная частица:
&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; PositionBasedParticle
{
  Vector3 position;
  Vector3 prevPosition;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; radius;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Move&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;В классическом честном velocity-based подходе нам бы пришлось считать время до ближайшего соударения двух шаров, смещать всю систему на это малое расстояние по времени, высчитывать их углы отскока, заниматься неинтересными и вычислительно дорогими вещами. В нашем же подходе мы делаем следующее: просто расталкиваем на равное расстояние шары, которые на текущей итерации пролезли немного друг в друга:
&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;for&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; 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; particles.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: #F04000; &quot;&gt;1&lt;/span&gt;; i++&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;&lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt; j = i + &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;; j &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; particles.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: #F04000; &quot;&gt;1&lt;/span&gt;; j++&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    Vector3 p1 = particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.position;
    Vector3 p2 = particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.position;
    &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;p1 - p2&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.SquareLength&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;lt;&lt;/span&gt; sqr&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius + particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius&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;
      &lt;span style=&quot;color: #808080&quot;&gt;// суммы их радиусов -&amp;gt; они пересекаются&lt;/span&gt;
    {
      &lt;span style=&quot;color: #808080&quot;&gt;// шары удобнее всего расталкивать вдоль прямой, проходящей через их центры&lt;/span&gt;
      Vector3 penetrationDirection = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;p2 - p1&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.Normalize&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;
      &lt;span style=&quot;color: #808080&quot;&gt;// минус расстояние между их центрами&lt;/span&gt;
      &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; penetrationDepth = particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius + particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius
                - &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;p2 - p1&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.Length&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;
      particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.position += -penetrationDirection * penetrationDepth * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f;
      particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.position +=  penetrationDirection * penetrationDepth * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f;
    }
  }
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;далее, если мы вызовем для всех шаров функцию ::Move, столкнувшиеся шары &amp;laquo;магическим&amp;raquo; образом разлетятся в нужном направлении с нужными скоростями!
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;for&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; 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; particles.size&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;; i++&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  paraticles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.Move&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;С виду простой метод возволяет моделировать вполне внушительное количество взаимодействующих объектов:&lt;/p&gt;
&lt;p&gt;На этом просчитывается взаимодействие 5000 шариков, просчёт всей физики занимает чуть больше 2мс на одном ядре процессора Core2Duo E6600 2.4GHz.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/particletest_2010-02-26_17-20-42-12.jpg&quot; alt=&quot;ParticleTest 2010-02-26 17-20-42-12 | Физика &amp;laquo;на пальцах&amp;raquo;: Position-Based подход&quot; /&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; ParticleLink
{
  &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; defLen; &lt;span style=&quot;color: #808080&quot;&gt;//длина пружины в ненапряжённом состоянии&lt;/span&gt;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; stiffness; &lt;span style=&quot;color: #808080&quot;&gt;//параметр, задающий жёсткость связи&lt;/span&gt;

  PositionBasedParticle *particle1;
  PositionBasedParticle *particle2;

  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Solve&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;После каждого шага по времени мы варварски передвигаем частицы на расстояние, соответствующее их смещению с предыдушего кадра к текущему. Разумеется, из-за этого связи могут нарушаться, растягиваясь или сжимаясь. Придерживаясь нашего position-based подхода, всё, что от нас требуется &amp;mdash; просто сжать или растянуть связь до её собственной длины. Реализуем это в методе Solve():
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; ParticleLink::Solve&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  Vector2 point1 = particle1-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos;
  Vector2 point2 = particle2-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos;

  Vector2 norm = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;point2 - point1&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.Normalize&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

  Vector2 goal1 = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;point1 + point2&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;5&lt;/span&gt;f - norm * defLen * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f;
  Vector2 goal2 = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;point1 + point2&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;5&lt;/span&gt;f + norm * defLen * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f;

  particle1-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos = particle1-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos + &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;goal1 - particle1-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; * stiffness;
  particle2-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos = particle2-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos + &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;goal2 - particle2-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;pos&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; * stiffness;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Обратим внимание на параметр stiffness. Если он равен нулю, то после &amp;laquo;решения&amp;raquo; связи частицы не сдвинутся с места. Если он равен единице, частицы примут своё положение, как если бы связь мгновенно приняла &amp;laquo;удобную&amp;raquo; для себя длину. Этот параметр означает что-то вроде жёсткости связи. Его максимальное значение &amp;mdash; единица, соостветствует максимальной жёсткости, допустимой численным методом.&lt;/p&gt;
&lt;p&gt;Грубо говоря, всё, что от нас требуется для реализации какого-то физического явления &amp;mdash; это каждый кадр ставить все частицы в положение, удовлетворяющее этому явлению и более-менее близкое к текущему. Если это затруднительно сделать, как, например, в случае с большим количеством связей не тривиально найти положение шариков, когда не нарушена ни одна связь, мы просто выбираем &amp;laquo;менее плохую&amp;raquo; конфигурацию, постепенно решая, каждую связь отдельно от других. Всё остальное получается как бы само собой &amp;mdash; шарики расталкиваются, конструкция из связей получает жёсткость.&lt;/p&gt;&lt;p&gt;&lt;h1&gt;Further Improvements&lt;/h1&gt;&lt;/p&gt;
&lt;p&gt;Одной из неприятных особенностей метода является то, что энергия системы при каждом расталкивании пары шаров гарантированно не увеличивается. Более того, нельзя точно сказать, уменьшается ли она. В описанной реализации отскочут ли шары друг от друга, как мячи, или слипнутся, как пластилиновые, сказать заранее нельзя. Благо, в хаосе из тысяч частиц это не заметно, но если мы реализуем, например, бильярд, на самотёк это дело пускать нельзя.&lt;/p&gt;
&lt;p&gt;Нужно найти способ, как явно задавать скорость частиц после соударения. Один из подходов &amp;mdash; менять prevPosition, но я считаю его антилогичным. Вместо этого я предлагаю поступить следующим образом:&lt;/p&gt;
&lt;p&gt;Вместо того, чтобы хранить пару prevPosition + position, можно хранить пару position + deltaPosition, где deltaPosition &amp;mdash; это разница между position и prevPosition. Соотвественно каждый раз изменяя значение position, нам нужно в точности на такую же величину изменить и deltaPosition, в этом нетрудно убедиться взяв листок бумаги, нарисовав предыдущую и текущую позицию точки и посмотрев, как изменяется вектор, их соединяющий, если двигать текущую позицию.&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; PositionBasedParticle
{
  Vector3 position;
  Vector3 deltaPosition;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; radius;
  &lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; Move&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; Push&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Vector3 delta&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
};

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; PositionBasedParticle::Move&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  position += deltaPosition;
}

&lt;span style=&quot;color: #0030fF; &quot;&gt;void&lt;/span&gt; PositionBasedParticle::Push&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;Vector3 delta&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
{
  position += delta;
  deltaPosition += delta;
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Теперь, чтобы корректно обработать отскок пары шаров, мы не только расталкиваем их (обратим внимание, теперь уже не простым присвоением текущей позиции, а методом Push()), но и пересчитываем новые скорости из закона сохранения импульса:
&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;for&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; 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; particles.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: #F04000; &quot;&gt;1&lt;/span&gt;; i++&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;&lt;span style=&quot;color: #0030fF; &quot;&gt;int&lt;/span&gt; j = i + &lt;span style=&quot;color: #F04000; &quot;&gt;1&lt;/span&gt;; j &lt;span style=&quot;color: #a06000&quot;&gt;&amp;lt;&lt;/span&gt; particles.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: #F04000; &quot;&gt;1&lt;/span&gt;; j++&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;
  {
    Vector3 p1 = particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.position;
    Vector3 p2 = particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.position;
    &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;p1 - p2&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.SquareLength&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;lt;&lt;/span&gt; sqr&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius + particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius&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;
      &lt;span style=&quot;color: #808080&quot;&gt;// меньше суммы их радиусов -&amp;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;
      Vector3 penetrationDirection = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;p2 - p1&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.Normalize&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;
      &lt;span style=&quot;color: #808080&quot;&gt;// минус расстояние между их центрами&lt;/span&gt;
      &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; penetrationDepth = particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius + particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.radius
                - &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;p2 - p1&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;.Length&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;
      particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.Push&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;-penetrationDirection * penetrationDepth * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;
      particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.Push&lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;  penetrationDirection * penetrationDepth * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt;;

      &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; bounce = &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: #808080&quot;&gt;//коэффициент отскока, [0..1]&lt;/span&gt;
      &lt;span style=&quot;color: #808080&quot;&gt;//относительная скорость шариков&lt;/span&gt;
      Vector2 relativeVelocity = particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.deltaPosition - particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.deltaPosition;
      &lt;span style=&quot;color: #808080&quot;&gt;//тела обмениваются импульсом вдоль нормали контакта&lt;/span&gt;
      &lt;span style=&quot;color: #0030fF; &quot;&gt;float&lt;/span&gt; exchangeVelocity = &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;&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 + bounce&lt;span style=&quot;color: #a06000&quot;&gt;)&lt;/span&gt; * &lt;span style=&quot;color: #a06000&quot;&gt;(&lt;/span&gt;relativeVelocity * penetrationDirection&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;exchangeVelocity &lt;span style=&quot;color: #a06000&quot;&gt;&amp;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;
      {
        particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;i&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.deltaPosition += penetrationDirection * exchangeVelocity * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f;
        particles&lt;span style=&quot;color: #a06000&quot;&gt;[&lt;/span&gt;j&lt;span style=&quot;color: #a06000&quot;&gt;]&lt;/span&gt;.deltaPosition -= penetrationDirection * exchangeVelocity * &lt;span style=&quot;color: #F04000; &quot;&gt;0&lt;/span&gt;.&lt;span style=&quot;color: #F04000; &quot;&gt;5&lt;/span&gt;f;
      }
    }
  }
}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;Для интересующихся, откуда был взят код пересчёта скоростей после отскока рекомендую обратиться к статье&amp;nbsp; &amp;laquo;&lt;a href=&quot;http://www.gamedev.ru/code/articles/?id=4706&quot;&gt;Физика &amp;laquo;на пальцах&amp;raquo;: солверы физических движков&lt;/a&gt;&amp;raquo; по разрешению контактов в импульсных солверах.&lt;/p&gt;
&lt;p&gt;Теперь, чтобы, например, придать частице ускорение, мы не модифицируем её предыдущее положение, а меняем вектор deltaPosition, работая с ним как с величиной velocity * dt. То есть, если мы хотим придать частице ускорение acceleration, которое действовало на протяжении времени dt, просто пишем:
&lt;div style=&quot;background: #f2f2f2; padding: 5px; margin: 4px;&quot;&gt;&lt;pre&gt;particle-&lt;span style=&quot;color: #a06000&quot;&gt;&amp;gt;&lt;/span&gt;deltaPosition += acceleration * dt;&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;p&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/substance2_2010-02-26_17-48-35-90.jpg&quot; alt=&quot;Substance2 2010-02-26 17-48-35-90 | Физика &amp;laquo;на пальцах&amp;raquo;: Position-Based подход&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Если добавить третье измерение, построить сетку из частиц и выправлять слишком &amp;laquo;сложившиеся&amp;raquo; её ячейки, получим что-то вроде ткани:
&lt;br /&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/52051_1267391884_cloth_bending_pb_7__2010-02-26_17-55-42-68.jpg&quot; alt=&quot;cloth_bending_pb_7__2010-02-26_17-55-42-68 | Физика &amp;laquo;на пальцах&amp;raquo;: Position-Based подход&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Если мы выделим группу частиц и скажем, что объём, который они ограничивают, должен сохраняться (этакий бурдюк с несжимаемой жидкостью), и будем каждый кадр просто увеличивать его (растягивая вдоль координатных осей) во столько раз, чтобы сохранить объём, получим так называемый baloon:
&lt;br /&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/52052_1267391924_gnum_vs_sviborg_2010-02-26_17-59-28-45.jpg&quot; alt=&quot;gnum_vs_sviborg_2010-02-26_17-59-28-45 | Физика &amp;laquo;на пальцах&amp;raquo;: Position-Based подход&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Наконец, если свяжем частицы не отрезками, а тетраэдрами, мы получим объёмные связи. &amp;laquo;Выправляя&amp;raquo; их от кадра к кадру можно получить нетривиальные явления, например, таким подходом удобно моделировать деформируемые тела:
&lt;br /&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/plasticvolumeconservati.jpg&quot; alt=&quot;plasticvolumeconservati | Физика &amp;laquo;на пальцах&amp;raquo;: Position-Based подход&quot; /&gt;&lt;/p&gt;
&lt;p&gt;или распространение ударного волнового фронта:
&lt;br /&gt;&lt;img src=&quot;http://www.gamedev.ru/files/images/volumerenderer_debug_2010-02-28_23-20-01-95.jpg&quot; alt=&quot;VolumeRenderer debug 2010-02-28 23-20-01-95 | Физика &amp;laquo;на пальцах&amp;raquo;: Position-Based подход&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;h1&gt;Ограничения метода&lt;/h1&gt;
&lt;br /&gt;Разумеется, чудес не бывает и не бывает одновременно простого, быстрого и общего метода моделирования физики. За простоту реализации и широкий спектр моделируемых явлений position-based подход заплатил своё:
&lt;br /&gt;- Любые попытки изменять шаг по времени до добра не доведут. Если оригинальная схема имеет второй порядок точности по времени, то использование нефиксированного шага сбрасывает порядок точности до первого. Если в игре не фиксированный fps, лучше вызывать физику не каждый кадр а, например, тогда, когда с момента предыдущего обновления физики прошло какое-то время, например, 1/50 секунды.
&lt;br /&gt;- Метод вовсе не дружит с continuous collision detection. Если не аккуратно выбрать размеры или скорости тел, они могут безнаказанно пролетать друг через друга. Если избавиться от быстро летящих частиц нельзя, то можно попытаться обрабатывать их другим, не position-based подходом.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/vicious-engine-2-wii-psp</guid>
  <pubDate>Mon, 22 Feb 2010 23:10:53 GMT</pubDate>
  <title>Vicious Engine 2 вернул поддержку слабых платформ</title>
  <link>http://www.gamedev.ru/code/news/vicious-engine-2-wii-psp</link>
  <category>PS2</category>
  <category>PSP</category>
  <category>Vicious Engine</category>
  <category>Wii</category>
  <category>движок</category>
  <description>
&lt;p&gt;Ранее мы писали,&amp;nbsp; что &lt;a href=&quot;http://www.gamedev.ru/industry/news/?id=4538&quot;&gt;Vicious Engine 2 не поддерживает&lt;/a&gt; старые и слабые консоли. Однако, это уже не так. Последняя версия движка снова поддерживает Wii, PSP и даже PlayStation 2.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.viciousengine.com/&quot;&gt;http://www.viciousengine.com/&lt;/a&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/igds-2010</guid>
  <pubDate>Mon, 22 Feb 2010 23:05:59 GMT</pubDate>
  <title>India Game Developer Summit</title>
  <link>http://www.gamedev.ru/industry/news/igds-2010</link>
  <category>События</category>
  <category>IGDS</category>
  <description>
&lt;p&gt;Саммит Разработчиков Игр Индии пройдёт 27 февраля 2010 года в Бангалоре, в помещении &lt;a href=&quot;http://osm.org/go/yy4c6BgB8&quot;&gt;Nimhans Convention Center&lt;/a&gt; и при поддержке IGDA, NVIDIA, Adobe, Ubisoft, Playdom и других компаний и организаций. Среди выступающих много представителей известных игровых компаний.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Темы докладов:
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Вычисления на GPU в &lt;a href=&quot;http://www.gamedev.ru/industry/terms/Games&quot; title=&quot;Игры (games): компьютерные игры&quot;&gt;играх&lt;/a&gt;
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Стерео 3D игры
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Трудности при управлении жизненным циклом для многоплатформных мобильных игр
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Создание, распространение и монетизация игр с Adobe Flash Platform
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Формирования игрового опыта для мобильных игр
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Становление независимого разработчика игр
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Технологии и тренды рынка для PC
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Open Source для вашей игры
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Становление разработки мобильных игр в Индии
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Высокоточная динамика в играх
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Продвинутые визуальные эффекты в играх
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Подготовка к &amp;laquo;Золотой лихорадке&amp;raquo; социальных игр в Индии
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Суть бизнеса онлайновых игр
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Творческое ядро команды
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Создание успешных online игр
&lt;br /&gt;•&amp;nbsp; &amp;nbsp; Продай игру, усынови геймдизайнера!
&lt;br /&gt;и другие.&lt;/p&gt;
&lt;p&gt;Сайт Саммита Разработчиков Игр Индии:
&lt;br /&gt;&lt;a href=&quot;http://www.devmarch.com/gamedevelopersummit/conference.html&quot;&gt;http://www.devmarch.com/gamedevelopersummit/conference.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/industry/news/ubisoft_starforce_fail_2</guid>
  <pubDate>Mon, 22 Feb 2010 23:01:27 GMT</pubDate>
  <title>Ubisoft - новая система защиты. Часть 2.</title>
  <link>http://www.gamedev.ru/industry/news/ubisoft_starforce_fail_2</link>
  <comments>http://www.gamedev.ru/industry/forum/?id=130523</comments>
  <category>События</category>
  <category>starforce</category>
  <category>Ubisoft</category>
  <description>
&lt;p&gt;Я уже писал о новой &lt;a href=&quot;http://www.gamedev.ru/industry/news/ubisoft_starforce_fail&quot;&gt;системе защиты игр от компании Ubisoft&lt;/a&gt;. Недавно журналисты из PC Gamer опробовали новинку. Защита оправдала свою неадекватность. Во-первых, для игры обязательно нужно интернет-соединение, во-вторых, оно должно быть качественным, без обрывов. При малейших проблемах со связью, Assassin&apos;s Creed 2 выбрасывает в меню, вследствие чего не сохраняется игровой процесс. К чему стремятся Ubisoft понять тяжело, но сохранить пользователей будет нелегко.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/art/news/3dsmax-20xx-new-features</guid>
  <pubDate>Sat, 20 Feb 2010 10:12:31 GMT</pubDate>
  <title>Новые возможности следующих версий 3D Studio Max</title>
  <link>http://www.gamedev.ru/art/news/3dsmax-20xx-new-features</link>
  <comments>http://www.gamedev.ru/art/forum/?id=129891</comments>
  <category>Моделирование</category>
  <category>3D Studio MAX</category>
  <description>
&lt;p&gt;Autodesk представила новые возможности, которые должны появиться в следующих версиях популярного редактора &lt;a href=&quot;http://www.gamedev.ru/art/terms/3DSMAX&quot; title=&quot;3D Studio Max&quot;&gt;3D Studio Max&lt;/a&gt;. Среди них возможность &amp;laquo;рисовать объектами&amp;raquo;, варьируя параметры этих объектов вдоль линии, а также возможность раскрашивать текстуру прямо на поверхности объекта в окне редактора.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;object width=&quot;640&quot; height=&quot;455&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/xo8zPOS_1ds&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999&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/xo8zPOS_1ds&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;455&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;&lt;object width=&quot;640&quot; height=&quot;455&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/b65ndE24VCE&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&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/b65ndE24VCE&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&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;455&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/silverlining-1-95</guid>
  <pubDate>Wed, 17 Feb 2010 22:41:56 GMT</pubDate>
  <title>SilverLining 1.95</title>
  <link>http://www.gamedev.ru/code/news/silverlining-1-95</link>
  <comments>http://www.gamedev.ru/code/forum/?id=129849</comments>
  <category>Графика</category>
  <category>SilverLining</category>
  <description>
&lt;p&gt;Обновилась библиотека симуляции неба и облаков SilverLining. Теперь поддерживается &lt;a href=&quot;http://www.gamedev.ru/code/terms/HDR&quot; title=&quot;HDR: High Dynamic Range&quot;&gt;HDR&lt;/a&gt; с отрисовкой сцены в буфер в формате вещественных чисел, улучшена поддержка компиляторов и добавлена возможность использовать &lt;a href=&quot;http://www.gamedev.ru/code/terms/GLSL&quot; title=&quot;GLSL (OpenGL Shading Language)&quot;&gt;GLSL&lt;/a&gt; шейдеры для &lt;a href=&quot;http://www.gamedev.ru/code/terms/OpenGL&quot; title=&quot;OpenGL: Open Graphics Library&quot;&gt;OpenGL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;br /&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/yhBhOPLIuDY&amp;amp;hl=ru_RU&amp;amp;fs=1&amp;amp;&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/yhBhOPLIuDY&amp;amp;hl=ru_RU&amp;amp;fs=1&amp;amp;&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;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/mobile/news/wp7-xbox-live</guid>
  <pubDate>Wed, 17 Feb 2010 22:41:05 GMT</pubDate>
  <title>Мобильная версия Windows 7 будет работать с XBox Live</title>
  <link>http://www.gamedev.ru/mobile/news/wp7-xbox-live</link>
  <category>Общее</category>
  <category>WP7</category>
  <category>Xbox</category>
  <description>
&lt;p&gt;Microsoft анонсировало новую особенность Windows Phone 7 – возможность взаимодействовать с аккаунтом XBox Live. Предполагается, что можно будет пользоваться этим, создавая как самостоятельные продукты, так и продукты-спутники, которые могут повлиять на игровой процесс в &amp;laquo;больших&amp;raquo; играх на самой приставке. Самой же интересной возможностью является создание игр, в которые можно было бы играть в одной игровой сессии с XBox 360 и смартфона.&lt;/p&gt;
&lt;p&gt;Печальная новость в том, что приложения для Windows Mobile не совместимы с новой ОС.&lt;/p&gt;
&lt;p&gt;На текущий момент большое количество производителей устройств уже объявило о том, что собирается выпускать телефоны под новую операционную систему.&lt;/p&gt;</description>
</item>
<item>
  <guid isPermaLink="true">http://www.gamedev.ru/code/news/airplay-sdk-4-1</guid>
  <pubDate>Wed, 17 Feb 2010 22:38:05 GMT</pubDate>
  <title>Airplay SDK 4.1</title>
  <link>http://www.gamedev.ru/code/news/airplay-sdk-4-1</link>
  <category>AirplaySDK</category>
  <category>Maemo</category>
  <category>Nokia</category>
  <category>XCode</category>
  <description>
&lt;p&gt;&lt;a href=&quot;http://www.gamedev.ru/mobile/terms/AirplaySDK&quot; title=&quot;Airplay SDK&quot;&gt;Airplay SDK&lt;/a&gt; обновилось до версии 4.1. В новой версии пока нет ожидаемых фич, таких как Camera API, но есть другие, довольно примечательные:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 1. Поддержка платформы Maemo, которая используется в Nokia N900, и предварительная версия поддержки Palm WebOS. Как всегда для сборки приложения под новую платформу достаточно одного клика.
&lt;br /&gt;&amp;nbsp; 2. Доступ к контактной книге (если приложение запущено на устройстве, на котором эта книга есть).
&lt;br /&gt;&amp;nbsp; 3. Возможность работать на MacOS под XCode. Версия SDK для MacOS пока в стадии бета-тестирования, возможно создание приложений для iPhone, Android, BREW и Maemo.
&lt;br /&gt;&amp;nbsp; 4. Удалённое управление эмулятором для отладки &amp;laquo;играбельности&amp;raquo; продуктов.&lt;/p&gt;
&lt;p&gt;Последний пункт хочется отметить особенно. На устройство устанавливается специальное приложение – заглушка, которая по WiFi обменивается данными с компьютером разработчика. На устройство пересылается картинка, а на компьютер – события о действиях игрока. Как плюс разработчики отмечают отсутствие необходимости постоянно инсталлировать каждый билд приложения для отладки на устройстве.&lt;/p&gt;</description>
</item>
</channel>
</rss>
