Category Без рубрики

Шрифты в движке

[+] подключил к проекту freetype
[+] сделал генерацию текстурных шрифтов
[*] окончательно допилил лог, файловую систему.
[+] поел пельменей
[+] добавил врапперы текстуры и вершинного буфера, свои классы потоков.

На очереди загрузка и рендеринг объектов с дефолтным шейдером и сценеграф трансформаций.

Вот пример – кусок текстуры шрифта, сгенеренный в рантайме моим движком, используя мего библиотеку freetype

Кстати, большое спасибо Andrey, Sergio, FDsagizi, Wolshebnik за помощь в раскуривании С++ и графике!!

0
0

WIP news

Да пошёл он в жопу этот C#. К чертям блин! Заипал совсем. Кроссплатформенности нет, сцуко, тянет НЕРЕАЛЬНОГО размера фреймворки, тупит на массивных вычислениях и главное – тысяча дроидов, ОПЯТЬ жопа с компилляцией убер-шейдеров!! Арррр. Опять если много шейдеров компилить, то чем больше компилится тем КРИВЕЕ они компилятся. Если после компилляции каждого шейдера вызывать ещё какие-нибудь функции компилера, например препроцессинг убер-шейдера БЕЗ последующей компилляции то ещё несколько шейдеров компилятся нормально а потом опять задница.
Да, блин, конечно, это не вина КОНКРЕТНО C#, это вина кривого SlimDX (я не просто уверен, я знаю что я НЕ накосячил на этот раз). Но блин. Ну нету ни какой другой альтернативы для C#! MDX помер давно, XNA – гори в аду. ПРОСТО обёртки над DX11 нету – вот в этом и проблема C#, под него нихрена нету кто бы что не говорил (по сравнению с С/С++). Да и пошло оно всё лесом! Буду писать только на С++.

Собсно теперь C# так сказать “движок” – в топку. Пусть себе пылится. Может немного позже отдам кому-нибудь, пусть мучаются ))

1. Добавил свою виртуальную файловую систему
2. Написал content provider для ZIP архивов. Можно читать/писать файлы в ZIP архивах впринципе даже не зная, что работа идёт собсно с архивом. У каждого провайдера контента общий интерфейс, который и используется юзером.

Ну например так я могу создать провайдер ZIP, создать файл в архиве и записать в него данные. Ну, вообщето всё будет красивше чем в примере ниже – это только наброски.Но всё уже работает отлично : )

IZipFileContentProvider prov(_text(“C:\Users\L\Desktop\TextNEW.zip”));

IFile* file2 = prov.getFileSystem()->GetRootFolder()->NewFile(_text(“OLOLOTEST.txt”));
IDataStream* stmWrite = file2->OpenWrite(FM_OPEN_OR_CREATE);
char data[] = {‘1’, ‘2’, ‘7’, ‘8’, ‘8’, ‘A’, ‘A’, 0};

stmWrite->Write(data, 7);
file2->Close();

вот собсно и всё ) Не нравится?? о_О А мне пофиг! : D Мне нравится.

Пофиксил работу со строками. Теперь движок полностью поддерживает юникод. Multi-byte character set не стал юзать Да и вообще это НАСТРОЙКА в студии. Полагаться только на настройки – FAIL, когда речь идёт о кроссплатформенности ИМХО.

Кстати посмотрел “пилу 7” только что – таки доставила. По сравнению со скайлайном – куда лучше.

p.s. http://news.softodrom.ru/ap/b8078.shtml ^____^

0
0

Ну и занудное это занятие – писать мультирендер!

Начал писать DirectX11 рендер. Честная многопоточность очень понравилась, сам API очень похож на DX10 API Поэтому смог повторить DX10 рендерер очень быстро.

DX11 порадовал честной многопоточностью : ) Да и поддержкой FeatureLevel DX9, DX10 : ))

Вот я и подумал – а нафига мне паритсься с мультирендером, делать подобие константных буферов в DX9 да и вообще поддерживать его рендерер, если есть DX11!! : P

К моменту, когда напишу “игру” (к 3012 году), DX9 будет уже полностью не актуален! Собсно нет смысла его поддерживать! Всёравно движку нужны минимум 3.0 шейдеры.

Мультирендер остаётся, просто DX9 рендерер больше не буду писать : ) Хотя на всякий пожарный закоментеным оставил.

0
0

WIP News (C++)

C++ движок

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

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

g_pEngine.GetPluginServer()->LoadPlugin(“RendererDX10.dll”);

0
0

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