Матрица собственных перспективных проекций

Я пытаюсь создать матрицу перспективной проекции для OpenGL. Я знаю, как сделать это с float[16] но для согласованности я хотел бы использовать собственную матрицу.

формула является:

    [ xScale   0                 0                        0               ]
P = [   0    yScale              0                        0               ]
[   0      0    -(zFar+zNear)/(zFar-zNear) -2*zNear*zFar/(zFar-zNear) ]
[   0      0                -1                        0               ]

Куда:

yScale = cot(fovY/2)
xScale = yScale/aspectRatio

Поскольку формула является главной по столбцу, а c-массивы определены главной строкой, вы должны определить float[16] матрица с:

float P[16] = {
xScale, 0, 0, 0,
0, yScale, 0, 0,
0, 0, -(zFar+zNear)/(zFar-zNear), -1
0, 0, -2*zNear*zFar/(zFar-zNear), 0
};

Так как именно я мог бы создать подобную матрицу с Eigen? Буду ли я использовать Eigen::Affine3f или Eigen::Matrix4f? Смотря на документация, мне не очевидно, как установить отдельные значения ячеек.

3

Решение

В вашем случае проще всего использовать инициализатор запятой синтаксис:

Eigen::Matrix4f pmat;
pmat << xScale, 0, 0, 0,
0, yScale, 0, 0,
0, 0, -(zFar+zNear)/(zFar-zNear), -1,
0, 0, -2*zNear*zFar/(zFar-zNear), 0;
4

Другие решения

Установка отдельных значений ячеек может быть выполнена просто с помощью парена, например, Матрица (0,0) = xScale; ,

1

По вопросам рекламы [email protected]