Нашёл различные баги в рендеринге. Большинство из них из за копипаста! О_О Копипаст – ЗЛО!! Ррр, надо отучиваться.
Теперь ни каких варнингов от DX-а нет, ФПС значительно поднялся, а волосы у меня стали ещё более “мягкие и шелковистые”(с)
За модельку интерьера спасибо Аврелию, любезно выложившему её на форуме gamedev.ru
Занялся собсно GUI. Пока сделал нормальную систему сообщений, менеджер слоёв, оконный менеджер, рендеринг текста и несколько видов различных контролов.
Вот скрин с 3 из них – “надпись”, “текстовое поле”, “кнопка”. Всё кликабельно, настраиваемо. На всё что можно/нужно привязаны события. Есть поддержка скинов.
Итак, начнём перечисление скромных апдейтов:
1. Пофиксил прозрачность. Есть и альфа тест и альфа бленд. Работают вроде годно : ) Ну, если честно не совсем пофиксил )) Альфа бленд всё ещё криво освещается. Дело в том, что у меня же Light PrePass рендеринг, который не дружит с прозрачностью. В следствие чего все объекты с полупрозрачностью надо рисовать форвард-рендерингом, что влечёт за собой написание ещё одного рендера. Жесть. Не, ну я конечно могу костылей понаставить и за пол часа сделать рендеринг стекляшек, но мы ж, поработители мира – такие, ага, суровые ) Надо сразу делать “качественно”. Лол!
2. Пофиксил компилятор ресурсов. Теперь всё компилится удобно! : )
3. Полностью переписал экспортёр моделей. Теперь для модели в 16 к треугольников экспорт идёт не 30 секунд а 1-2 секунды. жЪр!
4. Экспортнул анимацию.. загрузил – чотко рендерится ) но в самом конце трека анимации небольшой рывок есть. Кажется я знаю в чём дело и пофиксю на неделе.
5. Начал писать GUI! Посмотрел я wxWidgets, MYGUI, CEGUI – да нуу. Это “не то”. Лучше я свой напишу!
Кстати по случаю GUI собрался и сделал нормально события/делегаты (как в шарпе почти). Ну, вот например создание кнопки и аттач к ней метода.
//add button
GUIButton* button = new GUIButton(gui);
button->SetPosition(Vec2i(50,50));
button->SetWidth(200);
button->SetHeight(100);
button->SetBackColor(Vec4f(1.0f,0.0f,0.0f,0.7f));
mainMenu->AddChild(button);
button->Event_MouseLeave+=NewDelegate(this, &CrysisGame::BT1Leaved);
button->Event_MouseClick+=NewDelegate(this, &CrysisGame::BT1Click);
Ну и остальные бла-бла-бла методы.. выпонели же, да?
и сами методы:
void BT1Click(GUIWindow* sender, int b)
{
static_cast
}
void BT1Leaved(GUIWindow* sender, int b)
{
static_cast
}
7. Добавил рендеринг в текстуру параметров поверхности! И заметил значительный спад FPS : ( Зато теперь могу делать материалы с разными BRDF!!!! ^______^
Кстати купил Crysis 2! : Сначала жутко демотивировал меня а теперь обратный эффект – мотивирует делать более качественную графику )
Ох, пойду я спать… вчера отмечал 2 днюхи… fuckin’ headache!