Каково основное использование объектов Vertex Buffer?

8

Из того, что я прочитал, кажется, что VBO предназначены исключительно для производительности.

Я работаю над очень элементарным учебным проектом в lwjgl, и я просто пытаюсь выяснить, в какие более продвинутые функции библиотеки мне следует вникнуть, и для чего они используются.

Насколько я понимаю, VBO позволяют человеку сохранять вершины в VRAM, пока они не рисуются в сцене. В моем случае я просто рисую четырехугольники, и производительность, вероятно, совсем не беспокоит, но я пытаюсь собрать воедино то, что происходит под капотом. Если я рисую напрямую, я рисую из памяти процессора, правильно? Кроме того, если я не проверяю видимость, значит ли это, что я отображаю абсолютно все в «сцене», независимо от того, находится ли она в поле зрения? Являются ли VBO способом хранить объекты и отображать только то, что нужно?

sensae
источник

Ответы:

10

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

Буферные объекты не являются способом избежать отбраковки усеченного конуса или других конструкций в стиле графов сцены. При использовании для данных вершин буферные объекты просто хранят данные вершин. Без них ваши glDrawElements/Arrays/etcвызовы будут извлекать данные из массивов, хранящихся в буферах членов ЦП. При использовании буферных объектов для рендеринга массивы извлекаются из содержимого буферных объектов.

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

Николь Болас
источник
1
Я мог бы прояснить только немного и сказать , что реальная оптимизация вы делаете с помощью ВБО - х относится к шине между CPU и GPU, который является относительно медленным (и спорным). Если бы эта скорость шины была незначительной, то практически не было бы разницы между использованием VBO и использованием массива с плавающей запятой на стороне процессора.
Нотлеш
1
Также стоит отметить, что ваш драйвер может свободно хранить буферные объекты где угодно, в том числе и в памяти процессора.
Максимус Минимус
Кроме того, построить VBO / VAO и просто вызвать на нем drawarrays (imho) проще, чем зацикливать фиксированные конвейерные функции для всех вершин / граней. Это все равно, что сказать графической карте: «иди, пропусти эту коробку треугольников через этот шейдер» вместо «Иди, возьми эту вершину, эту вершину и тому подобное, и сделай там красивый счастливый маленький треугольник. Теперь возьми следующий ...». Ой, подожди, теперь я увлекаюсь шейдерами больше, чем VBO.
Exilyth
2

Буферы массива OpenGL (= то, что мы называем VBO) служат одной единственной цели: хранить ваши геометрические данные в памяти GPU, а не в клиентской памяти, так что вам не нужно будет пересылать их каждый кадр.

Так просто :-)

Кос
источник