Я следую за this учебным пособием для создания skybox/cubemap с отображением окружающей среды. У меня возникли некоторые проблемы с пониманием расчет в вершинном шейдере:Зачем мне вычислять транспонирование обратной матрицы модели, чтобы вычислить нормаль для текстуры отражения?
#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 normal;
out vec3 Normal;
out vec3 Position;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
Normal = mat3(transpose(inverse(model))) * normal;
Position = vec3(model * vec4(position, 1.0f));
}
Здесь автор вычисления нормальной перед его передачей в пиксельный шейдер для расчета текстуры отражения:
Normal = mat3(transpose(inverse(model))) * normal;
Мой вопрос есть, что именно делает этот расчет? Почему вы должны вычислить транспонирование обратной матрицы модели, прежде чем умножить ее на нормаль?
Возможный дубликат [Что такое логика преобразования нормалей с транспонированием обратного к матрице просмотра модели?] (Http: // stackoverflow. com/questions/13654401/what-is-the-logic-behind-transforming-normals-with-the-transpose-of-the-inverse) –
Для справок в будущем: _Never_ вычислить transpose inverse _in_ vs – RecursiveExceptionException