#c #matrix #3d #vulkan
#c #матрица #3D #vulkan
Вопрос:
Проблема, с которой я сталкиваюсь, заключается в том, что я экспортирую сцену из Blender, и моя сцена повернута на 90 вокруг оси Y. Это явно проблема с матрицей, и у меня возникают проблемы с визуализацией решения. Blender настроен на экспорт с помощью ‘up’ = (0, 1, 0) и ‘forward’ = (0, 0, 1).
Я использую основные матрицы строк, как указано ниже.
mat4x4 cons_mat4x4_perspective(float fovy, float aspect_ratio, float near, float far)
{
mat4x4 result = cons_mat4x4_zero();
float half_tan_fovy = tan(fovy / 2.0f); /* in radians */
result.as_rows[0] = cons_vec4(1.0f / (aspect_ratio * half_tan_fovy), 0.0f, 0.0f, 0.0f);
result.as_rows[1] = cons_vec4(0.0f, 1.0f / half_tan_fovy, 0.0f, 0.0f);
result.as_rows[2] = cons_vec4(0.0f, 0.0f, -(far near) / (far - near), -1.0f);
result.as_rows[3] = cons_vec4(0.0f, 0.0f, -(2.0f * far * near) / (far - near), 0.0f);
return resu<
}
// Vulkan clip matrix
clip = cons_mat4x4_floats(1.0f, 0.0f, 0.0f, 0.0f,
0.0f,-1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
0.0f, 0.0f, 0.5f, 1.0f);
mat4x4 cons_mat4x4_lookat(vec3 eye, vec3 center, vec3 up)
{
mat4x4 result = cons_mat4x4_identity();
vec3 f = normalize(vec3_sub(center, eye));
vec3 s = normalize(cross(f, up));
vec3 u = cross(s, f);
result.as_rows[0] = cons_vec4(s.x, u.x, -f.x, 0.0f);
result.as_rows[1] = cons_vec4(s.y, u.y, -f.y, 0.0f);
result.as_rows[2] = cons_vec4(s.z, u.z, -f.z, 0.0f);
result.as_rows[3] = cons_vec4(-vec3_dot(s, eye),
vec3_dot(u, eye),
vec3_dot(f, eye),
1.0f);
return resu<
}
Моя модельная матрица — это идентификационная матрица, и я создаю матрицу просмотра со следующими параметрами:
vec3 _camera = cons_vec3(0.0f, 5.0f, 0.0f);
vec3 _at = cons_vec3(0.0f, 0.0f, 0.0f);
cons_mat4x4_lookat(_camera, _at, cons_vec3(0.0f, 1.0f, 0.0f));
Комментарии:
1. Я просто перехожу к последнему блоку кода, но вы уверены, что этот блок правильный?
center - eye
иup
содержатся в одном и том же подпространстве, так что матрица LookAt в этом случае даже не будет общим линейным преобразованием.2. Совсем нет. Я вижу проблему в том, что она не является линейной xform.