Преобразование 3D-преобразования в 2D

Я пытаюсь найти способ преобразования матрицы трехмерного преобразования в 2D в OpenGL. Мои z-координаты игнорируются (я работаю с наземными проекциями).

Вот пример того, чего я пытаюсь достичь:

// Given a transformation matrix
// | r00 r01 r01 t0 |
// | r10 r11 r11 t1 |
// | r20 r21 r21 t2 |
// | 0.  0.  0.  1. |
//
// Ignore the z-coordinate, and convert it to
// | r00 r01 t0 |
// | r10 r11 t1 |
// | 0.  0.  1. |
glm::dmat4 t_matrix_3D = GetTransformation();
glm::dmat3 t_matrix_2D = glm::dmat3(t_matrix_3D);
t_matrix_2D[2] = dvec3(dvec2(t_matrix_3D[3]), 1.);
t_matrix_2D[0][2] = 0.;
t_matrix_2D[1][2] = 0.;

Вопрос в том, есть ли более красивый способ сделать это? Может быть, с помощью нарезки матрицы или выделения субматрицы?

1

Решение

Наиболее понятный и, вероятно, самый эффективный способ — написать встроенный метод или функцию и использовать непосредственно конструктор glm::mat3:

glm::mat3 Mat3Dto2D( const glm::mat4 & m )
{
return glm::mat3(
m[0][0], m[0][1], 0.0f,
m[1][0], m[1][1], 0.0f,
m[3][0], m[3][1], 1.0f
);
}
3

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector