Opengl что это скачать
Перейти к содержимому

Opengl что это скачать

OpenGL Driver Support

This page provides links to both general release drivers that support OpenGL 4.6, and developer beta drivers that support upcoming OpenGL features.

Release Driver Downloads

OpenGL 4.6 support is available for Windows and Linux in our general release drivers available here:

  • Download for Windows 8 and 7 (64-bit)
  • Download for Windows 10 (64-bit)
  • Download for Windows 10 (64-bit) DCH
Developer Beta Driver Downloads

Windows driver version 426.02 and Linux driver version 418.52.18 provide new features for OpenGL developers to test their upcoming OpenGL applications.

Windows 426.02

  • Download for Windows 8 and 7 (64-bit)
  • Download for Windows 10 (64-bit)
  • Download for Windows 10 (64-bit) DCH

Linux 418.52.18

OpenGL Beta Release Notes

NVIDIA provides full OpenGL 4.6 support and functionality on NVIDIA GeForce and Quadro graphics card with one of the following Turing, Volta, Pascal, Maxwell (first or second generation) or Kepler based GPUs:

Turing GPU Architecture
  • TITAN: NVIDIA TITAN RTX
  • GeForce RTX: GeForce RTX 2080 Ti, GeForce RTX 2080, GeForce RTX 2070, GeForce RTX 2060
  • GeForce GTX: GeForce GTX 1660 Ti, GeForce GTX 1660, GeForce GTX 1650, GeForce MX250, GeForce MX230
  • Quadro: Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Quadro RTX 4000, Quadro RTX 3000, Quadro T2000, Quadro T1000
Volta GPU Architecture
  • TITAN: NVIDIA TITAN V
  • Quadro: Quadro GV100
Pascal GPU Architecture
  • TITAN: NVIDIA TITAN Xp, NVIDIA TITAN X (Pascal)
  • GeForce: GeForce GTX 1080 Ti, GeForce GTX 1080, GeForce GTX 1070 Ti, GeForce GTX 1070, GeForce GTX 1060, GeForce GTX 1050 Ti, GeForce GTX 1050, GeForce GT 1030, GeForce MX150,
  • Quadro: Quadro GP100, Quadro P6000, Quadro P5200, Quadro P5000, Quadro P4200, Quadro P4000, Quadro P3200, Quadro P3000, Quadro P2200, Quadro P2000, Quadro P1000, Quadro P620, Quadro P600, Quadro P520, Quadro P500, Quadro P400
Maxwell 2 GPU Architecture
  • TITAN: GeForce GTX TITAN X
  • GeForce: GeForce GTX 980 Ti, GeForce GTX 980, GeForce GTX 980M, GeForce GTX 970, GeForce GTX 970M, GeForce GTX 965M, GeForce GTX 960, GeForce GTX 950,
  • Quadro: Quadro M6000 24GB, Quadro M6000, Quadro M5500, Quadro M5000, Quadro M5000M, Quadro M4000, Quadro M4000M, Quadro M3000M, Quadro M2200, Quadro M2000
Maxwell 1 GPU Architecture
  • GeForce: GeForce GTX 960M, GeForce GTX 950M, GeForce 945M, GeForce 940MX, GeForce 930MX, GeForce 920MX, GeForce 940M, GeForce 930M, GeForce GTX 860M, GeForce GTX 850M, GeForce 845M, GeForce 840M, GeForce 830M, GeForce GTX 750 Ti, GeForce GTX 750, GeForce GTX 745, GeForce MX130
  • Quadro: Quadro M2000M, Quadro M1000M, Quadro M600M, Quadro M500M, Quadro M1200, Quadro M620, Quadro M520, Quadro K2200M, Quadro K620M
Kepler GPU Architecture
  • TITAN: GeForce GTX TITAN, GeForce GTX TITAN Black, GeForce GTX TITAN Z
  • GeForce: GTX 780 Ti, GeForce GTX 780, GeForce GTX 770, GeForce GTX 760, GeForce GTX 760 Ti (OEM), GeForce GT 740, GeForce GT 730, GeForce GT 720, GeForce GT 710, GeForce GTX 690, GeForce GTX 680, GeForce GTX 670, GeForce GTX 660 Ti, GeForce GTX 660, GeForce GTX 650 Ti BOOST, GeForce GTX 650 Ti, GeForce GTX 650, GeForce GTX 645, GeForce GT 640, GeForce GT 635, GeForce GT 630, GeForce MX110
  • Quadro: Quadro K6000, Quadro K5200, Quadro K5000, Quadro K4000, Quadro K4200, Quadro K2200, Quadro K2000, Quadro K2000D, Quadro K1200, Quadro K620, Quadro K600, Quadro K420, Quadro 410

The OpenGL 4.6 specifications can be downloaded from http://www.opengl.org/registry/.

For any bugs or issues, please file a bug through the developer website: https://devtalk.nvidia.com/

Turing Extensions for OpenGL

GPUs with the new Turing architecture have many new OpenGL extensions giving developers access to new features.

OpenGL для Windows 7

/>OpenGL – известное приложение, используемое для работы с графикой в 2D и 3D форматах, получения разных данных и выставления настроек. Ниже будет рассказано о достоинствах софта и его главных особенностях. Вы сможете скачать opengl для windows 7 x64 совершенно бесплатно.

Если вы пользуетесь своим устройством (компьютером, планшетом и пр.) без данного приложения, и вас все устраивает, то это не причина не загружать OpenGL. Конечно, без драйверов работать устройство не будет, а без данной библиотеки будет. Но если утилита установлена, вы сразу ощутите, что компьютер работает гораздо лучше, а мощность графической карты увеличилась.

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

Одно из преимуществ – простота использования приложения. Каждый пользователь при своем желании сможет настроить OpenGL самостоятельно.

Приложением поддерживается большое количество видеоадаптеров:

  • AMD;
  • ATI;
  • Intel;
  • S3;
  • XGI;
  • nVidia и другие.

Максимальное взаимодействие приложения с различными устройствами обеспечивается за счет постоянной доработки OpenGL.

В целом, приложение имеет следующие функции:

  • Фиксация данных о расширениях, поддерживаемых софтом, рейтинге и опциях.
  • Выдача списка форматов изображений, с которыми способен работать OpenGL.
  • Предоставление информации по запросу о плюсах, а также об отклонениях и ошибках, влияющих на работу.
  • Активация внутреннего расширения OpenGL.
  • Открытие доступа к базе данных с разнообразными расширениями с дальнейшей их активацией и использованием.
  • Предоставление информации относительно того, какие технологии получения изображения поддерживаются драйвером.
  • Работа с 3D тестерами, которые определят производительность видеосистемы и проверят корректность установленного драйвера.

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

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

Для корректной работы софта требуется установить правильную версию. При 32-битной системе инсталлируйте OpenGL 32 bit. При 64-битной, соответственно, потребуется скачать опенгл для виндовс 7 64 бит.

OpenGL/FAQ

OpenGL — это имя для спецификации, которая описывает поведение системы рендеринга на основе растеризации. Он определяет API, через который клиентское приложение может управлять этой системой. Система рендеринга OpenGL тщательно определена, чтобы сделать аппаратные реализации допустимыми.

Поставщики оборудования, люди, которые делают графические процессоры, несут ответственность за написание реализаций системы рендеринга OpenGL. Их реализации, обычно называемые «драйверами», переводят команды OpenGL API в команды GPU. Если определенная часть оборудования не может реализовать всю спецификацию OpenGL с помощью оборудования, поставщик оборудования должен по-прежнему предоставлять эту функцию, как правило, с помощью программной реализации функций, отсутствующих в оборудовании.

Чем НЕ является OpenGL?

OpenGL API имеет дело только с рендерингом графики. OpenGL не предоставляет функции для анимации, синхронизации, ввода-вывода файла, обработки формата файла изображения, графического интерфейса пользователя и так далее. OpenGL занимается только рендерингом.

Что такое GLUT?

GLUT — это не OpenGL. Это не часть OpenGL; это просто библиотека, которая используется некоторыми пользователями для создания окна OpenGL.

Кто поддерживает спецификацию OpenGL?

Спецификация OpenGL поддерживается комитетом Khronos Group, называемым OpenGL Architectural Review Board (ARB). Первоначально ARB была организацией, спонсируемой SGI, но она была принята Khronos Group.

OpenGL с открытым исходным кодом?

Нет, OpenGL не имеет исходного кода. GL — это спецификация, которую можно найти на офиц. сайте. Он описывает интерфейс, который использует программист, и ожидаемое поведение. OpenGL — это открытая спецификация. Любой может скачать спецификацию бесплатно. Это отличается от стандартов и спецификаций ISO, которые требуют денег для доступа.

Что такое Mesa3D?

Mesa3D — это программная реализация с открытым исходным кодом спецификации OpenGL. В последних версиях реализованы OpenGL 4.3 , OpenGL ES 2.0, GLSL 3.30 (и несколько расширений) и EGL 1.4.

Где я могу скачать OpenGL?

OpenGL не является программным продуктом. Это спецификация.

В Mac OS X реализация Apple OpenGL включена в ОС.

В Windows производители оборудования (такие как NVIDIA или AMD/ATI) используют спецификации для написания собственной реализации, поэтому OpenGL включен в поставляемые драйверы. Однако владельцам ноутбуков необходимо посетить производителя вашего ноутбука и загрузить драйверы от них.

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

Для программистов установка драйверов обычно недостаточна. Вам нужно будет загрузить указатели на функции OpenGL вручную или автоматически с помощью библиотеки. Более подробную информацию об этом можно найти на офиц. сайте, на странице «Начало работы».

Есть ли OpenGL SDK?

Фактически, OpenGL SDK нет. Существует коллекция веб-сайтов, некоторые (устаревшее) документации, а также ссылки на руководства, все можно найти на офиц. сайте. Но это не SDK.

NVIDIA и AMD имеют свои собственные SDK, оба из которых имеют различные примеры кода для OpenGL.

На каких платформах есть GL?

  • Windows: 95 и выше
  • Mac OSX: все версии
  • Linux: OpenGL предоставляется драйверами с открытым исходным кодом и библиотекой MESA или проприетарными драйверами.
  • FreeBSD: OpenGL предоставляется драйверами с открытым исходным кодом и библиотекой MESA или проприетарными драйверами Nvidia.

OpenGL ES часто поддерживается во встроенных системах, но OpenGL ES — это API, отличный от обычного OpenGL.

Что такое контекст OpenGL и зачем окно для рендеринга GL?

Контекст GL содержит ресурсы (ресурсы драйвера в ОЗУ, назначенные идентификаторы текстуры, назначенные идентификаторы VBO, включенные состояния ( GL_BLEND , GL_DEPTH_TEST ) и многие другие). Думайте о контексте GL как о некоторой памяти, выделенной драйвером для хранения некоторой информации о состоянии вашей программы GL.

Вы должны создать контекст GL, чтобы вызовы функций GL имели смысл. Вы не можете просто написать минимальную программу, такую ​​как эта:

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

Вы должны создать окно и правильно инициализировать контекст OpenGL из него. Затем вы должны сделать текущий контекст GL ( wglMakeCurrent для Windows и glXMakeCurrent для *nix).

Как мне сделать закадровый рендеринг?

Некоторые люди хотят делать закадровый рендеринг без отображения окна.

Наиболее очевидным решением является создание окна, которое будет нормальным для приложения OpenGL, но не показывать его. После того как окно и контекст созданы, вы можете выполнять вызовы функций GL как обычно.

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

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

Как это работает на Windows?

Все версии Windows поддерживают OpenGL.

Когда вы компилируете приложение, вы связываетесь с opengl32.dll (даже в Win64).

Когда вы запускаете вашу программу, opengl32.dll загружается и проверяет в реестре Windows, есть ли настоящий драйвер GL. Если есть, он загрузит его. Например, имя драйвера GL от ATI начинается с atioglxx.dll, а драйвер GL от NVIDIA — nvoglv32.dll. Фактические имена могут меняться в зависимости от версии выпуска.

Microsoft Windows DLL opengl32.dll только непосредственно предоставляет функции OpenGL 1.1. Чтобы получить доступ к функциям из более высоких версий GL, вы должны вручную загрузить эти указатели функций с помощью wglGetProcAddress . Подробнее.

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

Важно знать, что opengl32.dll принадлежит Microsoft. Никто не может изменить это. Вы не должны заменять его. Вы не должны отправлять заявку с этим файлом. Вы также не должны отправлять nvoglv32.dll или любой другой системный файл.

Пользователь несет ответственность за установку драйвера, предоставляемого Dell, HP, nVidia, ATI/AMD, Intel, SiS и т. д. Хотя не стесняйтесь напоминать им об этом.

Как мне узнать, какую версию OpenGL я использую?

После создания контекста OpenGL информацию о нем можно запросить через ряд API. glGetString может использоваться с GL_VERSION , чтобы получить версию в виде строки. Однако функция glGetIntegerv с GL_MAJOR_VERSION и GL_MINOR_VERSION может использоваться для получения номера версии в виде целых чисел. Последний требует GL 3.0+.

Чтобы получить последнюю версию, поддерживаемую вашим графическим процессором, обязательно обновите драйверы видео. Поддержка GL включена в драйверы вашей видеокарты. После того, вы можете заметить, что ваша версия GL, например, 2.1. Как вы можете получить последнюю версию? Это зависит от вашего GPU. Возможно, ваш графический процессор не поддерживает ничего более высокого, поэтому производитель вашей видеокарты не предоставляет более высокую версию. В этом случае вы можете либо купить новую видеокарту, либо попробовать Mesa3D (это средство визуализации программного обеспечения) — http://www.mesa3d.org.

Почему моя версия GL только 1.4 или ниже?

Есть три причины, по которым вы можете получить неожиданно низкую версию OpenGL.

В Windows вы можете получить версию с низким GL, если при создании контекста вы используете не ускоренный формат пикселей. Это означает, что вы получаете реализацию OpenGL по-умолчанию, которая является версией 1.1.

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

Другая причина низкой версии OpenGL состоит в том, что производители вашей видеокарты (и, следовательно, производители ваших видео драйверов) не предоставляют современную реализацию OpenGL. Есть много несуществующих поставщиков видеокарт. Однако, из существующих, это, скорее всего, произойдет с интегрированными графическими процессорами Intel.

Intel имеет тенденцию относительно постепенно выводить свои интегрированные графические процессоры, отказываясь от поддержки интегрированных графических процессоров, выпущенных всего несколько лет назад. Как только они откажутся от поддержки, они не будут предоставлять новые драйверы, которые предоставляют более высокие версии OpenGL. NVIDIA и AMD обеспечивают долгосрочную поддержку своих графических процессоров.

Другая причина заключается в том, что вы не установили драйверы видеокарты после установки ОС.

Обязательно запросите OpenGL с glGetString и убедитесь, что возвращаемые значения имеют смысл.

Мультииндексированный рендеринг

Это означает, что каждый атрибут вершины (позиция, нормаль и т. д.) имеет свой собственный индексный массив. OpenGL (и Direct3D, в этом отношении) не поддерживают это напрямую; они допускают только один индексный массив, который одинаково индексирует все массивы атрибутов (кроме Instanced arrays).

При работе с такими данными у вас есть два варианта. Вы либо корректируете данные в соответствии с моделью единого индекса OpenGL, либо делаете что-то другое. Первый — это традиционный подход.

Довольно часто эта проблема возникает от тех, кто хочет использовать формат файла OBJ: v 1.52284 39.3701 1.01523 v 36.7365 17.6068 1.01523 v 12.4045 17.6068 -32.475 and so on . vn 0.137265 0.985501 -0.0997287 vn 0.894427 0.447214 -8.16501e-08 vn 0.276393 0.447214 -0.850651 and so on . vt 0.6 1 vt 0.5 0.647584 vt 0.7 0.647584 and so on . f 102/102/102 84/84/84 158/158/158 f 158/158/158 84/84/84 83/83/83 f 158/158/158 83/83/83 159/159/159 and so on .

В V линии определяют массив позиций («вершина», но это неправильно). В VN линии определяют массив нормалей. А линии vt определяют массив текстурных координат.

В F линии определяют грани многоугольника. Каждый набор чисел представляет одну вершину: комбинацию положения, нормали и координат текстуры (в данном случае). Таким образом, каждый полигон/поверхность имеет 3 вершины.

Значения строк f представляют собой индексы на основе 1 в ранее определенных массивах. Первый индекс переходит к первому определенному массиву, второй — к следующему и т. д.

В этом случае для каждой грани грани все три индекса одинаковы. Но формат OBJ не требует этого: f 1/1/1 2/2/2 3/2/2 f 5/5/5 6/6/6 3/4/5

Здесь вершины 3/2/2 и 3/4/5 — это разные вершины, несмотря на то, что обе используют индекс позиции 3.

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

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

Фактические массивы могут быть предоставлены VS с помощью ряда инструментов. Текстуры, как правило, слишком сложны для работы с этой целью, но текстуры буфера предоставляют удобный способ произвольного доступа к буферу из VS. UBO слишком малы для моделей с приличной стороной, но SSBO обычно могут иметь произвольный размер.

glClear и glScissor

Scissor Test влияет на операции Framebuffer Clearing. Если вы хотите очистить только область заднего буфера, вы можете включить GL_SCISSOR_TEST и вызвать glScissor , чтобы установить область для очистки.

В качестве альтернативы, если вы использовали раздельный тест и забыли вызвать glDisable(GL_SCISSOR_TEST) , то текущий блок все равно будет обрезать функцию очистки.

Masking

Запись маскирования состояние ( glColorMask , glStencilMask и glDepthMask ) может повлиять на Framebuffer Clearing функциональность. Например, если вы отключите запись глубины, вызвав glDepthMask(GL_FALSE) , то вызовы glClear не очистят буфер глубины.

Как я могу проверить на ошибки GL?

OpenGL хранит очередь накопленных кодов ошибок OpenGL, сгенерированных при обращении к его API. Когда не удается выполнить API OpenGL, он помещает код ошибки OpenGL в эту очередь.

Есть два альтернативных метода, которые приложение может использовать, чтобы обнаружить, когда генерируются ошибки OpenGL, и локализовать их источник:

  • Используйте обратные вызовы вывода отладки, или
  • Вызов glGetError после каждого вызова функции OpenGL (или группы вызовов функций).

Первый намного проще.

Какой формат файла 3D я должен использовать?

Новички часто задаются вопросом, какой формат файла 3D для своих данных меша использовать для своего проекта.

OpenGL не загружает файлы; поэтому вы можете использовать любой формат меша/сетки по вашему желанию. Это также означает, что вы должны предоставить соответствующий код загрузки самостоятельно; OpenGL не поможет вам.

Существует несколько вариантов форматов файлов с различными возможностями. Все эти форматы (и не только) могут быть загружены библиотекой Open Asset Import.

Wavefront .obj Это простой текстовый формат для данных сетки. Каждый файл .obj содержит одну сетку. Файлы obj могут ссылаться на файлы материалов, хранящиеся в менее часто используемом формате .mtl. Сетки в этом формате могут содержать только позиции, нормали и, возможно, одну текстурную координату. Autodesk .3ds Это двоичный формат сетки. Этот формат содержит материалы и может хранить несколько именованных сеток в одном файле. Quake 2 .md2 и Quake 3 .md3 Это двоичные форматы сетки. Форматы не содержат информацию о материале, и они технически хранят только одну сетку. Они поддерживают анимацию ключевых кадров, поэтому один файл сетки будет содержать все ключевые кадры анимации, а также данные анимации. COLLADA Это формат файла сетки на основе XML. Он может хранить почти все; он в основном используется для обмена документами между различными пакетами трехмерного моделирования.

Использование памяти

Кажется, часто думают, что в драйвере OpenGL есть утечка памяти. Некоторые пользователи пишут простые программы, такие как эта:

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

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

Кто управляет памятью? Как OpenGL управляет памятью?

Видеокарты имеют ограниченную память, если вы превысите ее, выделив много буферных объектов, текстур и других ресурсов GL, драйвер может сохранить часть из нее в системной памяти (RAM — ОЗУ). Когда вы используете эти ресурсы, драйвер может заменять ресурсы VRAM по мере необходимости. Конечно, это замедляет рендеринг. Объем оперативной памяти также ограничен для драйвера, и он может вернуть GL_OUT_OF_MEMORY при вызове glGetError . Он может даже вернуть GL_OUT_OF_MEMORY , если у вас есть много доступной VRAM и RAM, и вы пытаетесь выделить действительно большой буферный объект, который не нравится драйверу.

Цель этого раздела — ответить тем, кто хочет знать, что происходит, когда они распределяют ресурсы и на видеокарте заканчивается VRAM. Такое поведение не задокументировано в спецификации GL, поскольку оно не касается системных ресурсов и системного дизайна. Дизайн системы может отличаться, и GL старается оставаться нейтральным в системе. Некоторые системы не имеют видеокарты. Некоторые системы имеют встроенный процессор/графический процессор с общей оперативной памятью.

Что означает Unresolved External Symbol? Некоторые новички пытаются скомпилировать свою программу GL и получают ошибки компоновщика, такие как:

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

Приведенный выше пример относится к Microsoft Visual C++, но вы также можете получить ошибки компоновщика от других компоновщиков. Чтобы компоновщик выполнял свою работу, он должен знать, какой файл библиотеки он должен искать.

Для VC++ 2010 вы можете нажать Project в меню. Выберите Свойства. Из этого диалогового окна свойств, слева, Свойства конфигурации. Drop Linker. Нажмите на вход. На правой стороне написано «Дополнительные зависимости». Введите имя файла библиотеки и двоеточие. Для OpenGL это будет opengl32.lib. Для GLU это будет glu32.lib.

Кроме того, вы можете добавить эти строки:

в ваши .cpp файлы, что заставит библиотеки быть включенными. Они работают только на компиляторах, которые поддерживают использование #pragma .

Очевидно, мы не можем перечислить, что вам нужно сделать для каждой IDE. Вам нужно искать в Интернете или в руководствах. Вы должны знать, как использовать вашу IDE и ваш конкретный язык программирования.

В случае gcc пользователь вводит команду в CLI:

и CLI показывает

Это потому, что вы используете GLU, и вы не связали снова библиотеку GLU. Команда, которую вы должны ввести:

Что означает Not Declared In This Scope?

Некоторые новички пытаются скомпилировать свою программу GL и получают ошибки компиляции, такие как:

Это происходит потому, что компилятор не знает, что такое GL_TEXTURE_3D , поскольку он нигде не был объявлен.

Вы, вероятно, не включили правильный заголовок OpenGL. Заголовок gl.h может не включать в себя все, что вам нужно. Вы должны использовать библиотеку загрузки OpenGL; в противном случае вам придется использовать glext.h, найденный в реестре OpenGL. Это также означает, что вам нужно вручную загружать функции OpenGL.

Могу ли я предварительно скомпилировать мои шейдеры?

GL 4.1 добавляет возможность компилировать программу и загружать двоичный файл программы из драйвера GL. Однако эти двоичные файлы зависят от графического процессора и драйвера. Нет гарантии, что они будут работать на других графических процессорах. Действительно, нет гарантии, что они будут работать на одном и том же графическом процессоре; изменения драйвера могут сделать старый двоичный файл несовместимым. Цель этой функции — один раз скомпилировать и сохранить на жестком диске для будущих запусков, но с возможностью использовать исходный источник, если произойдет обновление драйвера.

OpenGL OpenGL 4.6 или ARB_gl_spirv предоставляет возможность использовать шейдеры на языке SPIR-V, а не на GLSL. Это позволяет предварительно скомпилировать шейдер GLSL в SPIR-V, а затем загрузить его через интерфейс SPIR-V. Вы также можете предварительно скомпилировать свой шейдер из других языков или даже изобрести свой собственный, если он генерирует OpenGL-потребляемый SPIR-V.

Много маленьких 2D текстур

Эта техника также называется текстурным атласом.

Некоторые пользователи спрашивают о том, как объединить множество небольших 2D-текстур в одну большую 2D-текстуру (1024 x 1024 или что-то большее). Таким образом, вы можете избежать вызова glBindTexture и, возможно, получить некоторую производительность. Да, вы можете сделать это, но вы также должны следить за координатами текстуры в ваших моделях. Вы также должны остерегаться фильтрации текстур, потому что линейный фильтр может вызвать течение текселей (выборочная соседняя субтекстура).

Другое решение состоит в том, чтобы поместить эти маленькие текстуры в одну трехмерную текстуру ( GL_TEXTURE_3D , которая является частью GL 1.3 и выше), если все 2D текстуры имеют одинаковый размер. Проблема фильтрации текстур все еще присутствует в этом случае, если вы используете линейную фильтрацию. Нет проблем в направлении S и T, но проблема существует между слоями текстуры.

Другое решение состоит в том, чтобы использовать текстуры 2D-массивов. Это решает проблему, которая присутствует в случае использования трехмерной текстуры, как описано выше. Слои массива в текстуре должны быть одинакового размера и формата.

Рендеринг шрифтов и текста

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

Один из самых простых способов — создать текстуру со всеми символами. Затем визуализируйте много квадратов на экране и нанесите текстуру на карту персонажей.

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

Вы также можете использовать функции своей ОС и получить доступ к шрифтам и сделать из них текстуры. Затем нанесите текстуру на карту для четырех квадратов.

Windows предлагает определенные функции для рендеринга текста, но они старые и, вероятно, не должны использоваться в наши дни. Смотрите wglUseFontBitmaps и wglUseFontOutlines .

Устаревшие вопросы OpenGL

Все эти ответы касаются удаленных возможностей Legacy OpenGL.

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

Среди многих других, простым примером является рендеринг примитива с использованием одного вызова функции для отправки каждого атрибута вершины отдельно, например, glVertex3f(1.f, 0.f, 0.f) , внутри операторов glBegin() и glEnd() . Используя шейдеры, вы должны сначала определить все атрибуты вершин в локальном буфере памяти, создать буферный объект, а затем передать атрибуты вершин с помощью glBufferData , glBufferSubData или путем сопоставления буфера с помощью glMapBuffer или glMapBufferRange . Затем шейдеры смогут использовать данные в хранилище данных объекта буфера для рендеринга.

Являются ли glTranslate/glRotate/glScale аппаратно ускоренными? Нет, нет известных графических процессоров, которые выполняют это.

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

Как визуализировать в пиксельном пространстве

Установите определенную матрицу проекции:

Обратите внимание, что ось Y идет снизу вверх из-за вызова glOrtho . Вы можете поменять местами нижние и верхние параметры, если хотите, чтобы Y переходил сверху вниз. Убедитесь, что вы отображаете полигоны в правильном порядке, чтобы GL не отбрасывал их или не вызывал glDisable(GL_CULL_FACE) .

Полноэкранный квад

Пользователи часто спрашивают, как сделать полноэкранный квад. Как должна выглядеть матрица проекции?

Матрица проекции должна быть единичной матрицей. В старом GL вы можете вызывать glMatrixMode(GL_PROJECTION) , glLoadIdentity( ) и glMatrixMode(GL_MODELVIEW) и glLoadIdentity() .

В GL на основе шейдеров шейдеру GLSL даже не нужна матрица. Вы можете просто сделать это

Вершины для вашего четырехугольника (или 2 треугольников) должны быть <-1,0, −1,0, 0,0>, <1,0, −1,0, 0,0>, <1,0, 1,0, 0,0>, <-1,0, 1,0, 0,0>.

Должен ли я использовать списки отображения, массивы вершин или объекты буфера вершин?

Списки отображения и массивы вершин были с GL с самого начала. Буферные объекты вершин были введены с GL 1.5. Хотя все они могут использоваться для визуализации примитивов, они не одинаковы и имеют отличные свойства:

  • Список отображения представляет собой серию четко определенных команд GL, которые могут быть оптимизированы с точки зрения выполнения и передачи данных в видеопамять при создании списка. Команды и данные в списке хранятся на сервере или в видеопамяти и извлекаются и выполняются при вызове списка. Например, указание атрибутов вершин с использованием массива вершин, скорее всего, приведет к тому, что GL сохранит данные в видеопамяти для быстрого доступа. Списки отображения являются статическими, поэтому отображение списков отображения на динамически изменяемые данные невозможно. Преимущество состоит в том, что время выполнения обычно очень быстрое по сравнению с некоторыми альтернативами.
  • Массивы вершин позволяют задавать вершины за один раз, используя массив атрибутов. Это позволяет избежать использования конструкций непосредственного режима, которые, возможно, передают каждую вершину атрибута по вершине и, таким образом, приводят к большому количеству вызовов API и к атрибуту передачи данных по атрибуту. Массивы вершин позволяют динамически определять вершины. Однако, поскольку данные хранятся в памяти клиента, то есть в системной памяти, управляемой приложением, они также должны каждый раз передаваться в GL.
  • Объекты буфера вершин, если GL может сделать это, хранятся в видеопамяти — точно так же, как списки отображения. Таким образом вы избегаете необходимости повторной передачи каждого кадра. Однако, в отличие от списков отображения, вы можете динамически обновлять объекты буфера вершин. Кроме того, вы получаете преимущество очень малого числа вызовов API, необходимых для фактического рендеринга.

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

Если и только если есть требование поддерживать существующий унаследованный код и нет возможности переписать систему рендеринга, использование списков отображения может быть весьма выгодным по сравнению с массивами вершин для статических данных. Если требуются динамические обновления, нет способа окружить массивы вершин. Если найдены конструкции непосредственного режима, такие как glBegin() , их можно заменить либо списками отображения, либо массивами вершин, чтобы повысить производительность во многих реальных случаях, когда число вершин обычно составляет сотни или тысячи на объект.

Зачем ограничивать до 8 источников света?

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

В фиксированной функции OpenGL часто спрашивают, почему GL поддерживает максимум 8 источников света. Это неправда, GL не накладывает максимум 8 источников света. Это накладывает минимум 8 огней. Ваша комбинация драйверов и графических процессоров может поддерживать более 8, но большинство из них ограничивают себя до 8. Причина в том, что она не становится заметной, когда на одной поверхности светит более 3 или 4 источников света. Так что на самом деле 8 — это чрезмерное число.

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

Например, если вы выполняете эффекты частиц, где каждая частица является источником света, и у вас есть, возможно, 1000 частиц, это фактически безумное количество источников света для рендерера в реальном времени для старого оборудования (пример: оборудование, которое поддерживает GL 1.5). Вы можете обойтись всего одним источником света для всей группы частиц.

Если вы действительно хотите иметь более 8 источников света, вы можете сделать это с помощью многопроходного подхода. Рендеринг вашего объекта с 8 огнями. Затем включите смешивание и включите добавочное смешивание ( glBlendFunc(GL_ONE, GL_ONE) ), а затем снова визуализируйте ваш объект. Возможно, вы захотите установить свой тест глубины на GL_LEQUAL .

Теперь давайте посмотрим на это с другой точки зрения. В старой игре использовались огни? На самом деле они этого не сделали. Многие старые игры использовали световые карты для статических поверхностей. Для движущегося объекта они сами вычислили освещение, или оно было предварительно вычислено (он же объем света).

Что такое GLU?

GLU расшифровывается как OpenGL utility library (служебная библиотека OpenGL) и предоставляет удобные функции, наслоенные на унаследованные функции OpenGL. Популярные примеры функциональности GLU:

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

Если вы пишете приложение, которое использует современный OpenGL, то есть ядро ​​OpenGL 3.0 или выше, рекомендуется либо написать свой собственный код, либо использовать стороннюю библиотеку, которая либо вообще не работает в OpenGL, либо использует OpenGL 3.0 или выше. Основные особенности и список подходящих сторонних библиотек можно найти здесь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *