Идея очень простая. Реализовать программу, рисующую кубик, который можно вращать. При решении столкнулся с проблемой перспективы.
Текущая реализация :
Есть множество точек соответствующих вершинам кубика. Их соответственно 8. При этом центр кубика находится в
. "Вращаем" кубик с помощью преобразования координат (умножая на соответствующую матрицу). Для отрисовки кубика первоначально брались просто X и Y координаты. При этом кубик выглядел естественно слегка не натурально. Поэтому было решено использовать диметрическую проекцию. Т.е.
и
координаты искажаются. Формула искажения была выбрана такая :
где,
d - это некоторая константа, фактически отвечающая за расстояние от объекта то наблюдателя.
a - длинна ребра куба.
В текущей реализации
Точно такой же коэффициент используется для преобразования
.
При этом некоторые ракурсы все равно проецируются не правильно. Насколько я понимаю это происходит из-за того, что точка схода меняет свое положение при вращении кубика.
Собственно просьба подсказать какое лучше использовать преобразование координат при проецировании. Спасибо.
Два скриншота иллюстрирующих "проваливание" вершины: