Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

OpenGL Освещение

#cpp #qt #opengl #qt5


Проблема: некорректно работает освещение, выглядит так, будто источник света перемещается
параллельно с вращением объекта. По идее источник света должен быть статичным. Объект
может вращается вокруг своего центра с помощью мыши (и функции glRotated()).
Код:  

//Инициализация света, находится в методе initializeGL()
//Часть параметров такие же как и стандартные
GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f }; 
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat LightSpecular[]= { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat LightPosition[]= { 10.0f, 10.0f, 10.0f, 1.0f };
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); //Я предположил, что загрузка единичной матрицы мне поможет, но нет
glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, LightSpecular);
glEnable(GL_LIGHT1); //Источник света один


//Отрисовка фигуры
void Canvas::drawAll() //Отрисовка всех фигур
{
   names = 0;
   for(int i = 0; i < figures; i++)
   {
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
      glTranslated(motionX, motionY, zoom); //motionX/Y вычисляются при перемещении
курсора при нажатой ПКМ
      glRotated(rotationX, 1.0, 0.0, 0.0); //rotationX/Y также, только при ЛКМ
      glRotated(rotationY, 0.0, 1.0, 0.0);
      if(allFigures[i]->visible)draw(allFigures[i]);
   }
}


Пишу на Qt5.3. Вот как это выглядит: ссылка
    


Ответы

Ответ 1



Оказалось что это ответ: Похоже на глючные нормали

Комментариев нет:

Отправить комментарий