Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / OpenGL Вопросы (23 стр)

OpenGL Вопросы (23 стр)

Поделиться

Страницы: 1 2 3 4 ... 12 ... 22 23

Blew_zcПостоялецwww9 окт. 201711:34#330
danrusm
Плохо ищешь. gl_DrawID
danrusmПостоялецwww10 окт. 201712:42#331
Спасибо.
Только вот надо активировать # extension GL_ARB_shader_draw_parameters : enable
и не gl_DrawID, а gl_DrawIDARB.
В общем работает, хотя в интернете всяких ухищрений куча, для адаптации nvidia к данной приблуде, но вроде ввели расширение.
Blew_zcПостоялецwww10 окт. 201712:48#332
danrusm
Дак оно в ядре 4.3. У тебя какой контекст?
danrusmПостоялецwww10 окт. 201713:06#333
Да, 4.3.
Джек АллигаторПостоялецwww30 окт. 20179:38#334
Возможно ли во фрагментном шейдере получить барицентрические координаты данного пикселя и соответствующие им индексы вершин треугольника?
В софтверном растеризаторе текстур написал такой код:
let bary = barycentric(a, b, c, pix); // получаем барицентрические координаты

let bary_max = max(max(bary.x,bary.y),bary.z); // находим ближайшую из них

let nearest_id = // сопоставляем с id вершины
  if bary_max == bary.x {
    tri[0]
  }else if bary_max == bary.y {
    tri[1]
  }else{
    tri[2]
  };
хочу перенести его во фрагментный шейдер в реалтайм.

Можно пробросить gl_VertexID из вершинного шейдера, но там вроде как будет интерполяция, а мне надо отрендерить конкретный id.
А без интерполяции будет только одна вершина из трех. Или нет?

Правка: 30 окт. 2017 9:39

SuslikМодераторwww30 окт. 20179:55#335
Джек Аллигатор
можно для каждого треугольника продублировать вершины и задать им один из атрибутов их барицентрические координаты вроде (0, 1, 0). их интерполировать как любую другую величину.
Джек АллигаторПостоялецwww30 окт. 201710:23#336
Suslik
> можно для каждого треугольника продублировать вершины и задать им один из
> атрибутов их барицентрические координаты вроде (0, 1, 0). их интерполировать
> как любую другую величину.
Это понятно, вопрос именно в индексах.
SuslikМодераторwww30 окт. 201710:35#337
Джек Аллигатор
теоретически можно в каждую вершину положить ещё один атрибут для интерполяции вроде (id0, id1, id2). этот атрибут заполняешь на этапе построения меша на CPU. так как вектор одинаковый, то результат интерполяции для всего треугольника тоже будет одинаковым. ну и id0/1/2 — это, собственно, и есть id вершин.

менее извращённый способ — каждой вершине треугольника добавить атрибут — номер треугольника, которому они принадлежат. так как вершины дублируются, то номер этот будет единственным. и дальше уже через ssbo во фрагментном шейдере читать, какие вершины этому треугольнику принадлежат.

Правка: 30 окт. 2017 10:37

Джек АллигаторПостоялецwww30 окт. 201710:40#338
Suslik, спасибо, попробуем так!

Страницы: 1 2 3 4 ... 12 ... 22 23

/ Форум / Программирование игр / Графика

2001—2017 © GameDev.ru — Разработка игр