четверг, 31 декабря 2009 г.

Happy New Year!


Поздравляю всех с Новым 2010-м Годом!
Всем желаю исполнения самых заветных желаний!
Счастья, здоровья, благополучия и процветания всем в Новом Году!

С ув. iOrange

вторник, 15 декабря 2009 г.

Driver for iPhone/iPod Touch

Давненько что-то я не писал ничего в блоге :). На то были причины - на своей новой работе (Gameloft, Kharkov) трудился над проектом Driver - тот самый Driver который был на PS1 - любимый многими безбашенный и ураганный "Водила".
А занимались мы собственно портированием игры с PC-версии (та которая еще Glide использовала) на iPhone/iPod Touch. Занятие не из легких - но веселое :). В процессе портирования была изменена большая часть графики, переделаны все оригинальные машины, полностью с нуля написан рендер, переписана часть оригинальной логики, переделано управление, сделана локализация на 6 языков (включая японский).
В результате стараний команды - Driver for iPhone уже на AppStore, где каждый сможет приобрести его.

суббота, 5 сентября 2009 г.

Новая статья

Сегодня запостил новую статью которая продолжает цикл статей об OpenGL 3.0.
В этой статье рассматривается вынос расчета скелетной анимации в шейдер не используя матрицы, а используя связку quaternion+vector.
Вот ссылка на статью - Часть 2. Анимация на шейдерах

понедельник, 17 августа 2009 г.

Сборник pre-defined макросов

Давно искал подобную штуку, и недавно таки наткнулся.
Классный обширный сборник всяческих pre-defined макросов.

Всем интересующимся - ссылка Pre-defined C/C++ Compiler Macros

суббота, 25 июля 2009 г.

Новая статья

Сегодня выложил на сайте http://gameworld.com.ua новую статью. В этой статье рассказывается о том как правильно настроить 3DSMax SDK для интегрирования его с Visual Studio. Как с помощью 3DS Max Plugin Wizard создавать различные типы плагинов, и, наконец, рассказано как с помощью семейства интерфейсов IGame (3DXI) написать собственный экспортер скелетной анимации (Skinned Mesh). Так же для демонстрации результата был написан просмотрщик выходных файлов анимации. Просмотрщик был написан с использованием OpenGL 3.0. В общем всех интересующихся приглашаю к ознакомлению.

Статья тут - http://gameworld.com.ua/showthread.php?t=361

воскресенье, 19 июля 2009 г.

iPhoneDevCamp Ukraine



Вернувшись сегодня в Харьков и немного выспавшись, решил немного рассказать о прошедшем вчера (18.07.2009) iPhoneDevCamp Ukraine. В общем прошедшим Camp'ом остался доволен. Есть народная поговорка - "Первый блин комом", но в данном случае блинчик вышел вполне хорошим, лишь несколько небольших комочков :) Главная задача подобных мероприятий - это exchange опытом, возможность познакомиться с коллегами и просто братьями по разуму, и хочу заметить что это организаторам удалось - несмотря на неимоверную жару (кондиционеры отсутствовали) и, местами, сильную разницу в профессионализме, общение шло довольно живо. Народ дружелюбно шел на контакт, эксперты очень толково и подробно отвечали на терзающие народ вопросы. К сожалению докладов было мало, а докладов по GameDev'у и подавно - всего один доклад, и тот рекламирующий движок Unity3D. Самым частой темой звучавших вопросов были проблемы при регистрации в iPhone Developer Program и способы получения денег от Apple. После окончания кэмпа бОльшая часть народу подтянулась в Docker Pub на Afterparty, где за бокалом пива общение пошло еще живее и насыщенее :)

В общем для первого раза вполне неплохо. Организаторы смогли оценить масштабность действа (народу было реально много), примерную таргет-аудиторию и предпочтения в докладах. Именно эта часть баркэмпа часть была самой слабой - откровенно нехватало GameDev части и проблемам development'а + способам их решения. Хочется надеяться что в следующем году на iPhoneDevCamp Ukraine докладов будет больше, за год народ наберется дополнительного опыта и все пройдет еще круче-ярче-афигенней.

PS. Еще раз хотелось бы поблагодарить организаторов за то что они собрали Ukraine iPhone Development комьюнити вместе и поспособствовали столь драгоценному experience exchange'у.

воскресенье, 5 июля 2009 г.

Цикл статей по OpenGL

Разобравшись со своими проблемами и собравшись с мыслями понял одно - в ближайшее время движком заниматься не буду (нет времени, да и устал немного). Но дабы не потерять сноровку и дабы не отстать от прогресса, а так же дабы поделиться знаниями с окружающими - я решил продолжить писать статьи на GameWorld.com.ua .
Это будет цикл статей посвященным изучению OpenGL 3.x . В них будут рассматриваться практичные и полезные вещи, но с использованием OpenGL 3.x. Это позволит мне не покрыться мхом, и заодно пополниться инфы по OpenGL для новичков.

Итак, встречайте первую, вводную статью из цикла - Знакомство с OpenGL 3.0 !
Жду ваших гнилых помидоров коментариев :)

суббота, 20 июня 2009 г.

Перемена

Итак, в моей жизни очередные перемены. Я поменял место работы. Проработав в фирме "АльфаКласс" 4 года пришлось ее покинуть. Мое новое место работы - компания "GameLoft" (http://www.gameloft.com/). Так как на новой работе я работаю над проектами под iPhone/iPod, то также сменилась рабочая платформа - вместо Windows теперь я все рабочее время провожу за Macintosh'ем. Вместо Visual Studio - XCode...
Пока что немного тяжело в связи с такой резкой переменой предметной области, но это как раз мне и кажется наиболее привлекательным - всегда интересно познавать что-то новое.
Также спасибо коллективу за дружелюбность и желание помочь.

А как же fEngine ? А сам пока не знаю. Пока что работы по развитию движка приостановлены. Не знаю будет ли у меня время/желание его развивать. Возможна даже такая ситуация что проект будет выложен в открытый доступ... Поживем увидим ;)

четверг, 14 мая 2009 г.

GeForce GTX260

Вчера приобрел новую видеокарту - ASUS ENGTX260. Теперь она заменяет мою предыдущую видеокарту - SAPPHIRE Radeon HD3850. Решился я на эту замену, не смотря на кризис, из-за поддержки продуктами nVidia GPGPU-технологий: CUDA, OpenCL. Да у ATI/AMD есть Stream, но как по мне, он мягко говоря проигрывает nVidia CUDA. Также поддержка OpenCL у ATI/AMD появится, но неизвестно когда, а у nVidia она уже хоть в каком-то виде но есть. Ну и последний, но один из важнейших факторов - поддержка OpenGL, тут nVidia несомненный лидер!
Видеокарта ASUS ENGTX260 шла в красивой коробке (фото 1), внутри которой было все необходимое + 2 презента от ASUS - коврик для мыши и CD-holder (фото 2).
Сама видеокарта оформлена в стиле милитари с воинственной амазонкой :) (фото 3)
Фото 1. Общий план

Фото 2. Презенты от ASUS

Фото 3. Вот она!

Ну и напоследок - моя служившая верой и правдой Radeon HD3850
Фото 4. Все-таки хорошая была видеокарта!

PS. Спасибо магазину сети "СПЕЦВУЗАВТОМАТИКА" за хоть и небольшую, но скидочку ;)

вторник, 28 апреля 2009 г.

nVidia Bindless Graphics for OpenGL

После обсасывания сабжа на GameDev.ru пришло время отписаться по этому поводу в блоге.
Итак - судный день во главе с терминаторами все близиться, и вроде бы еще совсем недавно шейдеры были пару строк объемом и писались на языке пародирующем ассемблер, а уже сейчас мы имеем практически ООП (Cg 2.x, HLSL10)!
Но программистам всегда мало свободы :), и вот компания nVidia решила помочь? нам, и выдала сразу два расширения (GL_NV_shader_buffer_load, GL_NV_vertex_buffer_unified_memory) образующих т.н. Bindless Graphics и призваных ускорить приложения, использующие OpenGL, в 7 и более раз! И теперь самое захватывающее - в шейдерах (пока только GLSL) появились указатели! Да-да, они самые! Теперь в шейдере можно спокойно писать что-то вроде vec4* colorsPtr;
Со слов nVidia данная технология (Bindless Graphics) призвана облегчить огромный cost биндинга VBO и иже с ним. На самом деле теперь забота об этом перекладывается на плечи рядового программиста (хочешь быстро - пиши сам).
Что же, во всяком случае интересное решение, посмотрим что из этого выйдет.
А пока, всем линки для прочтения:
Bindless Graphics Tutorial
Bindless Graphics presentation
GL_NV_shader_buffer_load
GL_NV_vertex_buffer_unified_memory
Обсуждение на gamedev.ru

пятница, 10 апреля 2009 г.

Cпец-возможности GCC

На сайте IBM для разработчиков есть много полезного ( http://www.ibm.com/developerworks/ru/ ) :)
Вот и вчера тоже попалась очень занимательная статейка "Применение специальных возможностей GCC в ядре Linux" повествующая о некоторых особо интересных "финтах" компилятора GCC для языка C. Каждый такой "финт" сопровождается примером кода прямиком из ядра Linux, иллюстрируя полезность оных.
Даные "фичи" можно разделить условно на два типа: расширяющие функциональность языка; и помогающие компилятору в оптимизации кода.
После прочтения захотелось некоторые такие "фишки" и к нам в Visual Studio :)
Вобщем как всегда - приятного чтения!
Ссылка на статью - http://www.ibm.com/developerworks/ru/library/l-gcc-hacks/index.html

воскресенье, 29 марта 2009 г.

C++0x Features in VC10

Лениво полистывая Visual C++ Team Blog наткнулся на ОЧЕНЬ ДЛИННЫЙ пост в двух частях про С++0x Features in VC10.
Конкретно в посте идет речь о четырех фичах С++0x доступных в Microsoft Visual Studio 2010 CTP - lambdas, auto, static_assert и rvaluer references.

До конца еще пока ниасилил но обещаю очень занимательное чтиво. 8)
Часть 1
Часть 2

воскресенье, 15 марта 2009 г.

Немного музыки

Этот трек меня бодрит по утрам. Я поклонник электронной музыки и не могу не поделиться хорошим треком с людьми :) Слушаем!
Dave Darell - Freeloader (Spencer And Hill Remix)

воскресенье, 22 февраля 2009 г.

Little helpers

Наверное у каждого программиста есть такие маленькие функции, которые не делают ничего сверхъестественного, однако сильно упрощают жизнь.
Вот и у меня есть. И решил я что по мере появления новых буду публиковать их у себя на блоге, авось кому пригодится.
Начну с сегодняшней маленькой функции. В моем движке fEngine есть конечно же класс строки, однако когда пишешь маленькие демонстрашки или просто тесты, не всегда удобно его целиком подключать. Вот и сегодня мне было лень его подключать к моей новой демке OpenGL 3.0, а нужно было всего-навсего заменить в строке все пробелы на символы перевода каретки. Таким образом родилась такая малютка:
template<int what, int to>
int change_char( int c ) { if ( what == c ) return to; return c; }

И с помощью нее задача была решена просто и елегантно:
std::transform( extensions.begin(), extensions.end(), extensions.begin(), change_char<' ','\n'> );

В будущем постараюсь выкладывать наиболее интересные такие "помогашки", и возможно, соберу свои бывшие и новые в один файл и выложу здесь.

суббота, 21 февраля 2009 г.

Платформа 2009

4–5 Декабря в Москве прошла очередная, десятая ежегодная конференция от Micro$oft - "Платформа 2009. Определяя будущее". Лично на конференциия не присутствовал, но был заинтересован. Очень сильно интриговал тот факт, что на конференцию приедет выступить с докладами сам великий и могучий Марк Руссинович (профиль докладчика).
Особый интерес для меня как для программиста представлял доклад "C#. Взгляд в будущее", рассказывающий историю развития языка C# его зарождения в 1998-м году и появления в 2002-м году первой его версии 1.0, до версии 4.0 которая будет доступна в VisualStudio 2010.
Итак, чтоже такого интересного нас ждет в C# 4.0?
1)
Динамическая типизация объектов.
смысл в том, что мы можем напрямую сообщить компилятору что мы не знаем точного типа объекта, и что привязка к его методам должна быть выполнена в Run-Time. для этого введено новое ключевое слово dynamic :
То что раньше приходилось делать так:
object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add",
BindingFlags.InvokeMethod, null,
new object[] { 10, 20 });
int sum = Convert.ToInt32(res);

Теперь можно сделать так:
dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);

Сразу хочу заметить, что тем кто, в связи с Dynamic Dispatch, переживает за производительность, Micro$oft обещает реализовать эффективный Call Site Caching.

2) Параметры по умолчанию и именованные аргументы.
Некоторым это должно быть знакомо. Да! Такое есть в языке Objective-C, так что кто писал под MacOS удивлены не будут. Однако для C# это очень крутое нововведение. Смысл его в том, что можно пропускать дефолтные параметры, а также менять порядок передачи параметров. Вот простейший пример:

можем написать такую функцию
public void M(int x, int y = 5, int z = 7);

и она будет иметь такие варианты вызовов:
M(1, 2, 3); // обычным образом
M(1, 2); // опущен последний параметр z – тоже самое, что вызвать M(1, 2, 7)
M(1); // опущены 2 последних параметра - y и z – тоже самое, что вызвать M(1, 5, 7)

M(1, z: 3); // передача фактического значения по имени формального параметра - z
M(x: 1, z: 3); // передача двух значений по именам параметров - x и z
M(z: 3, x: 1); // аналогично предыдущему


3) Упрощенная работа с COM.
То чего всем так не хватало! Наконец у Micro$oft дошли руки. Встречайте - теперь вместо такой колбасни
object fileName = "Test.docx";
object missing = System.Reflection.Missing.Value;

doc.SaveAs(ref fileName,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);

можем просто написать
doc.SaveAs("Test.docx");

Ура товарищи.

4) Ко-вариантность и контра-вариантность.
Обещают безопасную ко-вариантность. Предлагается статически проверяемая вариантность по месту определения, а также типы значений теперь всегда инвариантны
IEnumerable<int> != IEnumerable<object>

5) Компилятор как сервис.
Еще одна очень интересная штуковина в C#4.0 - это Evaluator - класс для компиляции и исполнения кода в Run-Time! Да здравствует скриптование! Программа во время выполнения может в зависимости от ситуации и параметров генерировать код, компилировать и выполнять его.
CSharpEvaluator ev = new CSharpEvaluator();
ev.Usings.Add("System");
ev.Eval("for (int i = 0; i < 10; ++i) Console.WriteLine(i * i);");

Было много еще всего вкусного. Рекомендую сходить на сайт http://platforma2009.ru и узнать больше.

пятница, 20 февраля 2009 г.

Attention! Реклама! :)

Сегодня мне выпало немного свободного времени, поэтому я решил наконец заняться своим блогом. Так как я являюсь модератором на форуме портала Сообщество украинских разработчиков игр , то не могу его не отрекламировать :) Надеюсь Раптор не засудит меня :)) Этот портал - попытка создать Украинский аналог форуму gamedev.ru, который бы объединил наших "вiтчизняних виробникiв" :).

Также я успел выложить на этом портале 2 свои статьи:

1) Расчет TBN векторов. Да, именно тех самых, которые образуют базис касательного пространства для перевода векторов нужных для расчета освещения (источник света, направление взгляда и т.п.) в пространство текстуры-normalmap'ы.
Статья сопровождается полным исходным кодом на С++.
http://gameworld.com.ua/showthread.php?t=195

2) Пишем GLSL шейдеры в RenderMonkey - Specular Lighting + Heat Haze. Как продолжение предыдущей статьи, эта статья рассказывает о двух технологиях - попиксельное бликовое освещение (в статье используется модель Блинна(Blinn)), и эффект искажения изображения как от горячего воздуха (heat-haze).
Статья сопровождается полным исходным кодом GLSL-шейдеров и готовым проектом для RenderMonkey 1.6
[Внимание! Для просмотра второй статьи Вы должны быть зарегистрированы на форуме и иметь два сообщения]
http://gameworld.com.ua/showthread.php?t=197

Первые официальные скрины моего движка

Наконец в сети выложили первые официальные скриншоты третьей части пошаговой стратегии "Герои Мальгримии"! Эта часть будет переведена в 3D благодаря моему движку - fEngine. Так что эти скрины есть его первая публичная демонстрация.