2015-11-26 3 views
0

Может ли кто-нибудь сообщить мне соответствующий индекс в матрице 4 на 4 M [16], что могут быть назначены параметры виртуальной камеры. например, параметрыМатрица камеры к матрице 4 на 4

camera->setPosition(Vec(P[0],P[1],P[2]); 
camera->setviewDirection(Vec(v[0],v[1],v[2]); 
camera->setupVector(Vec(up[0],up[1],up[2]); 
+0

Это зависит от того, хранятся ли матрицы в столбце или майоре строки. – BDL

ответ

1

Действительно, это зависит от того, нужна ли вам матрица столбцов или матрица строк. Разница заключается в том, как матрицы хранятся в памяти. Столбец-майор означает, что он хранится в столбце после столбца и строки-строки означает, что он хранится строка за строкой.

Ниже представлена ​​возможная реализация функции, которая строит полную матрицу вида из положения, цели и векторов вверх. Я получил его отсюда 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); 
} 
Смежные вопросы