Я пытаюсь спроецировать серию трехмерных точек на экран, используя матрицу перспективной камеры.У меня нет мирового пространства (или я считаю, что это единичная матрица), и в моей камере нет места для камеры (или я считаю, что это единичная матрица), у меня есть матрица 4x4 для моего пространства объектов.
IЯ беру матрицу объектов и умножаю ее на матрицу перспективы камеры, сгенерированную следующим методом:
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
С наилучшими пожеланиями!
PS В примере матрицы идентичности / перевода мой матричный формат в моей модели:
[1, 0, 0, tx,
0, 1, 0, ty,
0, 0, 1, tz,
0, 0, 0, 1 ]