Opengl glbegin не работает

GlBegin

glBegin — (Функция библиотеки OpenGL) определяет границы, внутри которых заданы вершины примитива или группы примитивов.работает с буфером накопления.

Содержание

Синтаксис [ править ]

Параметры [ править ]

Режим, задающий тип примитива или примитивов, которые будут созданы из вершин, заключённых между вызовом glBegin и последующим вызовом glEnd. Ниже представлены допустимые символьные константы, возможные в качестве данного параметра:

Рассматривает последующие вершины, как точки. n-я вершина определяет n-ю точку. Нарисуется N точек.

Каждая пара вершин является отрезком. Вершины 2n−1 и 2n определяют n-ю вершину. Нарисуется N/2 линий.

Нарисуется группа отрезков соединяющая все вершины от первой до последней. n-я и (n+1)-я вершины определяют n-ю линию. Нарисуется N−1 линия.

Нарисуется группа отрезков, соединяющая все вершины от первой до последней, и отрезок, соединяющий последнюю вершину с первой. n-я и (n+1)-я вершины определяют n-ю линию. Однако последняя линия будет определена N-ой вершиной и первой вершиной. Нарисуется N линий.

Каждая тройка вершин трактуется, как отдельный треугольник. n-й треугольник определяют вершины с порядковыми номерами (3n−2), (3n−1) и 3n. Всего нарисуется N/3 треугольников.

Нарисуется группа соединённых треугольников. После первых двух вершин, каждая последующая вершина будет добавлять один треугольник. Для нечётных n — n-й треугольник определяют вершины n, n+1 и n+2, для чётных — n+1, n и n+2. Нарисуется N−2 треугольников.

Нарисуется группа соединённых треугольников. После первых двух вершин, каждая последующая вершина будет добавлять один треугольник. n-й треугольник будут задавать вершины с порядковыми номерами 1, n+1 и n+2. Нарисуется N−2 треугольников.

Каждые четыре вершины определяют четырёхугольник. Вершины 4n−3, 4n−2, 4n−1 и 4n определяют n-й четырёхугольник. Всего нарисуется N/4 четырёхугольника.

Нарисуется группа соединённых четырёхугольников. После первых двух вершин, каждая последующая пара вершин будет добавлять один четырёхугольник. n-й четырехугольник будут задавать вершины с порядковыми номерами 2n−1, 2n, 2n+2 и 2n+1. Нарисуется N/2−1 четырёхугольника. Заметьте, что порядок вершин, который используется для вершин при GL_QUAD_STRIP отличается от порядка вершин в случае GL_QUADS.

Нарисуется один выпуклый полигон. Вершины с первой по N-ю определяют этот полигон.

Пояснения [ править ]

Функции glBegin и glEnd определяют границы, внутри которых заданы вершины примитива или группы примитивов. Функция glBegin имеет единственный аргумент, определяющий какой тип примитива будут составлять вершины. n принимается за порядковый номер вершины, начиная с первой, и N — за общее число указанных вершин, также трактуется следующее:

  • Между функциями glBegin и glEnd вы можете использовать только определённый поднабор функций OpenGL:
  • Независимо от выбранного значения для mode в glBegin, количество вершин, которые могут быть заданы между glBegin и glEnd, ничем не ограничено. Линии, треугольники, четырёхугольники и полигоны, которые не полностью определены, — не рисуются. Это случается, когда задано вершин меньше, чем требуется для вывода одного или нескольких примитивов. Не полностью определённые примитивы игнорируются, остальные рисуются.
  • Для каждого примитива установлено минимальное количество вершин.
Читайте также:  Как лучше настроить экран телевизора
Минимальное число вершин Тип примитива
1 точка
2 линия
3 треугольник
4 четырёхугольник
3 полигон

Режимы, требующие несколько вершин для каждого следующего примитива: GL_LINES (2), GL_TRIANGLES (3), GL_QUADS (4) и GL_QUAD_STRIP (2).

Коды ошибок [ править ]

Ниже представлены пояснения к кодам возможных ошибок.

Код ошибки Пояснение
GL_INVALID_ENUM mode установлен в недопустимое значение.
GL_INVALID_OPERATION Между glBegin и glEnd была вызвана недопустимая функция.

Функция glEnd была вызвана перед соответствующей функцией glBegin, или glBegin была вызвана внутри glBegin/glEnd.

Источник

QT the glBegin not declared?

i’m following a tutorial to write a small piece of code of opengl in qt.here’s the link http://www.youtube.com/watch?v=1nzHSkY4K18

but in the 6:13 when I bluid the code it show a couple of error that

what I really don’t understand is when I only put the glClear(GL_COLOR_BUFFER_BIT) it builds alright,but occurs error even i just put the glColor3f().Does the GLWidget not support the glColor*() or glBegin() command?

1 Answer 1

The functions you mention are simply not present in any modern version of GL, so the tutorial you are following sounds like it is quite out of date.

So probably the version of GL exposed through your build of QT does not have these functions. It may be possible to reconfigure/rebuild QT to use an older version of GL, but I would instead recommend getting to know and use the modern programmable interface.

Not the answer you’re looking for? Browse other questions tagged qt opengl or ask your own question.

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.10.15.40479

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Не работает OpenGL

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не работает OpenGL
Уважаемые подскажите как решить такого вот рода проблему, не возможно установить режим OpenGL в.

Не работает openGL
Здравствуйте всем. программирую в Visual Studio 2008. Начал изучать openGL. я скачал книгу.

Не работает OpenGL
Доброго времени суток. При попытке использовать OGL, область контекста просто заполняется белым.

Не работает OpenGL
В чем может быть проблема?

и это не помогает. может это связано с тем что OpenGL-окно не главное(оно дочернее)

Добавлено через 4 минуты
и функция DrawGLScene() вызывается по таймеру с периодом 20 мс

извините,можно поподробнее. я не понял что это

Добавлено через 3 минуты

в смысле сложности?

Добавлено через 6 минут
ну хорошо. а если избавится от дочернего сделать opengl-окно главным как тогда реализовать всю отрисовку в пределах определенного прямоугольника и можно было убрать всю эту отрисовку нажав на кнопку

это Z — вверх что-ли? зачем такие %:7?№;%.?

можешь попробовать перед прорисовкой геометрии делать так

angstrom, если бы контекст неправильно создавался для дочернего окна, то и цвет фона бы не менялся ф-ией glClearColor.

Михаил Свинцов, может фигуры просто не попадают в область видимости камеры?
Причины могут разные
не правильная настройка матриц проекции и/или модели_вида и/или их входные параметры.

Герц, а что это такое и как ими пользоваться? если сам не объяснишь кинь где можно почитать про них

Добавлено через 39 секунд
я про buffer object

Не работает OpenGL
Доброго времени суток. Зачастил я с вопросами в последнее время. Ситуация такая: пишу проект.

Не работает OpenGL в Qt Creator
Доброго времени суток, возникла проблема. Один и тот же проект, запускаемый на разных PC, работает.

OpenGL странно работает
Здравствуйте формучане кто нибудь сталкивался с такой проблемой что на моем компьютере программа.

не работает функция из OpenGL
при попытки загрузки текстуры AUX_RGBImageRec *texture1 auxDIBImageLoad(«buffer»); .

Источник

glBegin/glEnd

Помощь в написании контрольных, курсовых и дипломных работ здесь.

C glBegin на glDrawArrays + текстуры
Пытаюсь перейти на более современные технологии в opengl, за место glBegin использовать.

GlBegin не работает с GL_TRIANGLES
Здравствуйте уважаемые форумчане glBegin(GL_TRIANGLES); for (auto &i : suzanne_elements) <.

Typedef void (WINAPI *GLEND)(void), как вызывать?
импортирую метод GLEND glmethod = (GLEND) GetProcAddress(hModule, «glEnd»); как его теперь.

Или воспользуйтесь поиском по форуму:

Подскажите пожалуйста, насколько я понял функции glBegin() и glEnd() — это функции из старых версий OpenGL и после версии OpenGL 3.1 — не используются и даже недоступны.
Если так, то мой вопрос собственно такой простой: Имеет ли смысл изучать OpenGL по книге где описываются эти комманды или имеет смысл читать статьи в которых есть к примеру такие фразы:

Меню пользователя @ zayats80888

По любому поводу у людей бывают свои личные мнения и взгляды на разные ситуации, как говориться «на чужой роток не накинешь платок». На меня даже не повлияет, когда Khronos Group объявит официально OpenGL устаревшим. Если допустим, в следующем году Khronos Group объявит OpenGL deprecated/legacy (в чём я пока сильно сомневаюсь, что это будет в ближайшие годы), я всё равно не смогу перейти на Vulkan, так как мой ноутбук физически не поддерживает Vulkan, а пока я менять ноутбук не собираюсь (если он не сломается, конечно, или я не захочу). Ну и что, если они объявят, всё равно, OpenGL останется навечно для совместимости старых программ. Первый и значительный удар по OpenGL нанесли разработчики Mac, которые прекратили его поддерживать на версии OpenGL 4.1, а потом они нанесли удар и по Vulkan, отказавшись его поддерживать в пользу своего API — Metal. Ну и что. Зато можно использовать OpenGL 4.1 и мои приложения будут работать и на Mac, из которого 100% уже никогда не будет удалён OpenGL 4.1, так как многие программы перестанут запускаться и эта версия останется в Mac навечно (по крайней мере, до конца моей жизни)

OpenGL имеет два профиля: Core и Compatibility. Если активировать Compatibility Profile, то устаревшие функции будут физически доступны из любой версии OpenGL на персональных компьютерах и ноутбуках. Если активировать Core Profile, то, например, в версии OpenGL 3.1 будут недоступны функции glBegin/glEnd и другие устаревшие функции. Если вы будете заниматься кроссплатформенной разработкой, то на OpenGL ES 2.0 и 3.0 на мобильных будут физически недоступны устаревшие функции OpenGL. Они недоступны и на WebGL.

Изучайте этот абзац в документации, чтобы понимать, чем отличаются профили OpenGL (Core и Compatibility). Как можно чаще читайте документацию на Wiki от Khronos Group. Там много всего интересного и полезного.

Context types
Until version 3.0, all versions of OpenGL were fully backwards compatible with earlier ones. Code written against OpenGL 1.1 could execute just fine on OpenGL 2.1 implementations.

OpenGL version 3.0 introduced the idea of deprecating functionality. Many OpenGL functions were declared deprecated, which means that users should avoid using them because they may be removed from later API versions. OpenGL 3.1 removed almost all of the functionality deprecated in OpenGL 3.0. This includes the Fixed Function Pipeline.

However, since many implementations support the deprecated and removed features anyway, some implementations want to be able to provide a way for users of higher GL versions to gain access to the old APIs. Several techniques were tried, and it has settled down into a division between Core and Compatibility contexts.

There are other context variations as well.

Источник

opengl glBegin (GL_LINES) и glBegin (GL_POINT) в 2D не визуализирующем точечный вектор

Я делаю простую 2D игру в пинг — понг. Теперь мне нужно визуализировать как игроков (две линии, одна вверху экрана и одна внизу), так и мяч. Однако я не знаю, почему мяч просто не визуализируется … Вот часть кода.

PS: ball->moveBall(); просто меняет мяч x а также y , Поскольку отладка бизнес-логики кажется хорошей, а координаты x, y меняются так, как они должны. Однако проблема заключается в визуализации мяча.

PS PS: я знаю, что glBegin устарела, но я должен использовать устаревший код.

Решение

Это просто генерирует GL_INVALID_ENUM ошибка (вы действительно должны добавить некоторую проверку ошибок в ваш код, по крайней мере, для отладочных сборок). Правильное значение перечисления GL_POINTS ,

Тем не менее, все это ужасно устарели. Begin/End в основном был заменен массивами вершин еще в 1997 году, буферными объектами где-то в 2003 году и целым конвейером фиксированных функций шейдерами еще в 2004 году. Если вы работаете с OpenGL в 2018 году, на самом деле нет причин придерживаться летние концепции, которые все удален из современных профилей ядра OpenGL.

ОБНОВЛЕНИЕ при проверке ошибок GL

Самый простой способ это позвонить glGetError() в «стратегических местах» в вашем коде. Обратите внимание, что это может привести к неявной синхронизации в вашей реализации GL, что может отрицательно повлиять на производительность. Хорошей стратегией является использование этого только в отладочных сборках (или других опциях времени компиляции).

Гораздо лучший подход в настоящее время GL Отладочный вывод функция, где водитель может сказать вам, что именно не так. Например, в случае использования GL_POINT для примитивного типа драйвер nivida linux сообщает:

Источник

Оцените статью