Я написав шейдери для дифузної блискавки.
Нормали обчислення в вершині шейдера: normal = gl_NormalMatrix * gl_Normal;
Але, коли я повертаю камеру, нормалі також починають обертатися з камерою. Як це виправити?
Відповіді:
1 для відповіді № 1Ви повинні неправильно створювати свою нормальну матрицю.
NormalMatrix = transpose(inverse(ModelMatrix * ViewMatrix))
Також, якщо ви не змушені використовувати gl_NormalMatrix і gl_Normal, ви повинні використовувати форму шейдера і змінні, і обчислити матриці самостійно, а не використовувати стару модель.
Якщо ви не знаєте, як це зробити, ви повинні знайти підручник з OpenGL 4, щоб вивчити програмований шейдерний конвеєр. OGLDev досить добре.