#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
Оказалось что это ответ: Похоже на глючные нормали
Комментариев нет:
Отправить комментарий