gl_PointSize разъяснение OpenGLES

Что значит настройка gl_PointSize = 1.0 в вершинном шейдере значит или добиться? Означает ли это, что вершина сама по себе является пикселем?

2 ответа

Решение

Что означает или достигает установка gl_PointSize = 1.0 в вершинном шейдере? Означает ли это, что вершина сама по себе является пикселем?

Да, это так.


Увидеть gl_PointSize:

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

См. Спецификацию OpenGL ES - реестр Khronos OpenGL ES, 3.3 балла, стр. 51:

Размер точки берется из встроенного шейдера gl_PointSize и зажимается в зависимости от реализации диапазона размеров точек. Если значение записано в gl_PointSize меньше или равно нулю, результаты не определены. Диапазон определяется ALIASED_POINT_SIZE_RANGE и может запрашиваться, как описано в главе 6. Максимальный поддерживаемый размер точки должен быть как минимум один.
Растеризация точек создает фрагмент для каждого пикселя кадрового буфера, центр которого находится внутри квадрата с центром в точке (xw, yw) с длиной стороны, равной размеру точки.


Это означает, что если вы определите gl_PointSize = 1.0, то это указывает квадрат с длиной стороны 1 фрагмента. Фрагмент, центральная точка которого находится в этом квадрате, затронут.


Конечно gl_PointSize имеет смысл, только если GL_PROGRAM_POINT_SIZE включен:

glEnable(GL_PROGRAM_POINT_SIZE);

и примитивный режим GL_POINTS (или режим многоугольника установлен на GL_POINT - например glPolygonMode(GL_FRONT_AND_BACK, GL_POINT)).

gl_PointSize определяет размер точки.

Вы можете рисовать в треугольниках, линиях и точках. Например, если вы нарисуете треугольник в точках, на экране появятся 3 точки. Там размер можно изменить с помощью параметра gl_PointSize. Если вы установите, например, gl_PointSize = 10.0; тогда точки на экране будут довольно большими.

Для чего это? Дает больше возможностей. Также текстура может быть связана с точкой - где бы вы ни нарисовали точку, там будет текстура. Круто, а? И размер этой текстуры в этом случае определяется gl_PointSize;

Не очень уверен, в каком диапазоне его можно изменить. Я думаю, это зависит немного. Просто попробуйте (например, 1.0, 4.0, 10.0), и вы быстро увидите разницу.

Другие вопросы по тегам