Идея очень простая. Реализовать программу, рисующую кубик, который можно вращать. При решении столкнулся с проблемой перспективы.
Текущая реализация :
Есть множество точек соответствующих вершинам кубика. Их соответственно 8. При этом центр кубика находится в
![$(0,0,0)$ $(0,0,0)$](https://dxdy-02.korotkov.co.uk/f/1/4/f/14fd3d9f61a5bc79012bc3ee8ac92d9a82.png)
. "Вращаем" кубик с помощью преобразования координат (умножая на соответствующую матрицу). Для отрисовки кубика первоначально брались просто X и Y координаты. При этом кубик выглядел естественно слегка не натурально. Поэтому было решено использовать диметрическую проекцию. Т.е.
![$X$ $X$](https://dxdy-01.korotkov.co.uk/f/c/b/f/cbfb1b2a33b28eab8a3e59464768e81082.png)
и
![$Y$ $Y$](https://dxdy-02.korotkov.co.uk/f/9/1/a/91aac9730317276af725abd8cef04ca982.png)
координаты искажаются. Формула искажения была выбрана такая :
![$X' = X\frac{(d-Z)}{(d+a)}$ $X' = X\frac{(d-Z)}{(d+a)}$](https://dxdy-02.korotkov.co.uk/f/5/b/6/5b69a36eb6953fcb55f3fcbd9f95086e82.png)
где,
d - это некоторая константа, фактически отвечающая за расстояние от объекта то наблюдателя.
a - длинна ребра куба.
В текущей реализации
![$d = 4a$ $d = 4a$](https://dxdy-02.korotkov.co.uk/f/d/5/4/d54e27a3726f24a75fe5cb5c72cc289d82.png)
Точно такой же коэффициент используется для преобразования
![$Y$ $Y$](https://dxdy-02.korotkov.co.uk/f/9/1/a/91aac9730317276af725abd8cef04ca982.png)
.
При этом некоторые ракурсы все равно проецируются не правильно. Насколько я понимаю это происходит из-за того, что точка схода меняет свое положение при вращении кубика.
Собственно просьба подсказать какое лучше использовать преобразование координат при проецировании. Спасибо.
Два скриншота иллюстрирующих "проваливание" вершины:
![Изображение](http://img196.imageshack.us/img196/4721/cube1.png)
![Изображение](http://img21.imageshack.us/img21/5365/cube2.png)