WIP News

Работа над С++ проектом сегодня ВРЕМЕННО ПРИостановилась. Всё дело в том, что мне необходимо (причины не важны) чтобы я мог скомпилировать движок как динамическую так и статическую библиотеку!

Изначально у меня проект динамической библиотеки. Аттачится к юзающему её проекту чётко, всё работает.

Решил скомпилить как статическую либу. Ну чтож.. как это сделать – х.з. аще : )) Полез в настройки проекта, поменял типа проекта с Dynamic Library (.dll) на Static Library (.lib). И реально! Проект скомпилился в .lib, вроде всё путём. Ан нет. Если я компилю с ней проект, юзающий движок, то компилляция прохоодит успешно! Но при запуске “игры” она всёравно требует .DLL движка. Как настроить – не ясно. Просмотрел 100500 раз настройки проекта.

slava_mib подсказал создать второй проект как статичную библиотеку, добавить в него существующие файлы и компилить LIB-ы спокойно. И это реально выход! Но хотелось бы конечно просто выбрать нужную конфигурацию солюшну и компилить без геморроя, только как это сделать и возможно ли – я не знаю.

Пока простаивает С++ движок, пишу C#.

Ну что.

— Первым делом вычистил из движка последние остатки DirectX. Теперь gAPI можно встретить только внутри класса рендерера.

— Пока подчищал – нашёл старый костыль, который подставил в место после отрисовки шадоумапы т.к. не знал природу бага, который возникал если не поставить этот костыль. Оказалось всё прозаично – вначале кадра я очищал Z-Bufer не 1 а 0 >_< — Оптимизтировал рендер в текстуру. — Сделал менеджер пост-эффектов. Ну скажем вот так я добавил HDR сцену: PostHDR HDR = new PostHDR();
scene.Graphics.PostEffectManager.Add(HDR);

Всё достаточно просто, однако менеджер ещё не завершён. Есть нерешённые проблемы.

[+] Добавил DirectX10 рендерер. Он ещё пустой.

Начал оборачивать ресурсы в DirectX10 рендерере.
Полностью обёрнуты:
InputLayout, VertexBuffer, IndexBuffer, VertexShader, PixelShader + Include(интерфейс), можно мои убер-шейдеры теперь компилить и в DX10 ^____^

также реализовал базовые функции рендерера – наблюдаю при запуске игры очищенное окно и GUI поверх него. Сцена ещё не рисуется в DX10.

Кстати. Отныне движок за кадр полноценно может рисовать сразу несколько сцен. Не просто одну сцену с разных камер а реально разные сцены. При создании сцены теперь необходимо указывать размер выходного изображения – текстуры, в которую отрендерилась сцена.

Собсно всё крайне просто – каждая сцена рисуется в текстуру, потом все ти текстуры передаются в OutputMerger который согласно указанным параметрам смешивает сцены. Блендит их или делает “картинку в картинке”. Поверх результата накладывается GUI и всё это выводится на экран.

Как-то вот так…

0
0

Свершилось…

В общем меня много что достало при разработке движка на C#.

В особенности траблы с врапперами всякой херни.

То в SLIMDX какой-то баг, то во враппере OGG хрень, которую приходится вручную править и вместо одного часа ебстись со звуком недели две и т.п.

Для C# не вижу я годных готовых мощных решений в плане звука, физики и графики и т.п.

Я ненавижу XNA и за бесплатно юзать ни за что не буду : ) Собсно других альтернатив, кроме SlimDX я не вижу.

Да ну.. к чёрту всё! Решил переписать движок на С++.

Вот, пол дня уже как сижу и пытаюсь его переписывать и с каждой минутой всё плотнее и плотнее приходит осознание того, как я херово знаю C++ : D

А ещё назло инет АЦЦКИ лагает – погуглить траблы аще нереально!!!!! >_< жопа какаято. После C# - С++ напрягает. Но “врагу не сдаётся наш гордый варяг” же : Без гугла так моим любимым методом тыка напишу всёравно. Долго и упорно вспоминал WINAPI : D В итоге таки сделал окошко : ))

#include “RenderWindow.h”
#define L_WIN32

LRESULT __stdcall WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
DestroyWindow(hwnd);
break;
case WM_KEYDOWN:
switch(wparam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
break;
}

return DefWindowProc(hwnd, message, wparam, lparam);
}

RenderWindow::RenderWindow(int width, int height)
{
g_hInst = GetModuleHandle(NULL);
g_hwnd = NULL;

//memset(&g_wndClass,0,sizeof(WNDCLASSEX));

g_wndClass.cbSize = sizeof(WNDCLASSEX);
g_wndClass.cbClsExtra = NULL;
g_wndClass.cbWndExtra = NULL;
g_wndClass.hbrBackground = (HBRUSH)GetStockObject(1);
g_wndClass.hCursor = (HCURSOR)LoadCursor(g_hInst, IDI_APPLICATION);
g_wndClass.hIcon = LoadIcon(g_hInst, IDI_APPLICATION);
g_wndClass.hIconSm = LoadIcon(g_hInst, IDI_APPLICATION);
g_wndClass.hInstance = g_hInst;
g_wndClass.lpfnWndProc = WndProc;
g_wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
g_wndClass.lpszMenuName = NULL;
g_wndClass.lpszClassName = L”Onotole”;

if(!RegisterClassEx(&g_wndClass))
{
MessageBox(g_hwnd, L”Can not create window class! We all gonna die!!”, L”OH SHIT!”, MB_OK);
}

if(!(g_hwnd = CreateWindowEx(NULL, L”Onotole”, L”Onotole window”, WS_OVERLAPPEDWINDOW, 10,10,width,height,NULL,NULL, g_hInst, NULL)))
{
MessageBox(g_hwnd, L”Can not create window! We all gonna die!!”, L”HOLY SHIT!”, MB_OK);
}

ShowWindow(g_hwnd, SW_SHOWNORMAL);
UpdateWindow(g_hwnd);
SetForegroundWindow(g_hwnd);
SetFocus(g_hwnd);

}

void RenderWindow::Update()
{
#ifdef L_WIN32
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_NOREMOVE)) {
if(!GetMessage(&msg,0,0,0)) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
#endif
}

void RenderWindow::SetCaption(wchar_t* text)
{
SetWindowText(g_hwnd,text);
}

RenderWindow::~RenderWindow(void)
{
}

Эт конечно только базовый вариант но уже оно есть, оно работает и это радует меня – нуба в С++ : )))

Также намутил главный класс движка, всякие енумы и т.п. Он может создовать рендерер:

g_pEngine.CreateRenderer(RT_DIRECTX10, RenderParams(320,240,0,false,false));

Пока что мегократко описал 4 рендерера – DX9,10, OGL, software. Буду вплотную заниматься DX10, потом остальные допишу (эт типа мультирендер возрождаю на С++)

Ещё написал базовый класс сцены, менеджера сцен, начал работу над логгером.

Маловато за сегодня но я просто ещё не привык к С++ : )

Перешёл на С++… решился таки..

0
0

WIP News

С прошлого поста как то было очень мало времени на двиг : ( Почти нихрена не сделал, фак.

Вот, взялся за него опять. Поднимаю системы частиц, делаю их более гибкими, так как они резко понадобились.

Собсно пока прицепил квады, сделал разные типы ориентации(гусары – молчать) квадов, сделал базовую физику для них. Сейчас пишу аффекторы столкновений, т.к. физдвиг юзать в планах нет в самое ближайшее время.


0
0

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

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