Как перевести координаты буфера вершин в 2D движке

0

Я пытаюсь (используя библиотеку движка 2D Directx9) вращать/переводить набор точек в буфере вершин.

Я понимаю, как это будет сделано в 3D-системе - то есть с использованием этапа шейдера вершин конвейера рендеринга с трансформационными матрицами...

Но я не уверен, что это применимо в 2D? (или я ошибаюсь). Я не знаю, где выполняется этап шейдера вершин в 2D или, по крайней мере, в 2D-библиотеке ядра, которую я использую (из книги Programming2DGames)? или это вообще происходит?

В основном я могу создать матрицу преобразования, используя некоторую вещь, такую как D3DXMatrixTransformation2D(), и я знаю, как применить ее к объекту LPD3DXSPRITE (используя Sprite-> SetTransform()), но как я могу применить эту матрицу преобразования к набору [CN11 ], хранящиеся в буфере вершин вместо спрайта.

Любая помощь или предложения были бы весьма признательны. благодаря

Теги:
matrix
2d
directx
vertex-buffer

1 ответ

0

Я думаю, у вас есть 2 варианта:

1) Создайте 2-й буфер вершин и преобразуйте все вершины, используя D3DXVec2TransformCoord в цикле. Или используйте одиночный буфер, если вам не нужны старые вершины.

2) Используйте вершинный шейдер:

ID3DXEffect* effect;
MATRIX matrixToTransfrom;
UINT passes;

effect->SetTechnique(technique);
effect->SetVector(handleMatrix, &matrixToTransform);
effect->Begin(&passes, 0);
effect->BeginPass(0);

sprite->Begin(xxx);

// drawing

sprite->End();

effect->EndPass();
effect->End();
  • 0
    Спасибо за помощь. Вариант 1) Это приведет к значительному снижению производительности? или это просто зависит от размера буфера. Я предполагаю, что вариант 2 (если я могу заставить его работать) будет предпочтительным вариантом?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню