Как вы делаете нелинейное затенение в OpenGL? - PullRequest
3 голосов
/ 13 сентября 2010

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

В OpenGL, если я использую «гладкую» модель затенения, то, если я создам многоугольник и присваиваю каждой вершине различное значение, тогда он будет автоматически интерполировать (линейно) между значениями в вершинах, чтобы получить цвет значения в точках в интерьере. Но это просто дает линейную функцию в каждой ячейке, и я хочу, чтобы это была нелинейная функция, которую я указываю. Есть ли способ сделать это?

(Конечно, одним из решений было бы интерполировать «вручную», рисуя каждую ячейку в виде композита из гораздо меньших полигонов OpenGL, которые достаточно малы, чтобы цвет не сильно менялся в каждом из них. Но я хочу знать, если у OpenGL есть решение.)

1 Ответ

7 голосов
/ 13 сентября 2010

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

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

Редактировать

Я нашел статью, посвященную именно этой проблеме: http://mgarland.org/files/papers/perpixel.pdf

...