mmmaaak
@mmmaaak

Как зафиксировать источник света на сцене?

Все доброго времени суток. Собственно вопрос из названия ясен, но все равно немного распишу подробнее.

Есть простенькая программа на 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 , задается в конструкторе один раз и не изменяется. Как исправить косяк?
  • Вопрос задан
  • 2395 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы