Шаг первый ... (комментарии)
Это сообщение сгенерировано автоматически.
С точки зрения другого новичка, всё разумно:) Есть два предложения:
-GUI заняться позже, так как это один из сервисов основного движка, и возможно использующий его объектную модель;
- вместо ini-файлов использовать xml-файлы.
Аналогичный по объёму проект на Delphi - webfile.ru/872252.
simsmen
-GUI заняться позже
Я так и собираюсь сделать. Без работоспособного рендера там все равно нечего делать. Просто я создал все проекты, чтобы обозначить план работ. Незадействованные проекты можно пока просто выключить из конфигурации солюшена.
Тогда жду второй шаг:)
P.S. OpenGL желательней
simsmen
Будут оба API ... Но, боюсь что рендер еще не получит реализацию во втором шаге. Есть еще много чего нужно сделать до него.
Что могу сказать - толково...
Мы точно так же размышляли, когда начали делать Devourer2...
Так же префиксы там D2
По мне так должны быть еще объекты, сцены (они же уровни), искуственный интеллект и скрипты.
Все это конечно, наверное, в одной библиотеке, или же в самом exe файле может быть... но коль скоро так разделено.
Туда же и физику, к объектам и геометрии уровня.
Вообще первым встает вопрос о том, для каой игры (какого типа) нужен движок. (Стратегия, шутер, ралли)
Ну и от того и плясать.
А вообще, толково, с картинками даже... (я так не умею)...
[жду продолжения... мне это в тему, будет где посмотреть и поговорить...]
Oldman
Привет !!!
есть небольшие коментарии по коду...
switch (p_AEPrimitiveType)
{
case AE_TRIANGLES:
glDrawElements(GL_TRIANGLES, p_IndexCount, GL_UNSIGNED_INT, BUFFER_OFFSET(p_FirstIndex));
break;
case AE_TRIANGLE_STRIP:
glDrawElements(GL_TRIANGLE_STRIP, p_IndexCount, GL_UNSIGNED_INT, BUFFER_OFFSET(p_FirstIndex));
break;
case AE_LINES:
glDrawElements(GL_LINE, p_IndexCount, GL_UNSIGNED_INT, BUFFER_OFFSET(p_FirstIndex));
}Вместо switch'а и для каждого API харанить уже заранее проинициализированный массив типов примитивов.
тогда указывая параметр типа примитива береться соответвующая константа
у меня сделано так:
class Render {
...
// массив типов примитивов
static unsigned int PrimitiveType[];
// типы примитивов
enum {
TRIANGLE_LIST, // список полигонов
QUADS_LIST, // список прямоугольников
POINT_LIST, // список точек
LINE_LIST // список линий
};
....
};
тогда в констукторе для каждого рендера:
[code = cpp]
Direct3DRender::Direct3DRender() : pD3D(NULL), pDevice(NULL),
matStack(NULL)
{
...
// тип примитивов
PrimitiveType[Render::TRIANGLE_LIST] = D3DPT_TRIANGLELIST;
PrimitiveType[Render::POINT_LIST] = D3DPT_POINTLIST;
PrimitiveType[Render::LINE_LIST] = D3DPT_LINELIST;
...
}
OpenGLRender::OpenGLRender() : hDC(NULL), hGLRC(NULL)
{
.....
// тип примитивов
PrimitiveType[Render::TRIANGLE_LIST] = GL_TRIANGLES;
PrimitiveType[Render::POINT_LIST] = GL_POINT;
PrimitiveType[Render::LINE_LIST] = GL_LINE;
}почему для стека матрицы не используешь ID3DXMatrixStack? очень удобная вещь. Насчет матриц у меня у меня сделано как у тебя :)
//сохранить матрицу вида в стек
void Direct3DRender::PushViewMatrix() const
{
#ifdef _DEBUG
//записать в стек
HRESULT hr = matStack -> Push();
OutDirect3DError(hr);
#else
//записать в стек
matStack -> Push();
#endif
}
еще я завел такие методы как Translate к примеру... как в OpenGLЧем темя не устраивает STL просто ты сделал свои контейнеры...
в общем если что буду заглядывать :)
а так в целом неплохо но с мультирендером не так все просто я вот пытался делать и сцен а грузиться и т.д. как дошел до шейдеров теней пиксельного освещения все усложнилось.Хотел статьбю на сайт закинуть потом передумал что-то слабовато еще...
Andrey
>Вместо switch'а и для каждого API харанить уже заранее проинициализированный
>массив типов примитивов.
По рендеру - это был первый набросок. Скорее всего я так и сделаю дальше, как ты предлагаешь.
Скорее всего, к конечному варианту "второго шага" даже то, что написано по рендеру, будет переделано.
>почему для стека матрицы не используешь ID3DXMatrixStack? очень удобная вещь.
Я вообще не собираюсь использовать встроенные в D3D и OpenGL возможности работы с матрицами. Только загрузка матриц. Таким образом, я хочу полностью контролировать этот процесс, а также получаю типизацию решений для обоих рендеров. В конечном итоге они будут отличаться только API-спецификой.
>Чем темя не устраивает STL просто ты сделал свои контейнеры...
Не потому что я думаю, что мои решения будут более производительны ... :) Моя цель, не столько конечный результат в виде движка, сколько сам процесс его создания, в котором я осваиваю основные алгоритмы решения тех или иных задач, то есть обучаюсь. Конечно, проще всего было использовать готовые библиотеки и сделать все в несколько раз быстрее ... Но что бы я от этого приобрел? Умение работать с чужими библиотеками?
Конечно, я не собираюсь изобретать велосипед. Я так же подцепляю это из различных исходников и статей, разбираюсь как это работает, почему это вообще работает :), что можно сделать, чтобы это работало лучше.
Вообще это первый комментарий кода в данном сообществе. А жаль ... Создавая сообщество я хотел получить больше комментариев, критики ... А то непонятно, то ли я совсем все не так делаю, то ли придраться не к чему .. :)
Oldman
>Я вообще не собираюсь использовать встроенные в D3D и OpenGL возможности работы с матрицами.
а вот это зря не знаю даже скорость возможно понизиться...
>Не потому что я думаю, что мои решения будут более производительны ... :) Моя цель, не столько конечный результат в виде движка, сколько сам процесс его >создания, в котором я осваиваю основные алгоритмы решения тех или иных задач, то есть обучаюсь. Конечно, проще всего было использовать готовые библиотеки и >сделать все в несколько раз быстрее ... Но что бы я от этого приобрел? Умение работать с чужими библиотеками?
>Конечно, я не собираюсь изобретать велосипед. Я так же подцепляю это из различных исходников и статей, разбираюсь как это работает, почему это вообще >работает :), что можно сделать, чтобы это работало лучше.
думай сам мне кажеться лучше бы заняться другими направлениями чем разарботка контейнеров насчет производительности сомневаюсь в лучшем случае будет точно так-же...
>Вообще это первый комментарий кода в данном сообществе. А жаль ... Создавая сообщество я хотел получить больше комментариев, критики ... А то непонятно, то ли >я совсем все не так делаю, то ли придраться не к чему .. :)
ну почему-же я буду заходить сюда делать коментраии советы дело в том что я тоже пишу свой "обучающий" движок на котором что-то испытавая изучаю соединяю в 1 целое примерно то что ты сейчас делаешь но правда немного отличаются цели в плапне велосипедов STL :) а так целя одна.
Если что сутчись в аську можем опытом обмениваться...
Andrey
>>Я вообще не собираюсь использовать встроенные в D3D и OpenGL возможности работы с матрицами.
>а вот это зря не знаю даже скорость возможно понизиться...
Я не знаю как операции с матрицами организованы в OpenGL и Direct3D, но я позже собираюсь прооптимизировать всю матричную математику на SSE. Так что думаю, что медленнее вряд ли будет ... К тому же, по всей видимости, основная часть матричных операций будет в скелеталке, которую можно реализовать на GPU.
Тема в архиве.