Предварительно вычисленное освещение каждой вершины в DirectX9 с использованием конвейера с фиксированной функцией рендеринга - PullRequest
1 голос
/ 13 февраля 2011

Я создаю приложение DirectX 9 C ++ с использованием конвейера с фиксированными функциями, с учетом предварительно вычисленного освещения для каждой вершины (независимо от нормалей и т. Д.), Как я могу применить это к конечному изображению?В настоящее время я использую текстурированные примитивы и пытаюсь изменить цвет в целом (по всему примитиву, а не с помощью градиента), и мне приходится предварительно рассчитывать освещение из-за количества источников света и приложения, предназначенного дляполучить достойную частоту кадров даже на бюджетных машинах.(То есть один проход на свет - это слишком много)

Моя структура вершин выглядит как

struct Vertex
{
    float x, y, z, u, v;
};

В основном я хочу добавить к этому значение освещения и применить его, используя конвейер фиксированной функции длявершина (без использования фактических «огней»)

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

1 Ответ

0 голосов
/ 09 марта 2011

Я больше не работаю с конвейером с фиксированными функциями, так как использую шейдеры, как почти все остальные в этой области, я забыл детали и поэтому не могу дать полный и готовый к работе ответ, но, надеюсь, это может датьвы начинаете:

Состояние цвета для каждой вершины (Direct3D 9) .

Вам необходимо использовать FVF следующим образом:

D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_DIFFUSE

ичтобы включить использование цвета вершины:

m_pDevice9->SetRenderState(D3DRS_COLORVERTEX, TRUE);

m_pDevice9->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);

Если вы не хотите использовать какое-либо освещение, одним из вариантов является использование одного направленного света с рассеянным компонентом черного и окружающего компонента белым.Таким образом, освещение будет полностью ровным, и будут использоваться только материальные цвета.

Тем не менее, вам действительно нужно беспокоиться о фиксированной функции рендеринга?Используя шейдеры, было бы очень легко реализовать это, и вы можете найти множество людей, способных дать вам совет, как это сделать.

...