Действительно, это зависит от того, нужна ли вам матрица столбцов или матрица строк. Разница заключается в том, как матрицы хранятся в памяти. Столбец-майор означает, что он хранится в столбце после столбца и строки-строки означает, что он хранится строка за строкой.
Ниже представлена возможная реализация функции, которая строит полную матрицу вида из положения, цели и векторов вверх. Я получил его отсюда Understanding the view matrix. В статье также много говорится о матричной арифметике вообще и об общих преобразованиях, необходимых при выполнении 3D-рендеринга. Я получил статью, выполнив простой поиск в Google. Возможно, вам захочется рассмотреть этот вопрос в следующий раз перед отправкой вопроса.
mat4 LookAtRH(vec3 eye, vec3 target, vec3 up)
{
vec3 zaxis = normal(eye - target); // The "forward" vector.
vec3 xaxis = normal(cross(up, zaxis));// The "right" vector.
vec3 yaxis = cross(zaxis, xaxis); // The "up" vector.
// Create a 4x4 orientation matrix from the right, up, and forward vectors
// This is transposed which is equivalent to performing an inverse
// if the matrix is orthonormalized (in this case, it is).
mat4 orientation = {
vec4(xaxis.x, yaxis.x, zaxis.x, 0),
vec4(xaxis.y, yaxis.y, zaxis.y, 0),
vec4(xaxis.z, yaxis.z, zaxis.z, 0),
vec4( 0, 0, 0, 1)
};
// Create a 4x4 translation matrix.
// The eye position is negated which is equivalent
// to the inverse of the translation matrix.
// T(v)^-1 == T(-v)
mat4 translation = {
vec4( 1, 0, 0, 0),
vec4( 0, 1, 0, 0),
vec4( 0, 0, 1, 0),
vec4(-eye.x, -eye.y, -eye.z, 1)
};
// Combine the orientation and translation to compute
// the final view matrix
return (orientation * translation);
}
Это зависит от того, хранятся ли матрицы в столбце или майоре строки. – BDL