Вам не нужно передавать положение камеры, потому что, ну, в OpenGL камеры нет.
Расчеты освещения выполняются в пространстве глаза / мира, то есть после умножения на матрицу вида модели, которая также выполняет «позиционирование камеры». Так что на самом деле вы уже получили правильные вещи на месте. использование ftransform()
немного неэффективно, поскольку вы делаете половину того, что он делает снова (gl_ModelviewMatrix * gl_Vertex
, вы можете превратить это в ftransform, добавив gl_Position = gl_ProjectionMatrix * eyeVec
)
Таким образом, если ваши огни, кажется, двигаются, когда ваша «камера» трансформируется, вы не изменяете положения источника света должным образом. Либо предварительно вычислите преобразованные позиции света, либо преобразуйте их также в шейдер. Это скорее вопрос выбранного соглашения, меньшее ограничение при использовании шейдеров.