Я пытаюсь изучить 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);
Я думаю, что могу безопасно отключить большинство из них, но я не уверен, так как все еще пытаюсь выяснить, что на самом деле будет делать большинство из них.
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);
Все они являются частью устаревшего конвейера фиксированных функций и могут быть удалены и эмулированы с помощью шейдеров.
Если вы только начинаете учиться, вот дополнительная информация:
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);
Если вы уже прошли этап рендеринга простых форм, используйте их для экспериментов с освещением. Вы также должны добавить нормали к своей геометрии, чтобы увидеть эффекты. Если вы действительно в самом начале, закомментируйте их, пока вы не освоитесь с рисованием фигур.
Удачи!
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .