Я пытаюсь изучить OpenGL и сейчас пытаюсь использовать его с Qt. Я пытаюсь загрузить кадры из видеофайла в текстуру, а затем отобразить ее на экране. Единственное, что я могу попробовать и сделать позже, - это включить на нем функцию масштабирования. Имея это в виду, каков минимальный уровень инициализации OpenGL, который мне нужно использовать для максимальной производительности. В частности, нужно ли мне отключать определенные функции, чтобы в данный момент я мог максимизировать производительность для своих очень ограниченных потребностей.

Например, руководство Qt по OpenGL инициализирует его как:

 glEnable(GL_DEPTH_TEST);
 glEnable(GL_CULL_FACE);
 glShadeModel(GL_SMOOTH);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 glEnable(GL_MULTISAMPLE);
 static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
 glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

Я думаю, что могу безопасно отключить большинство из них, но я не уверен, так как все еще пытаюсь выяснить, что на самом деле будет делать большинство из них.

0
Luca 13 Мар 2015 в 17:28

2 ответа

Лучший ответ
glEnable(GL_DEPTH_TEST);

Включает проверку глубины, которая предотвращает перезапись треугольниками других, когда они должны быть скрыты за другими. Оставьте включенным, чтобы избежать артефактов.

glEnable(GL_CULL_FACE);

Предотвращает рисование треугольников, когда они направлены от вас. Оставьте включенным для повышения производительности.

 glShadeModel(GL_SMOOTH);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
 glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

Все они являются частью устаревшего конвейера фиксированных функций и могут быть удалены и эмулированы с помощью шейдеров.

3
ratchet freak 13 Мар 2015 в 18:49

Если вы только начинаете учиться, вот дополнительная информация:

glEnable(GL_DEPTH_TEST) 

Оставьте это, только если вы планируете рисовать 3D-фигуры

glEnable(GL_CULL_FACE)

Убирайте его, пока не привыкнете к концепции рисования точек по часовой стрелке, а против часовой стрелки. в противном случае вы можете не увидеть свои первые визуализированные формы, потому что они могут быть отброшены. Сначала нарисуйте их без этого, затем включите его и поэкспериментируйте с рисованием по и против часовой стрелки.

glShadeModel(GL_SMOOTH) 

Оставь это. Он просто инструктирует средство визуализации смешивать разные цвета и сглаживать их по фигурам. Если вы поместите разные цвета в разные точки, они будут плавно интерполироваться.

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_MULTISAMPLE);
static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

Если вы уже прошли этап рендеринга простых форм, используйте их для экспериментов с освещением. Вы также должны добавить нормали к своей геометрии, чтобы увидеть эффекты. Если вы действительно в самом начале, закомментируйте их, пока вы не освоитесь с рисованием фигур.

Удачи!

3
Dimo Markov 13 Мар 2015 в 14:50