Парился весь день с тенями, добился таки правильного эффекта, но откуда-то появились ненужные грани...
Алгоритм у меня такой:
1. Для каждого примитива(4 точки) нахожу 4 ребра
-- если Dot3(normal, lightdir) >= 0 и ребро не добавлено, добавить ребро в список ребер
-- строю 6 вершин:
1) edge(i).v(0)
2) edge(i).v(1)
3) edge(i).v(1)*4096 * lightDir
4) edge(i).v(1)
5) edge(i).v(1)*4096*lightDir
6) edge(i).v(0)*4096*lightDir
Рисуется все правильно, на этот раз передние и задние грани определяются правильно, вроде.
Но опять проблема - что то лишнее все таки есть.
StimorolD3DX - что ты говорил по поводу попадания камеры в теневой объем? конечно кривизна сразу появляется, а как избавится? у меня весь уровень рисуется без куллинга(d3dcull_none).