Отладочная система для MU Online разработок: вывод отладочной информации

Автор 7mm, 2010 Дек. 05, 17:15

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] отладкаотладочная системаmu online разработки

7mm

Всем привет. Очередная порция вкусностей - простейшая система отладки, которую можно использовать в процессе разработки. Итак:

debug.h
VOID DbgInit();
VOID DbgFree();
VOID DbgMsg(PCHAR pDbgFmt, ...);
VOID DbgPrint(PCHAR pDbgFmt, ...);

debug.c
#include "stdafx.h"

static HANDLE DbgMutex = NULL;

VOID DbgInit()
{
DbgMutex = CreateMutex(NULL, FALSE, NULL);

if (DbgMutex && AllocConsole()) {
SetConsoleTitle("Welcome to the debugging console!");
} else {
DbgMsg("Unable to initialize console!");
ExitProcess(-1);
}
}

VOID DbgFree()
{
WaitForSingleObject(DbgMutex, INFINITE);
FreeConsole();
CloseHandle(DbgMutex);
}

VOID DbgMsg(PCHAR pDbgFmt, ...)
{
CHAR data[1024];
va_list args;

va_start(args, pDbgFmt);
wvsprintf(data, pDbgFmt, args);
va_end(args);

MessageBox(NULL, data, "[DEBUG]", MB_OK);
}

VOID DbgPrint(PCHAR pDbgFmt, ...)
{
CHAR data[1024];
va_list args;

va_start(args, pDbgFmt);
wvsprintf(data, pDbgFmt, args);
va_end(args);

WaitForSingleObject(DbgMutex, INFINITE);
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), data, lstrlen(data), NULL, NULL);
ReleaseMutex(DbgMutex);
}

Инициализация при загрузке DLL:

BOOL WINAPI DllMain(HINSTANCE hModule, DWORD nReason, LPVOID lpValue)
{
switch (nReason) {
case DLL_PROCESS_ATTACH:
DbgInit();
break;
case DLL_PROCESS_DETACH:
DbgFree();
break;
}
}

И собственно применение:

DbgMsg("This is a %sn", "DbgMsg");
DbgPrint("This is a %sn", "DbgPrint");

Как видно, вывод отладочной информации будет производиться на консоль, в случае с DbgPrint, или в окно MessageBox, в случае с DbgMsg. Форматирование осуществляется с помощью wsprintf, поэтому есть ограничение на длину сообщения (1024 байта), а также допустимые параметры (например, нельзя вывести float-значение). В процессе работы с консолью используется мьютекс - это позволяет обеспечить работу с консолью нескольких потоков.

SmallHabit


7mm

Цитата: SmallHabit от 2010 Дек. 05, 18:54  7mm у меня к вам вопрос, вы разбираетесь в OpenGL графике? =)

Да тут во всём приходится разбираться ;) Но профессионально - к сожалению, нет.

SmallHabit

Да вот просто тут решил "занятся"(изуродовать) графикой, и решил начать с малого - добавить туман, там где кончается прорисовка карты(ну сам вьюпорт в клиенте)... дабы при использовании 3Д камеры казалось что карта не обрубается и дальше чёрный экран, а как будто она вся в тумане(выглядит довольно таки прилично).

Ну в общем, хукнул функцию glEnable(незнаю почему её, наверное потому что в каком-то туторе она была хукнута, а других я незнаю). Поигрался с настройками glFogf,glFogi(ну вижу я в первый раз всё это), результат конечно не плох, но косяков больше.

Вот как выглядит хукнутая функция
void APIENTRY Mine_glEnable(GLenum mode)
{
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //хз, зачем, оно ничего не даёт
GLfloat fogColor[4] = {0.8, 0.8, 0.8, 0.0}; //цвет тумана

//рисуем туман?
glEnable(GL_FOG);
glFogf(GL_FOG_DENSITY, 255.0f);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_START, 1190); //начало
glFogf(GL_FOG_END, 2400); //конец
glHint(GL_FOG_HINT, GL_NICEST);

Real_glEnable(mode); //типо вызов оригинала
}

В общем вот что в игре -

Вот и косяки -

Я не говорю об этом ужасном чёрном фоне, который я как не пытался сменить - всё без успешно, получалось только создавать "свои" стенки(по принципу сурсов неба), но появлялись лишь лаги и опять баги. В общем буду рад любой помощи в этом не лёгком для меня деле =)

Эврика

void APIENTRY Mine_glEnable(GLenum mode)
{
/* if(fLogFile) {
fprintf(fLogFile,"glBegin(%d)n",mode);
fflush(fLogFile);
}*/

if(mode == GL_BLEND)
glDisable(GL_FOG);

// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// GLfloat density = 0.3;
GLfloat fogColor[4] = {0.8, 0.8, 0.8, 0.0};

//rendering global fog
glEnable(GL_FOG);
glFogf(GL_FOG_DENSITY, 255.0f);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_START, 1190);
glFogf(GL_FOG_END, 2400);
glHint(GL_FOG_HINT, GL_NICEST);

if(mode == GL_BLEND)
glDisable(GL_FOG);

Real_glEnable(mode);
}

if(mode == GL_BLEND)
glDisable(GL_FOG);

при отрисовке прозрачных текстурок,отключаем туман, и вуаля, в тумане все текстуры показываются так как и должны =)

Mr.Kernighan


SmallHabit

Они ничем не отличаются от старых, просто с фиксом, всё отображается как надо+туман



Осталось только настроить его для лучшего вида =)

Ну вот для сравнения Елбеланд(с туманом и без)




Mr.Kernighan

Спойлер
Красиво, беcспорно!
Кстати Small, есть к тебе две просьбы:
1. На счет статейки
2. Сможешь одолжить на время account от офф. корейского сервера? (без левых движений с моей стороны, по поводу account/а).
Буду тебе благодарен.
[свернуть]

SmallHabit

ЦитироватьКрасиво, беcспорно!
Кстати Small, есть к тебе две просьбы:
1. На счет статейки
2. Сможешь одолжить на время account от офф. корейского сервера? (без левых движений с моей стороны, по поводу account/а).
Буду тебе благодарен.

1. Время,время,время+)))
2. На корее у меня нету акк(там по корейской прописке вроде акк)

Mr.Kernighan


7mm

2SmallHabit
Спасибо за туман, буду смотреть. Есть какие наработки по камере? Общедоступный кодес (Camera3D) уж больно коряв, я уже некоторое время вожусь с ним, чтобы сделать например как в ЛА2, но пока то что получается мне не нравиться... Не люблю жёстких патчей, пытаюсь сделать в динамике на базе перехвата функций и расширения функционала.

Bason4ik

на РЗ,нужно у Собиеха поспрашивать,он ведь помоему перебрал клиент АриевМУ...мот чего и подскажет)

SmallHabit

ЦитироватьСпасибо за туман, буду смотреть. Есть какие наработки по камере? Общедоступный кодес (Camera3D) уж больно коряв, я уже некоторое время вожусь с ним, чтобы сделать например как в ЛА2, но пока то что получается мне не нравиться... Не люблю жёстких патчей, пытаюсь сделать в динамике на базе перехвата функций и расширения функционала.

Да незачто, ну я смотрел камеру, дёргал дистанцию видимости и т.д, но это гиблое дело с Му, ибо например если в основном на всех мапах я выставлял ClipX и ClipY по 11000, и клиент шёл как по маслу, то например в Нории 11000 это уже много и фпс падал до 18-17(3.4Ghz IntelCor2Duo, 4GB DDRII,1GB HD4850), что не есть хорошо, а приближение удаление я оставлял как есть. Темболее на каждом железе по разному будет, поэтому надо делать гибкую настройку этой самой камеры. В общем нюансов много, но если постаратся что-то интересное можно вынести из всего этого. :)

Вот видео, можно посмотреть как работает камера(простенько, но для му хватает) :

Цитироватьна РЗ,нужно у Собиеха поспрашивать,он ведь помоему перебрал клиент АриевМУ...мот чего и подскажет)
Ага, так он тебе и выдаст, он в паблик давно ничего не выкладывает помойму... =)

Fiesta

Цитата: SmallHabit от 2010 Дек. 07, 23:30  Да незачто, ну я смотрел камеру, дёргал дистанцию видимости и т.д, но это гиблое дело с Му, ибо например если в основном на всех мапах я выставлял ClipX и ClipY по 11000, и клиент шёл как по маслу, то например в Нории 11000 это уже много и фпс падал до 18-17(3.4Ghz IntelCor2Duo, 4GB DDRII,1GB HD4850), что не есть хорошо, а приближение удаление я оставлял как есть. Темболее на каждом железе по разному будет, поэтому надо делать гибкую настройку этой самой камеры. В общем нюансов много, но если постаратся что-то интересное можно вынести из всего этого. :)

Вот видео, можно посмотреть как работает камера(простенько, но для му хватает) :

Ага, так он тебе и выдаст, он в паблик давно ничего не выкладывает помойму... =)
Мое мнение,если вообще кому интересно.
Это очень лишняя вещь с камерой,потому что все очень на столько привыкли к стандартной камере,а за туман 10+

[P4F]v1ru5

3д камера это вообще лишнее для му... му - это кривая во всех отношениях игра... в данном случае мы рассматриваем графику, которая оставляет желать лучшего... а к тому-же еще это убожество под 3д камеру... бррр... всегда было страшно приближать экран мушки...

epmak

SmallHabit, впечатляет.
[P4F]v1ru5, Fiesta - если есть возможность, почему бы и не попробовать?

Fiesta

Цитата: epmak от 2010 Дек. 08, 14:43  SmallHabit, впечатляет.
[P4F]v1ru5, Fiesta - если есть возможность, почему бы и не попробовать?
Для меня лично 3д камера это не для му,в му слишком плохая графика благодаря 3д камере можно только заметить все минуса самой игры.
А вот улучшение графики вот это +,игра станет на много красочнее.

user_MU

Вы конечно молодцы ребята но на мой взгляд все эти туманы как и 3Д-камеры бесполезны. Движек игры слабоватенький.
3Д-камеру я включал только 1 раз - как только она появилась и для того что бы посмотреть что это такое. Больше ниразу.
И какой смысл превращать МУ в ЛА? Может уже сразу беритесь за ЛА? Там все намного круче чем в простецкой МУ.
Собственно МУ это недо-онлаин-игра и превращать её в монстра типа вов и ла не вижу смысла.

7mm


SmallHabit

ЦитироватьВы не понимаете, это же в чистом роде research  Just for fun!
Некоторым это недано понять, этого ощущения, когда ты что-то делаешь, и у тебя это получается :)

Profesor08

[quote name='[P4F]v1ru5' post='79878' date='7.12.2010, 23:34']
3д камера это вообще лишнее для му... му - это кривая во всех отношениях игра... в данном случае мы рассматриваем графику, которая оставляет желать лучшего... а к тому-же еще это убожество под 3д камеру... бррр... всегда было страшно приближать экран мушки...[/quote]
А если активировать анизотропную фильтрацию, мультисэмплинг(сглаживание), увеличить дальность прорисовки(отображения) объектов, добавить 3д камеру(которая будет поворачиваться ГЛАДКО и Удобно), туман для каждой локации,небо. То получится очень приличная картинка. А если конкретно взяться и перемоделировать ВСЕ, и оптимизировать двигатель, чтоб смог все это обрабатывать? Ну подумаешь получим другую уже игру, но зато огого какую)) WebZen отдыхать будет...

Похожие темы (5)

Сообщений: 37
Просмотров: 21700

Сообщений: 127
Просмотров: 38228

Сообщений: 32
Просмотров: 12529