Проецирование 3D-точки на 2D-пространство экрана с использованием матрицы перспективной камеры

Я пытаюсь спроецировать серию 3D-точек на экран, используя матрицу перспективной камеры. У меня нет мирового пространства (или я считаю, что это единичная матрица), и в моей камере нет места для камеры (или я считаю, что это единичная матрица), у меня есть матрица 4x4 для моего объектного пространства.

Я беру матрицу объектов и умножаю ее на матрицу перспективы камеры, сгенерированную следующим способом:

Matrix4 createPerspectiveMatrix( Float fov, Float aspect, Float near, Float far )
{
    Float fov2 = (fov/2) * (Math.PI/180);
    Float tan = Math.tan(fov2);
    Float f = 1 / tan;

    return new Matrix4 ( 
        f/aspect, 0, 0, 0,
        0, f, 0, 0,
        0, 0, -((near+far)/(near-far)), (2*far*near)/(near-far),
        0, 0, 1, 0 
    );
}

Затем я беру свою точку [x, y, z, 1] и умножаю ее на полученное умножение матрицы перспективы и матрицы объектов.

Следующая часть, где я запутался, я почти уверен, что мне нужно получить эти точки в пределах либо -1 и 1, либо 0 и 1, и, в случае наличия первого набора значений Затем я умножил бы точки на ширину и высоту экрана для координат экрана x и y соответственно и умножил бы значения на высоту экрана / 2 и ширину / 2 и добавил бы те же значения в соответствующие точки.

Любой шаг за шагом, рассказывающий мне, как это может быть достигнуто или где я могу ошибаться с любым из этого, будет высоко ценится !! : D

С наилучшими пожеланиями всем!

Постскриптум В примере матрицы идентичности / перевода мой матричный формат в моей модели:

[1, 0, 0, tx,
 0, 1, 0, ty,
 0, 0, 1, tz,
 0, 0, 0, 1 ]

Ответы на вопрос(2)

Ваш ответ на вопрос