2016-03-30 7 views
1

Я следую за 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; 

Мой вопрос есть, что именно делает этот расчет? Почему вы должны вычислить транспонирование обратной матрицы модели, прежде чем умножить ее на нормаль?

+0

Возможный дубликат [Что такое логика преобразования нормалей с транспонированием обратного к матрице просмотра модели?] (Http: // stackoverflow. com/questions/13654401/what-is-the-logic-behind-transforming-normals-with-the-transpose-of-the-inverse) –

+0

Для справок в будущем: _Never_ вычислить transpose inverse _in_ vs – RecursiveExceptionException

ответ