Шаг первый ... (комментарии)
Это сообщение сгенерировано автоматически.
С точки зрения другого новичка, всё разумно:) Есть два предложения:
-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.
Тема в архиве.