Заметки новичкаФорум

Шаг первый ... (комментарии)

#0
14:55, 22 мар 2006

Шаг первый ... (комментарии)

Это сообщение сгенерировано автоматически.

#1
14:55, 22 мар 2006

С точки зрения другого новичка, всё разумно:) Есть два предложения:
-GUI заняться позже, так как это один из сервисов основного движка, и возможно использующий его объектную модель;
- вместо ini-файлов использовать  xml-файлы.

Аналогичный по объёму проект на Delphi -  webfile.ru/872252.

#2
15:14, 22 мар 2006

simsmen
-GUI заняться позже
Я так и собираюсь сделать. Без работоспособного рендера там все равно нечего делать. Просто я создал все проекты, чтобы обозначить план работ. Незадействованные проекты можно пока просто выключить из конфигурации солюшена.

#3
16:22, 22 мар 2006

Тогда жду второй шаг:)
P.S. OpenGL желательней

#4
10:43, 24 мар 2006

simsmen
Будут оба API ... Но, боюсь что рендер еще не получит реализацию во втором шаге. Есть еще много чего нужно сделать до него.

#5
23:39, 26 мар 2006

Что могу сказать - толково...

Мы точно так же размышляли, когда начали делать Devourer2...

Так же префиксы там D2

По мне так должны быть еще объекты, сцены (они же уровни), искуственный интеллект и скрипты.

Все это конечно, наверное, в одной библиотеке, или же в самом exe файле может быть... но коль скоро так разделено.

Туда же и физику, к объектам и геометрии уровня.

Вообще первым встает вопрос о том, для каой игры (какого типа) нужен движок. (Стратегия, шутер, ралли)

Ну и от того и плясать.

А вообще, толково, с картинками даже... (я так не умею)...

[жду продолжения...  мне это в тему, будет где посмотреть и поговорить...]

#6
20:43, 18 мая 2006

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 просто ты сделал свои контейнеры...
в общем если что буду заглядывать :)
а так в целом неплохо но с мультирендером не так все просто я вот пытался делать и сцен а грузиться и т.д. как дошел до шейдеров теней пиксельного освещения все усложнилось.Хотел статьбю на сайт закинуть потом передумал что-то слабовато еще...

#7
11:09, 19 мая 2006

Andrey
>Вместо switch'а и для каждого API харанить уже заранее проинициализированный
>массив типов примитивов.
По рендеру - это был первый набросок. Скорее всего я так и сделаю дальше, как ты предлагаешь.
Скорее всего, к конечному варианту "второго шага" даже то, что написано по рендеру, будет переделано.

>почему для стека матрицы не используешь ID3DXMatrixStack? очень удобная вещь.
Я вообще не собираюсь использовать встроенные в D3D и OpenGL возможности работы с матрицами. Только загрузка матриц. Таким образом, я хочу полностью контролировать этот процесс, а также получаю типизацию решений для обоих рендеров. В конечном итоге они будут отличаться только API-спецификой.

>Чем темя не устраивает STL просто ты сделал свои контейнеры...
Не потому что я думаю, что мои решения будут более производительны ... :) Моя цель, не столько конечный результат в виде движка, сколько сам процесс его создания, в котором я осваиваю основные алгоритмы решения тех или иных задач, то есть обучаюсь. Конечно, проще всего было использовать готовые библиотеки и сделать все в несколько раз быстрее ... Но что бы я от этого приобрел? Умение работать с чужими библиотеками?
Конечно, я не собираюсь изобретать велосипед. Я так же подцепляю это из различных исходников и статей, разбираюсь как это работает, почему это вообще работает :), что можно сделать, чтобы это работало лучше.

Вообще это первый комментарий кода в данном сообществе. А жаль ... Создавая сообщество я хотел получить больше комментариев, критики ... А то непонятно, то ли я совсем все не так делаю, то ли придраться не к чему .. :)

#8
12:42, 19 мая 2006

Oldman
>Я вообще не собираюсь использовать встроенные в D3D и OpenGL возможности работы с матрицами.
а вот это зря не знаю даже скорость возможно понизиться...
>Не потому что я думаю, что мои решения будут более производительны ... :) Моя цель, не столько конечный результат в виде движка, сколько сам процесс его >создания, в котором я осваиваю основные алгоритмы решения тех или иных задач, то есть обучаюсь. Конечно, проще всего было использовать готовые библиотеки и >сделать все в несколько раз быстрее ... Но что бы я от этого приобрел? Умение работать с чужими библиотеками?
>Конечно, я не собираюсь изобретать велосипед. Я так же подцепляю это из различных исходников и статей, разбираюсь как это работает, почему это вообще >работает :), что можно сделать, чтобы это работало лучше.
думай сам мне кажеться лучше бы заняться другими направлениями чем разарботка контейнеров насчет производительности сомневаюсь в лучшем случае будет точно так-же...
>Вообще это первый комментарий кода в данном сообществе. А жаль ... Создавая сообщество я хотел получить больше комментариев, критики ... А то непонятно, то ли >я совсем все не так делаю, то ли придраться не к чему .. :)
ну почему-же я буду заходить сюда делать коментраии советы дело в том что я тоже пишу свой "обучающий" движок на котором что-то испытавая изучаю соединяю в 1 целое примерно то что ты сейчас делаешь но правда немного отличаются цели в плапне велосипедов STL :) а так целя одна.
Если что сутчись в аську можем опытом обмениваться...

#9
13:26, 19 мая 2006

Andrey
>>Я вообще не собираюсь использовать встроенные в D3D и OpenGL возможности работы с матрицами.
>а вот это зря не знаю даже скорость возможно понизиться...
Я не знаю как операции с матрицами организованы в OpenGL и Direct3D, но я позже собираюсь прооптимизировать всю матричную математику на SSE. Так что думаю, что медленнее вряд ли будет ... К тому же, по всей видимости, основная часть матричных операций будет в скелеталке, которую можно реализовать на GPU.

Заметки новичкаФорум

Тема в архиве.