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

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

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

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

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

Будем признательны за любую помощь или предложения. Спасибо


person unknownSPY    schedule 16.10.2014    source источник


Ответы (1)


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

1) Создайте второй буфер вершин и преобразуйте все вершины, используя 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();
person Tomashu    schedule 16.10.2014
comment
Спасибо за помощь. Вариант 1) Будет ли это сильно влиять на производительность? или это просто зависит от размера буфера. Я предполагаю, что вариант 2 (если я смогу заставить его работать) будет предпочтительным вариантом? - person unknownSPY; 16.10.2014