Сообщения

Сообщения за 2010

2D Физика для игр - Separate Axis Theorem - Вектор сдвига

Изображение
Как и обещал продолжаю перевод серии статей про игровую физику. Сегодня я напишу как получить вектор сдвига и разьединить 2 столкнувшихся многоугольника. Как было точно подмечено анонимным комментатором метод отделяющей оси работает только для выпуклых многоугольников. Итак, дано: 2 столкнувшихся многоугольника Задача: Разьединить 2 многоугольника, причём минимальным сдвигом. В прошлом посте я писал как узнать пересекаются ли 2 многоугольника, это полезная информация, однако мы можем узнать больше. В случае если 2 многоугольника пересекаются хотелось бы сдвинуть их от друг друга, чтобы они не пересекались.

2D Физика для игр - Separate Axis Theorem

Изображение
Нашёл в интернете очень интересную подборку статей и кода, которая описывает написание физики для игр. Я подумал что было бы полезно перевести серию тех статей и портировать код на XNA. Как для себя, так и для интересующихся игровой физикой. Первая статья будет посвящена Separete Axis Theorem  ( теорема о разделяющей оси )- методу проверки столкновений между многоугольниками. Данный метод является наиболее быстрым на данный момент и используется повсеместно во всех 2D физических библиотеках. Итак, задача : Нам даны два многугольника в виде массива координат вершин. Необходимо проверить их на пересечение.

Vkontakte Merchant API

Сегодня был свободный день и почти всё время провёл дома. Но решил не тратить его попусту и сделать небольшой сайт-магазин для моей игры, попутно немного изучив Vkontakte Merchant API . В принципе что меня удивило - это простота установки данного API. Сам процесс вставки в сайт кнопки покупки действительно занимает минуты,а большинство времени было потрачено на написание заглушек для Callback-страниц.

RadialBlur HLSL Shader - 3 сэмпла

Решил добавить в игру простенький эффект радиальной размытия . В нете к счастью нашёл много информации, в результате скомпонованный шейдер получился следующего вида: sampler ColorMapSampler : register(s0); float4 radialBlur(float2 vTex:TEXCOORD0):COLOR {     float4 result=float4(1,0,0,1);     //массив с сэмплами. тут их 3 для производительности     float samples[3] = {0.05 ,0.03,  0.01};
Убрал баг с Alt-Tab, который возникал в полноэкранном режиме игры. Оказывается теперь XNA сама заботиться об восстановлении графического устройства после его потери. Я же думал что его нужно восстанавливать вручную по событию DeviceLost, что конечно неправильно. Слава богу существует класс Trace который позволяет сделать быстрый лог того что происходит и значительно упростил отладку и поиск ошибки.

Диплом в Шаге - 12/12

Наконец-то сдал диплом в Шаге на оценку 5+. Процесс защиты длился 12 часов с часовым перерывом, но и студенты и преподаватели выдержали этот экзамен =) На радостях выкладываю видео дипломного проекта и арканоида. Разработка не прекращается,а продолжается и как я обещал скоро будет новое оформление и релиз.

HLSL шейдеры для чайников

Изображение
Шейдерная графика сейчас наиболее популярна. Большинство игр так и пестрят системными требованиями Shader 2.0, что конечно разочаровывает владельцев стареньких ПК, и радует картинкой современных геймеров. В этой статье я попытаюсь рассказать вкратце о том как писать HLSL шейдеры на XNA и в результате получить шейдер радиальной градиентной заливки. Итак. Нам понадобяться следующие инструменты: XNA Game Studio  Видеокарта с поддержкой шейдеров Итак для начала мы создадим "Windows Game" проект в студии. Далее нам необходимо создать небольшую текстурку. Неважно её содержимое, сколько само её существование. Поэтому добавляем к Content новый элемент - текстуру 2*2.  Далее нам необходимо нарисовать её, поэтому добавляем в класс Game переменную Texture2D и загружаем её в LoadContent Texture2D texture; protected override void LoadContent()         {             // Create a new SpriteBatch    ...

Cycloid. Новости

Рад сообщить что разработка игры под XNA идёт полным ходом. Почти все предполагаемые фичи реализованы, так что работа переходит в стадию тестирования и допиливания. Кроме того я договорился с художником о создании оформления для игры. Конечно переоформление займет некоторое время, но оно того стоит. Могу только сказать что предварительные эскизы я уже видел и выглядит всё это очень даже неплохо. К сожалению бинарников и эскизов показать не могу, и в ближайшем времени их вряд ли кто то увидит. Buissness is buissness.

Farseer Physics и XNA

Решил переделать свой арканоид и вместо собственной физики использовать 2D физический движок Farseer Physics . Это наиболее распространённый физический движок для C# ( в частности под XNA ). Подключить был довольно просто - в комплекте идёт готовый пример использования, однако сразу столкнулся с первыми трудностями. Основная проблема с которой я столкнулся - это появление исключения ArithmeticException в методе вычисления угловой скорости ( AngularVelocity ). Что самое обидное было - это то, что исключения возникало не сразу, а в процессе игры. Долгие поиски причины не привели к решению проблемы, однако путём тыка ( самый действенный метод ) ошибка была устранена. Причиной такого поведения был факт того, что я не устанавливал MomentOfInertia для создаваемых тел. В результате данный параметр вычислялся автоматически движком и очевидно его значение превышало возможности движка. В результате я выставил вручную данный параметр в 1 и ошибка больше не появлялась. Данный параметр пока...

XNA - продолжая тему диплома

Изображение
Итак.... Я не знаю говорил ли я что я пишу 2 диплома? Если нет то теперь вы знаете. Один в универе и один в Шаг. Довольно весёлое занятие - попеременно забивать болт то на один, то на другой.... Сегодня я хочу написать о том что у меня получается с Шаговским дипломом. В Шаге я занимаюсь разработкой игры под платформу XNA. В качестве игры я решил переделать стандартную под iPod игру - Vortex. Это аналог арканоида, с отличием в том, что бита движется по кругу,и задача игрока не выпустить мяч за пределы круга. Собственно первая часть работы - организовать процесс игры, движение шарика и биты. Она у меня прошла довольно гладко. И вот сейчас я решил взяться за вторую - рефакторинг, организация игрового движка и наконец использования шейдеров. Небольшой тизер :) Основной идеей рефакторинга было создание классов для разделения функций между движком и логикой игры. Т.к игра двумерная я создал классы спрайтов,на основе которых позже создал классы анимированных спрайтов и анимаций. Краткая диагр...

Севастополь. Информатика-2010

Завтра уезжаю в Севастополь. Посмотрю город и заодно буду участвовать в конференции. Обожаю ехать куда то, особенно за казённый счёт. Как говорится на шару и уксус сладкий. Update: Фотоотчёт можно найти на http://picasaweb.google.com/jack.spektor/DuYLZ?feat=directlink

Наваял гаджет

Изображение
Чтото меня потянуло на гаджеты. Решил сделать небольшой гаджет для души. Смысл - жмём на кнопку и снизу вылетают воздушные шарики. Долго мучался с COM регистрацией и вызовом, но слава яйцам всё получилось. Встречайте - Bubble gadget https://docs.google.com/leaf?id=0B6h7yaggRA4pYzI3Mjc1OGEtNWYzNy00ZThlLWIwMzAtNWU4ZmJhYTdmYzJk&hl=en Альтернативная ссылка на загрузку: http://sites.google.com/site/jackdevolpment/files/gadget.gadget?attredirects=0&d=1 Более подробно о том как это всё было и какие мне встретились проблемы напишу позже. Сейчас спать.

Играемся с iTunes через Javascript

Довольно классна штука - этот айТюнс. И плеер хороший, и подкасты качает и вообще красавец. Ладна, к чему это я? Случайно узнал, что оказывается у него есть API. Работает через COM и позволяет получить полный доступ к функционалу плеера. Так что например вот такой нехитрый Javascript код iTunesApp = new ActiveXObject("iTunes.Application"); iTunesApp.NextTrack(); поменяет песню в плеере на следующую, а вот например var iTunesApp = new ActiveXObject("iTunes.Application"); var currentTrackName=iTunesApp.CurrentTrack.Name; var currentArtist=iTunesApp.CurrentTrack.Artist; alert(currentArtist+" - "+currentTrackName); покажет название текущей песни. У меня это например сейчас "Vampire Weekend - Oxford Comma" . Вот такие пироги. Кстати чуть не забыл - вся это красота работает только в случае Internet Explorer. Так что имейте ввиду :) Думаю как будет скучно - сделать парочку гаджетов для рабочего стола, чтобы управлял плеером,показывал текущую песню, плей...

Диплом. Черновик 3D рендера. Java

Диплом в самом разгаре... Я не сильно писал чем я занимаюсь в рамках диплома. А занимаюсь я проблемой параллельных вычислений. А именно - системой распаралеливания алгоритмов.Так уж сложилось что занимаюсь именно этой темой, а точнее продолжаю работу студента Виктора Бурдейного. Написал небольшой черновик 3D рисования на Java - думаю внедрить поддержки 3Д визуализации в систему - это даст возможность рисовать графики, которые будут упрощать понимание результатов работы алгоритма на кластере. В принципе я уже сделал визуализацию в 2Д для фреймворка, но алгоритм, который необходимо реализовать должен будет рисовать поверхность в 3Д, так что приходится разбиратся с 3Д костылями для Джавы. Вот такие пироги. Java Opengl (использует JOGL) https://docs.google.com/leaf?id=0B6h7yaggRA4pZGVmMDMyYmMtZTYyYi00NmE1LWI2YjQtM2E4OGRhNWI2OGI1&hl=en

Взлом алгоритма Эль-Гамаль( с помощью алгоритма Шенкса)

Данное задание мне выдавали по предмету криптология. Наверно один из немногих предметов, который мне кажется реально полезным и интересным. Реализовывал на Java т.к боялся что числа выйдут за пределы стандартных типов данных, а в Java для этого есть удобный тип данных BigInteger. Такто. Итак условие: В следующих задачах зашифрован алгоритмом ЭльГамала текст, написанный на английском языке. Использован следующий алфавит: "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| |,|.|". Блок "подсказки" расположен в начале криптотекста и является общим для всех его блоков. Его длина считается неизвестной. Найти секретный ключ и расшифровать текст. "5148154611033774886049492438294008383372872853501067660147906401592062201450665781876473" Открытый ключ: p=89981741 g=2 h=76976449 Часть первая - решение задачи целочисленного логарифмирования ( поиск секретного ключа a) На вход подаётся p,g,h package Shenks; import java.math.BigInteger; im...