Проблема с нормалями в Direct3D.

Подскажите, пожалуйста, как получить корректное освещение объекта, используя вершинный и индексный буфер.

Можно объявить формат вершин, и структуру:

VERTEX_FORMAT (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX0)

struct Vertex{ FLOAT x, y, z; FLOAT nx, ny, nz; FLOAT u, v;};

Но дело в том, что при использовании индексного буфера, одна и та же вершина участвует в рисовании нескольких треугольников, которые в общем случае лежат в разных плоскостях. Поэтому эта вершина должна иметь несколько нормалей, в зависимости от того к какому треугольнику она относится в данный момент. А так как в структуре Vertex хранится только одна нормаль, то непонятно как добиться желаемого результата.

Использование средней нормали не подходит.

Последняя правка: пн, 29/08/2011 - 22:07
Submitted by Neighbour on

Комментарии

Никак, если нормали треугольников в разных плоскостях надо для них создавать 2 отдельные вершины у 2х треугольников, илиже считать нормали в вершинном шейдере.


В большинстве случаев, используются группы сглаживания, там нормаль задается к вершине и если 2 треугольника в одной группе то вершина будет у них одинаковая.


ЫЗ А вообще если у тебя нормали задаются к треугольнику надо подумать о целесообразности использования индексного буфера.

Submitted by Relyer on

Понятно, спасибо.

Submitted by Neighbour on

GameDev.by