Как нарисовать вершины в буфере вершин в другом цвете

Я использую Direct3D 9 для рисования линий.

Вершины, которые я использую сейчас, имеют формат D3DFVF_XYZ|D3DFVF_DIFFUSE и хранятся в буфере вершин. Они нарисованы с DrawPrimitive как D3DPT_LINELIST,

Как изменить нарисованный цвет целого буфера вершин или даже конкретной вершины, не блокируя буфер вершин для изменения его содержимого? Это должно быть сделано каждый кадр.

Возможно ли это с буфером вершин? Я бы предпочел решение без пользовательского шейдера (с использованием конвейера direct3d 9 по умолчанию).

Если это невозможно, что будет следующим лучшим решением для повышения производительности? Я могу думать только о блокировке буфера вершин или использовании DrawPrimitiveUP, И то, и другое довольно ужасно.


Обновлено с кодом решения:

m_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CONSTANT);
m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_CONSTANT);
m_pDevice->SetTextureStageState(0, D3DTSS_CONSTANT, D3DCOLOR_ARGB(120,0,255,0));

Вершины не нужны FVF_DIFFUSE больше.

1

Решение

С конвейером фиксированной функции вы можете использовать SetTextureStageState (доктор) указать постоянный цвет, который следует использовать с D3DTSS_CONSTANT (доктор). С помощью этой опции вы можете установить цвет для всего вызова.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]