Получение размера поверхности в шейдере фрагментов (GLSL)

#opengl #glsl

#opengl #glsl

Вопрос:

Я пишу шейдер для своей сетки, который имеет треугольники разных размеров в 3 измерениях. Поэтому, если я «размываю» или растушевываю на этапе фрагментации, я получаю такое же размытие, несмотря на размер треугольника, который я фрагментирую. Некоторые треугольники огромные, некоторые крошечные.

Я хочу иметь эталонное значение, чтобы получить правильную пропорцию моего треугольника.

Есть ли способ получить длину треугольника, чтобы у меня была шкала рядом с моими UV-координатами.

Пожалуйста, найдите это изображение, чтобы показать, что я имею в виду: здесь . Я хочу получить результат # 3

Я работаю в OpenGL, GLSL. Спасибо за вашу помощь!

Комментарии:

1. Рассматривали ли вы возможность использования dfdx и dfdy ( khronos.org/registry/OpenGL-Refpages/gl4/html/dFdx.xhtml )? С помощью этого вы можете проверить, насколько текущий фрагмент удален от соседних фрагментов, и таким образом вы можете получить измерение того, сколько вы «прошли» внутри треугольника.

2. В качестве альтернативы, если вам действительно нужно значение, чтобы соответствовать пропорции площади треугольника или длине ребра, на котором расположена вершина, относительно следующей вершины (в порядке CW или CCW), вы можете добавить атрибут вершины и предварительно вычислить их на CPU перед отправкой треугольниковдля графического процессора.

3. Не могу понять, как начать с DFDX …. ваш второй вариант — это путь, в конце концов, я думаю…

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

Ответ №1:

Я решил это с помощью геометрического шейдера.