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

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

Страницы: 122 23 24 25 26 Следующая »
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, спасибо, попробуем так!
war_zesПостоялецwww28 ноя. 20173:15#339
Вопрос по атрибутам. по примерам пишется примерно такой код:
GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
glEnableVertexAttribArray(posAttrib);
glVertexAttribPointer(posAttrib, ....);
GLint texAttrib = glGetAttribLocation(shaderProgram, "textureCoord");
glEnableVertexAttribArray(texAttrib);
glVertexAttribPointer(texAttrib , ....);

Но мне в нем не нравится.... Да вообще все не нравится - и то что надо тащить shaderProgram, и то что ищет по текстовому ключу "position" (а если я решу в шейдере переименовать - то потом надо по всему коду искать это место и там тоже переименовывать).


Сейчас я написал так:

glEnableVertexAttribArray(0);// posAttrib
glVertexAttribPointer(0, ....);
glEnableVertexAttribArray(1);// texAttrib
glVertexAttribPointer(1, ....);
В вершинном шейдере:
layout(location = 0) in vec2 position;
layout(location = 1) in vec2 textureCoord;

И конечно работает. но OpenGL, он такой - короче, я могу быть уверен на 100% что данный код будет работать везде (включая мобилки и вебгл)?
(а то уже встречал приколы оптимизатора шейдера когда он менял мой код шейдера обрезая все лишнее и приводя к UB из-за того что в моем коде это "лишнее" как раз было нужно, так что не удивлюсь, если он может менять атрибуты местами)

Правка: 28 ноя. 2017 3:17

0xc0deПостоялецwww28 ноя. 20179:13#340
war_zes
> И конечно работает. но OpenGL, он такой - короче, я могу быть уверен на 100%

Читай спецификации. Если не уверен в OpenGL, то юзай что-то иное.

war_zesПостоялецwww28 ноя. 20179:42#341
0xc0de
что толку от спецификации если вендоры их трактуют по своему? и на одном компьютере оно будет работать, на другом - нет?
(к примеру - юниформы с одинаковыми именами в разных шейдерах - у NVIDIA это работает, у AMD - это краш при создании ShaderProgram. Весело)

Вопрос был не к сухим документам про абстрактную OpenGL в вакууме, а к опыту других людей.

Правка: 28 ноя. 2017 9:42

0xc0deПостоялецwww28 ноя. 20179:46#342
war_zes
> что толку от спецификации если вендоры их трактуют по своему?

В этом беда OpenGL :(

PS:
Проблем с layout location не наблюдал и никто не жаловался.

Правка: 28 ноя. 2017 9:52

innuendoПостоялецwww28 ноя. 20179:51#343
0xc0de

> В этом беда OpenGL

в этом беда открытых стандартов


war_zes
> что толку от спецификации если вендоры их трактуют по своему? и на одном
> компьютере оно будет работать, на другом - нет?
> (к примеру - юниформы с одинаковыми именами в разных шейдерах - у NVIDIA это
> работает, у AMD - это краш при создании ShaderProgram. Весело)

кто-то заставляет тебя писать на GL?

AndreyПостоялецwww28 ноя. 20179:59#344
war_zes
> Но мне в нем не нравится.... Да вообще все не нравится - и то что надо тащить
> shaderProgram, и то что ищет по текстовому ключу "position" (а если я решу в
> шейдере переименовать - то потом надо по всему коду искать это место и там тоже
> переименовывать).
Если нужна совместимость с OpenGL ES 2.0 то делать приджется только так.
>И конечно работает. но OpenGL, он такой - короче, я могу быть уверен на 100% что данный код будет работать везде (включая мобилки и вебгл)?
Думаю уже в современных дровах это уже должно стабильно работать даже на Intel. На WebGL 2.0 по идее GL_ARB_explicit_attrib_location уже в ядре OpenGL ES 3.0, через Angle WebGL довольно стабильный так что с WebGL может ситуация лучше.
С мобилами ошибки могут быть.
Страницы: 122 23 24 25 26 Следующая »

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

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