Невозможно использовать SetTransform в D3D9

Что может помешать работе IDirect3DDevice9::SetTransform? Я просмотрел множество руководств по использованию матриц преобразования в Direct3D9, в том числе вот этот. И насколько я могу судить, они все делают это одинаково.

Я пытаюсь написать код только для перевода текстурированного полигона. Я вызываю SetTransform с матрицей, инициализированной с помощью D3DXMatrixTranslation, и она возвращает S_OK. Однако реальные многоугольники, нарисованные на экране, не трансформируются.

D3DXMATRIX m_Translation;
D3DXMatrixTranslation(&m_Translation,100,100,0);
d3dDevice->SetTransform(D3DTS_WORLD, &m_Translation);

d3dDevice->SetFVF(D3DFVF_TLVERTEX);
d3dDevice->SetStreamSource(0, vertexBuffer, 0, sizeof(TLVERTEX));

HRESULT hr = d3dDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 2);

person Kevin Laity    schedule 16.11.2009    source источник
comment
@GMan: нет. Ничего, кроме двух полигонов и одной текстуры   -  person Kevin Laity    schedule 16.11.2009
comment
И это настоящий код, ничего между ними? Я полагаю, у вас есть и другие матрицы? (Проекция и вид)   -  person GManNickG    schedule 16.11.2009
comment
Я никогда не слышал, чтобы это не работало в фиксированном конвейере функций. Я рекомендую вам запустить его через PIX и посмотреть, что происходит. (также правильно ли вы настроили матрицы вида и проекции?). Хотя, ИМХО, я считаю, что фиксированный конвейер функций мертв, он не обновлялся почти десять лет (ни MS, ни производителями оборудования), и его обычно быстрее и проще разрабатывать с помощью шейдеров, потому что вы точно знаете, что происходит, и не не нужно иметь дело с такими вещами (хотя, конечно, вы должны понимать, что происходит).   -  person Grant Peters    schedule 16.11.2009
comment
Это только для 2D-рендеринга, поэтому я понял, что проекционная матрица и т. д. не нужны, но я попробую и посмотрю, что произойдет.   -  person Kevin Laity    schedule 16.11.2009


Ответы (1)


Вы устанавливаете «D3DFVF_TLVERTEX», что означает, что вы предоставляете вершины «Transform and Lit» в буфере вершин, поэтому устройство не будет применять матрицу преобразования к этим вершинам.

person gatorfax    schedule 17.11.2009
comment
Да, это было так, видимо, Преобразованный также означает и неспособный к дальнейшему преобразованию. - person Kevin Laity; 17.11.2009