Category Без рубрики

Анимация и события.

Сегодня,правда в сыром пока ещё виде, сделал привязку скриптов/собьтий к любому времени трека анимации (не только к ключевым кадрам но и ммежду ними ессно). Теперь с помощью этой фишки я озвучил шаги игрвого персонажа в точное время анимации а не тупо “проигрывание зацикленного трека ходьбы” что ИМХО УГ ещё то. Класс. Можно привязать к событиям что угодно, хоть скрипт порабощения мира и на каждом шагу own it : D

0
0

Багфиксы.

Слишком много УГ в проекте. Решил подчистить всё. Оказалось что освещение и тем более блики всё время у меня вообще не верно считались!!! Переписал, собсно вот парой строк сделал:

0
0

GUI. Продолжение.

Вот наконецто защитил диплом и имею больше свободного времени на движок.

Пофиксил несколько оставшихся мемориликов, пофиксил подчистку всего мусора после выгрузки движка (в видеопамяти некоторые объекты оставались : ) И решил пройтись сначала по движку и привести всё в подобающий вид. Начал с GUI. Множества контролов пока ещё не хватает но больше всего не радовало отсутствие нормальной поддержки скинов для GUI. Вот, посидело немножко, переписал дофига в GUI (по красивше) и сделал поддержку скинов. Правда нужен ещё редактор скинов так как вручную я риальне запарился считать пиксели : D

Вот тут окошко, чекбокс и кнопка. Всё отскинено. Окно под Win7 сделал xDD Только нету кнопок закрытия, сворачивания и т.п. Осталось допилить RadioButton и написать всяческие списки. А так всё шоколадно.

0
0

12 часов ада

2.5 дня писал PSSM. Из них последний мне ещё надолго запомнится…

Надоже! 12… ДВЕНАДЦАТЬ часов подряд ебался с багом в PSSM – неверно считалась глубина! Упорно решил добить сегодня и не отвлекаться ни на что. Какбэ дело принципа – “сделаю и точка”. Ну собсно и сделал.

[цитата моего сообщения в аське]
Действительно полезно отвлекаться от проблемы : ))

Пил чай в стеклянном станкане. чота поставил напротив другого станана. В голову пришла мысль об альфаблендинге…БИНГО! альфаблендинг был включен и глубины ТУПО СМЕШИВАЛИСЬ : D вырубил перед отрисовкой карты глубины альфу и вуаля, тени работают! ГЕНИАЛЬНО БЛЯ : D

Надо же. Такая глупая фишка и столько мозга вые*ано было! А сколько бутербродов съедено а сколько пепси выпито…ууууууу. Но тем не менее меня как всегда ждала заслуженная награда – чёткие классные тени ^^

Тут PCF 2×2. Можно будет 3×3 сделать попозже.

Скрин да, ни о чём : )))) Даже выключена фильтрация текстур внизу на террайне и объектов нету. И пох! Главное что естьо пруф существования PSSM ^^ : P

0
0

Восстанавливаю систему растений – часть 2: да придёт трава

Сделал BVH для куллинга растительности. Полёт нормальный : )

Однако угнетает тот факт, что растительность хавает слишком много оперативной памяти : ( Всё из за того, что самих растений на ландшафте – десятки миллионов!! Я храню позицию кадого растения – 16 байт. Вот и выходит астрономической прожорливости травка : (

Вот несколько скринов. Они WIP. Тут к траве не применяются тени, не применяется цвет ландшафта.

Просто так выложил : )

Травко:

Или травку или меня или меня травкой проглючило и она начала летать:

Трам пам пам

Сверху трава не выглядит Унылым Говном : )

продолжение следует…

0
0

Восстанавливаю систему растений – часть I

Вот.. решил поднять растительность (долгое время всё было закомментено)

Первый скрин первого испытания. На скрине массив деревьев расставлен по ландшафту, отрисован хардварным инстансингом. А также игрок. Почему красный? ээм, на нём просто дефолтная текстура “NoTex.dds” ибо текстуру я ему не назначил (както влом). И в руках у него автомат – прицеплен к костям.

А, кстати,да, кости…

Engine updates:

[+] Добавил иерархию трансформаций объектов. Теперь можно объекты друг к другу цеплять (например зщаписку к двери)
[+] Добавил привязку объектов к костям скелета меша. Теперь вот челу на скрине дал в руки оружие : ) Всё работает шоколадно.
[?] Начал делать поддержку скриптов в треках анимации. Тоесть можно будет какому либо кадру анимации или событию назначать скрипт : )

0
0

В задницу этот ODE…

Сколько этта гадина (ODE) мне крови попила… жесть. Сколько бессонных ночей ушло на настройку ODE!! И всё впустую… ODE ну уже черезчур бажный! То предметы застревают друг в друге, то проваливаются, то система взрывается. Эти баги вылазят везде – где можно и не можнО! Большая часть разработки движка уходить ТОЛЬКО на настройку параметров ODE! Последней каплей было то, когда я сделал физику ландшафта! Оооо… это цирк натуральный! Люди, передвигаясь по ландшафту, вечно в нём застревали, после чего выпрыгивали очень высоко! : D Но было не очень смешно т.к. в моменты застревания в ландшафте двиг..ээ..да чё там двиг.. вся система ложилась нафиг! Секунд 10 были стабильные 3 ФПС а потом всё возвращалось в норму до следующего раза! Нее, нафиг такое счастье!!!!

Порывшись в инете, нашёл несколько физдвигов. PhysX не понравился изза “мутной” политики NVIDIA в отношении него. Есть ощущение, что его скоро сделают платным. Та и дрова таскать с собо не охота.

Посмотрел на Newton physics engine – помоему тоже самое что и ODE, однако сразу насторожило то, что гравитацию нельзя выставить! нужно применять её самому о_О. Бред какойто. Та и функционал вместе с качеством симуляции оставляют желать лучшего… фтопку!

И вот.. наконецто я нашёл Bullet! Вот он, ИМХО лучший бесплатный физдвиг! Порадовало наличие SoftBody физики : ) Движок на первый взгляд сделан качественно. Много “фишек”, легко добавляются свои типы физических объекто в и алгоритмы столкновений! Качественная симуляция, присутствуес CCD(!).

Решил юзать его. Однако появилась небольшая проблема – нету враппера для Bullet! O_O Долго я искал врапперы, пробовал разные – одно фуфло. И тут случайно я забрёл сюда: http://code.google.com/p/bulletsharp/ Здесь Andres Traks пишет свой враппер под названием “BulletSharp”! Враппер написан на C++CLI, тоесть ни каких лишних библиотек : ) Подключаем 1 библиотеку,будто она написана на C# и вперёд! : D Враппер ещё на альфа версии, однако большинство “жизненноважных” фич уже сделано : ) Активность у проекта очень высокая, апдейты выходят каждый день, автор адекватный и всегда быстро реагирует на просьбы и замечания по врапперу. Всё путём ; )

Теперь юзаю Bullet и ни капли не жалею о том, что больше не юзаю ODE.

Прогресс движка:

[+] Сделан базовый KinematicController игрока! Не стоит думать, что я только для игрока, которым играет человек, сделал физику : ) В моём движке ннапример человек-NPC также является игроком – построен на классе CPlayer.
[*] пофиксил баги с физикой, пофиксил текстурирование ландшафта, пофиксил контроллер камеры! Теперь камера работает мегоидеально! : ) Контроллер позволяет с лёгкостью переключаться между First-person и Third-person типами управления, позволяет настраивать максимальные углы поворота камеры, скорость, плавность, всяческие эффекты (трясение при взрыве например).
[+] Добавил реестр классов сущностей. Зачем нужны классы – расскажу вкратце: представим что у нас в игровм уровне находятся 2 бота! Это люди. Один человек является снайпером а второй обычным воякой с АК-47 например. Это один и тотже игровой класс CPlaye, однако модель поведения и некоторые специфичные параметры у них разные. ЧТо теперь? Делать для каждого вида игрока свой класс? Бред!: D Мой реестр классов инициализируется ил LUA скрипта. Тоесть чтобы создать новый класс сущности, мы должны создать его описание в LUA скрипте EntityRegistry.lua Он является базой данных классов сущностей. ри запуске движка база данных сущностей из скрипта грузится в реестр классов. После этого мы можем спокойно создавать инстансы любого класса одной лишь строкой!

ну к примеру ПСЕВДОКОД:

Entity player = Factory.BuildEntity(Registry.GetClass(“Player”));

Всё! Мы создали игрока одной строкой : ) При чём у него уже настроено поведение(AI) и некоторые параметры. Удобно в общем : D

*ушёл прогать дальше*

0
0

Пришествие ODE

Сегодняшний день был довольно продуктивен.

С утра понял, что статичная геометрия меня уже сильно подзае.. поднадоела. Так я решил переписать всю физическую систему движка. Жесть, вот это меня больше всего и парит – чем больше кода, сложнее движок, тем сложнее что-либо исправлять в нём. Поменял строку и получил 50-100 ошибок, а строк таких уйма. Вот и сижу, трачу пол дня только лишь на исправление ошибок : ) Результат, конечно, радует но, всёже, кому нужны такие пляски с бубном? А всё идёт от некачественного планирования работы и структуры программы. Вот только планировать как-то не особо получается : Не, не то, чтобы я такой тупой был, просто не имею представлоения о том, что же нужно делать то : D Это же мой первый движок. Вот так шаг за шагом, наступая постоянно на свои же грабли, набираюсь опыта, оттачиваю движок. Так сказать медленно но верно движусь к цели : )

Сегодня, как я уже говорил, переписал физическую систему. Всё построено с учётом максимального удобства испольования, возможности смены физического движка. На данный момент используется ODE (Open Dynamic Engine) в качестве физического движка. Ну он, конечно, не такой навороченный как PhysX но мне его возможностей пока что хватает да и враппера нормального для PhysX-а я не нашёл (одно старьё). Да и впринципе не важно.

Гы, наконец добавил физику ландшафту : ) теперь можно ходить по ландшафту и пинать кубики : D Всё пока что работает чётко.

Осталось сделать нормальное физическое описание для игрока. Ну, чтобы прыгал, бегал и т.д. : )

0
0

GUI re-re-re invent wheel

Сегодня какой-то мегосуровый день о_О Что по жизни что в движке – полный ахтунг.
Сделал генерацибю шрифта в движке. Ну как генерацию.. вообщем как весь процесс выглядит:

1. создаём экземпляр GUIFont – передаём в него имя файла шрифта, который отрендерить, размер шрифта (как в винде) и наборы Unicode диапазонов букв.
2. движок загружает *.ttf (True Type Font), по указанному пути, рендерит все буквы с указанными параметрами в текстуру шрифта, генерирует описание к шрифту

и собсно всё. Шрифт можно применить к любому элементу GUI.

Сделал элемент GUI: Label. В нём реализован рендеринг текста, выравнивание текста по краям, по центру при чём вертикально и горизонтально + базовое форматирование текста.
Вообще весь GUI переписал процентов на 70. Но теперь доволен им ибо всё рисуется быстро и правильно : )

вот несколькими простыми строками накидал простейшее окно:

0
0