Для проекции я бы использовал матрицу 4х4:
1 0 0 0
0 1 0 0
0 0 0 0
0 0 1/d 1
Это работает для однородных координат (d - расстояние глаза от плоскости проекции, в стандартной установке перспективы).
Альтернатива:
Чтобы избежать работы с однородными координатами (или если вы не можете использовать матрицы 4x4, или если вы не можете использовать аппаратное ускорение для преобразования матрицы в любом случае) , просто используйте это:
x' = (d*x)/(z+d)
y' = (d*y)/(z+d)
z' = 0 (it's always projected onto the projection plane)
Кстати, это также в основном отвечает на ваш вопрос о трапеции. Просто поместите ваш прямоугольник правильно в трехмерное пространство - нетрудно понять, как: просто представьте прямоугольный рисунок на стене справа от вас. Затем опустите точку зрения, чтобы она была на уровне нижней части картины. Теперь он будет проецироваться как трапеция.