Все доброго времени суток. Собственно вопрос из названия ясен, но все равно немного распишу подробнее.
Есть простенькая программа на Java с использованием LWJGL 2. По различным туториалам реализовал рендеринг множества текстурированных кубиков. Отрисовка кубиков происходит без использования glTranslate(). У каждого экземпляра кубика есть вектор Vector3f position, указывающий на центр куба, и относительно него рисуются все вершины.
Реализовал FPS камеру с помощью gluLookAt(); все бегается и смотрится нормально. Добавил освещение и тут начались странности. Функция рендера представляет собой следующее:
private void render() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
lcamera.setView();
for(Cube m: cubes) {
m.draw();
}
for(Light l: lights) {
l.updateLight();
}
}
Все рисуется в нужных местах, камера вертится и летает между ними. Но свет как-будто преследует центр обзора камеры, и постоянно ездит за ней. В методе l.updateLight(); происходит следующее:
public void updateLight() {
FloatBuffer tmpBuffer = BufferUtils.createFloatBuffer(4);
tmpBuffer.put(position); tmpBuffer.flip();
glLight(lightNum, GL_POSITION, tmpBuffer);
tmpBuffer = BufferUtils.createFloatBuffer(4);
tmpBuffer.put(spotDirection); tmpBuffer.flip();
glLight(lightNum, GL_SPOT_DIRECTION, tmpBuffer);
}
В методе m.draw() происходит отрисовка по обычному принципу glBegin(GL_QUADS); .(тут все точки и текстурные координаты куба).. glEnd();
Где мне обновлять позицию света, чтоб на нее не влияла gluLookAt() камеры. Вектор position в классе, описывающем Light , задается в конструкторе один раз и не изменяется. Как исправить косяк?