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), и вы быстро увидите разницу.