Я бы хотел, чтобы прямоугольники были выровнены по оси экрана, но без каких-либо причудливых вещей, таких как треугольники или вентиляторы...
Я искал в Интернете, но только нашел примеры с использованием треугольников... (и, в конечном счете, с использованием прямоугольников с ножницами, но это было бы слишком медленно, если бы я отображал многие из них, особенно в старых версиях)
Я знаю, что треугольники - это то, что современное оборудование лучше всего подходит для рендеринга, но я не вижу, как это может быть быстрее, чем что-то (теоретически):
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.
В случае, если это невозможно, то как видео ускоренное программное обеспечение, такое как интернет-браузер или другие приложения для настольных ПК, отображает прямоугольные области?
Используют ли они треугольники?
Они используют треугольники, устроенные так:
Если вы не заботитесь о значениях буфера глубины, вы можете рендерить квадратики, не делая никаких преобразований в своем вершинном шейдере (или, если использовать старые функции glMatrix
, используя проекцию идентичности и матрицу просмотра модели); (-1, -1)
будет нижним левым углом экрана, а (1,1)
- верхним правом углу. При желании вы можете использовать матрицу орфографической проекции для передачи в пиксельных координатах или что-то еще.
Если вам нужны значения глубины или нужно использовать мировые космические координаты, найдите афишу; есть много уроков о том, как это сделать.
Имейте в виду, что современные 3D-игры рисуют сотни тысяч проецируемых треугольников в каждом кадре, но только несколько элементов HUD, которые почти всегда представляют собой простые текстурированные прямоугольники. Угадайте, в каких случаях оптимизаторы GPU оптимизируют.