Основной профиль OpenGL 3.2 glLineWidth - PullRequest
9 голосов
/ 09 января 2012

Я настраиваю базовый контекст OpenGL 3.2 в Mac OS X. Я хочу, чтобы можно было рисовать некоторые толстые черные отметки на экране. В предыдущей версии OpenGL я мог просто установить

glLineWidth(10.0f);

и я получу линию шириной 10 пикселей. Однако, когда я проверяю ширину линии в диапазоне 3.2 Core

GLint range[2];
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range);
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range);

Я получаю значения 1 для Aliased Lines и 0-1 для Smooth lines. Как сделать линию шириной 10,0 пикселей в пространстве экрана? Есть ли простой способ нарисовать это, кроме как сделать каждый отрезок прямой прямоугольником?

Ответы [ 2 ]

7 голосов
/ 10 января 2012

Используя основной профиль OpenGL 3.2, вызов glLineWidth со значением больше 1,0 выдает ошибку INVALID_VALUE (вызовите glGetError , чтобы доказать это).

Конечно, вы можетеполучить желаемый результат, определив квад, необходимый для рисования линии.

Я думаю, вы должны иметь возможность генерировать квады из точек линии: эй, большая линия - это квад!Возможно, вы могли бы использовать такие технические процедуры, как this , чтобы получить желаемый результат.

Ключ: вместо того, чтобы полагаться на LineWidth, вы задаете единицу квадрата в качестве входных данных (4 вершины, используя полосу треугольника),затем преобразуйте входящие вершины внутри шейдера, передавая ему соответствующую форму.

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

1 голос
/ 09 января 2012

Это может зависеть от типа проекции, которую вы настроили. Вы используете ортогональную или перспективную матрицу проекции?

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

Приветствия

...