понедельник, 18 октября 2010 г.

WIP News (C++)

C++ движок

[+] Добавлена система плагинов
[*] Дополнен рендерер DirectX10
[+] Обёрнуты несколько типов графических ресурсов для мультирендера
[*] Начал портировать свою математическую библиотеку с C# на С++


С плагинами долго провозился : ( Зато теперь удобно, можно с лёгкостью загрузить любой, поддерживаемый движком примерно так:

g_pEngine.GetPluginServer()->LoadPlugin("RendererDX10.dll");

пятница, 15 октября 2010 г.

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 и всё это выводится на экран.

Как-то вот так...

среда, 13 октября 2010 г.

Свершилось...

В общем меня много что достало при разработке движка на 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, потом остальные допишу (эт типа мультирендер возрождаю на С++)

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

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


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

вторник, 28 сентября 2010 г.

Апдейт скринов.

Какбэ скрины такиеже беспонтовые, но текстурки по-качественней поставил )

Намоделил геометрии, позже расставлю и отскриню более годные картинки )








суббота, 25 сентября 2010 г.

WIP News

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

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

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




пятница, 23 июля 2010 г.

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

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

четверг, 22 июля 2010 г.

Багфиксы.

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

пятница, 9 июля 2010 г.

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

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

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

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