Войти
ПрограммированиеФорумОбщее

SpaceBattle: Помогите с рефакторингом (2 стр)

Страницы: 1 2
#15
18:44, 25 ноя. 2013

outcast, VertexBuffer я вынес за пределы цыкла, но все равно я не знаю, как сделать, чтобы рисовать все астероиды одним Draw, потому что матрицы World для каждого разные, верно? И максимум, что я могу придумать так это на подобии:

  ConstructGeneralVB();
  d3dContext_->UpdateSubresource(vertexBuffer, 0, 0, vertices, 0, 0);
  int size = (sizeof(*vertices) / sizeof(VertexPT)) * 6;

  for (int i = 0; i< size; i += 6)
  {
    XMMATRIX world = XMMatrixTranslation(aster[k].world.x, aster[k].world.y, 0.0f );
    matrices.World = XMMatrixTranspose(world);
    d3dContext_->UpdateSubresource(cbMatricesBuffer, 0, 0, &matrices, 0, 0);

    d3dContext_->Draw(6, i);
    k++;
  }

На другом форуме мне посоветовали ...

Instancing refers to drawing the same object more than once in a scene, but in different positions, orientations, scales, materials, and
textures (e.g., a tree object may be reused several times to build a forest). It would be wasteful to duplicate the vertex and index data
for each instance. Instead, we store a single copy of the geometry (i.e., vertex and index lists) relative to the object’s local space.
Then we draw the object several times, but each time with a different world matrix and different material if variety is desired.

Оно?


#16
19:26, 25 ноя. 2013

oler
> VertexBuffer я вынес за пределы цыкла,

Не за те пределы. Его надо из игрового цикла выносить. Ну реально нет никакой необходимости заполнять его больше одного раза за один запуск игры. Подумай головой же.


> чтобы рисовать все астероиды одним Draw, потому что матрицы World для каждого
> разные, верно? И максимум, что я могу придумать так это на подобии:

Собрать все матрицы в 1 массив и рисовать за 1 раз на кадр.
Да, это называется инстансинг.

#17
21:59, 29 ноя. 2013

outcast
Спасибо! С инстансингом почти разобрался!

Страницы: 1 2
ПрограммированиеФорумОбщее

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