Ответ 1
Есть действительно способы обойти это без дублирования вершин, с некоторыми ограничениями для каждого из них (по крайней мере, те, о которых я могу думать с моим ограниченным опытом OpenGL).
Я вижу два решения, которые дадут вам постоянное значение для нормали над каждым треугольником:
- объявить ввод как
flat
в вашем шейдере и выбрать, какая вершина дает его значение через glProvokingVertex; быстро, но вы получите нормальное значение для одной вершины как нормальное для всего треугольника, которое может выглядеть неправильно. - используйте геометрический шейдер, берущий треугольники и выводящий треугольники, чтобы вычислить один нормальный на лице. Это самый гибкий способ, позволяющий вам управлять полученным эффектом, но это может быть медленным (и, возможно, необходимым аппаратным обеспечением для шейдера).