Как визуализировать выровненные по экрану прямоугольники так же, как точечные спрайты в OpenGL

0

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

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

for (i=y; i<y+h; i++) {
    for (j=x; j<x+w; j++) {
        executeFragmentShader(j, i);
    }
} //x, y, w and h being the rectangle data

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

В случае, если это невозможно, то как видео ускоренное программное обеспечение, такое как интернет-браузер или другие приложения для настольных ПК, отображает прямоугольные области?
Используют ли они треугольники?

  • 0
    Вы можете испустить два треугольника из одной вершины, если вы используете геометрические шейдеры. Но я должен подчеркнуть, что геометрические шейдеры никогда не улучшают производительность в таком сценарии. Вы получите лучшую производительность, рисуя 4 проиндексированных вершины и выкладывая их в вершинном шейдере.
Теги:
opengl

1 ответ

3

Они используют треугольники, устроенные так:

Изображение 174551

Если вы не заботитесь о значениях буфера глубины, вы можете рендерить квадратики, не делая никаких преобразований в своем вершинном шейдере (или, если использовать старые функции glMatrix, используя проекцию идентичности и матрицу просмотра модели); (-1, -1) будет нижним левым углом экрана, а (1,1) - верхним правом углу. При желании вы можете использовать матрицу орфографической проекции для передачи в пиксельных координатах или что-то еще.

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

Имейте в виду, что современные 3D-игры рисуют сотни тысяч проецируемых треугольников в каждом кадре, но только несколько элементов HUD, которые почти всегда представляют собой простые текстурированные прямоугольники. Угадайте, в каких случаях оптимизаторы GPU оптимизируют.

  • 0
    Во-первых, спасибо за ваш ответ, но я считаю (скажите, если я ошибаюсь), что рендеринг точечного спрайта быстрее, чем рендеринг двух треугольников (которые вы должны растеризовать). Тогда то же самое должно быть достижимо для прямоугольников, выровненных и обращенных к экрану , верно? Так это ошибка всех программистов (что-то вроде этого) или это просто невозможно в OpenGL (что-то неутешительное)?
  • 0
    Я немного смущен вашим ответом. Вы утверждаете, что точечные спрайты отображаются в виде двух треугольников? Это не то, что охватывает спецификация GL - конечно, можно отобразить спрайты с псевдонимами в виде двух треугольников, не нарушая ничего, но это не единственный способ, которым это можно сделать. С другой стороны, сглаженные точечные спрайты растеризуются совершенно другим способом (в виде кругов).
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню