Меня интересует только вот этот момент: после того, как я уже получил направление "взгляда" камеры, т.е. у меня уже есть вектор, нормали к этим полигонам, как получить координаты вершин, зная центр полигона(точка пересечения диагоналей)? Полигон предстваляет из из себя прямоугольник, с известными сторонами.
Я, конечно, знаю другую реализацию - нарисовать полигон, а потом вращать его, чтобы стал параллелен плоскости отсечения..... Но она мне не понравилась. А реализация того метода, о котором я спрашиваю показалась мне странной.
Цитирую ГеймДев.ру:
Для начала, нам необходимо узнать сам вектор направления взгляда... можно конечно отслеживать все матричные преобразования (повороты, сдвиги)... но OpenGl существенно упрощает нам нашу задачу... с помощью Glевской функции glGetfloatv() мы можем "выдернуть" текущую матрицу и достать из нее нормаль к ближней плоскости отсечения, которая и будет нашим вектором направления взгляда ...
..........................
Из определения биллборда следует, что вектор направления взгляда является нормалью для каждого биллборда в сцене (на рисунке с биллбордом он так и подписан - "нормаль"), а, имея нормаль и центр массы (N) частицы, мы можем найти все четыре вершины биллборда:
p1 = N + v1; p2 = N + v2;
p3 = N - v1; p4 = N - v2;
Чтобы найти вектор v1 нужно вычислить cross product от вектора нормали и любого другого взятого с потолка вектора (в нашем случае "Z"), для нахождения вектора v2 нужно найти cross product от вектора нормали и вектора v1 (не забудьте нормализовать полученные вектора).
Мне непонятно вот это:
Чтобы найти вектор v1 нужно вычислить cross product от вектора нормали и любого другого взятого с потолка вектора (в нашем случае "Z"), для нахождения вектора v2 нужно найти cross product от вектора нормали и вектора v1
Как я не прикидывал - все равно получается, что векторное произведение нормали на Z не дает один из необходимых векторов(V1)!!! Со вторым пунктом я согласен - если помножить вектор нормали на V1, то мы получим ортагональный им V2, НО: только в том случае, когда полигон - квадрат(и его диагонали пересекаются под прямым углом.
Или это я так сильно торможу??(что будет не удивительно - я с 6 часов на ногах )
Поясните мне пожалуйста......