Там нет проекционной матрицы в ее полном виде, как для того же frustrum в ogl, потому что нет такого количества параметров. Ширина и высота окна в видовой плоскости берется как размер стандартного экрана всегда. Максимум, что там может передаваться - расстояние от экранной плоскости (ноль по Z) до координаты точки наблюдателя в плоскости (-расстояние по Z). Для простейшего случая камеры в координатах (0, 0, -dist) не надо матриц, надо простейшую пропорцию, собственно что сейчас и работает. И она не всегда дает положительные результаты, потому что скорее всего должен быть еще как минимум один параметр (0, yc, -dist) для вычисления проекции, про который как раз пока ничего не известно и который чутка усложнит функцию перспективного преобразования, хотя все равно матрицы тут тоже не обязательны.