Есть ли замена для glPolygonMode в Open GL ES / WebGL? - PullRequest
5 голосов
/ 22 августа 2010

Я хотел бы создать игру в режиме каркаса, но без команды glPolygoneMode я не знаю, как бы я это сделал. Это то, что я мог бы кодировать себя с тем, что доступно? Я совершенно новичок в opengl. Если кто-то сделал это и у него есть фрагмент кода, я бы очень хотел его увидеть. Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 22 августа 2010

Возможно, вы могли бы визуализировать всю сцену, используя GL_LINES

2 голосов
/ 13 января 2019

К сожалению, вам, возможно, придется полностью преобразовать вашу геометрию в линейные примитивы и визуализировать их, используя GL_LINES.Тем не менее, это, конечно, не просто заменить GL_TRIANGLES (или что-то еще) на GL_LINES в вызовах отрисовки, вам придется полностью переупорядочить свои вершины, чтобы приспособиться к новому примитивному режиму.Это требует, чтобы вы по крайней мере использовали разные индексные массивы в вызовах glDrawElements... или, для неиндексированного рендеринга (glDrawArrays...), совсем разные вершинные массивы (хотя, если вы действительно решите это сделать, это может быть правильным моментом)вместо этого переключиться на индексированный чертеж.

Если, однако, у вас есть Геометрические шейдеры (хотя, похоже, WebGL их не поддерживает, OpenGL ES долженначиная с версии 3.2, как и в случае с desptop GL, но в любом случае он имеет старый добрый glPolygonMode и не использует их для чего-то другого, все становится проще.В этом случае вы можете просто установить довольно простой геометрический шейдер между обработкой вершины и фрагмента, который берет треугольники и выводит 3 строки для каждого из них:

layout(triangles) in;
layout(line_strip, max_vertices=4) out;

void main()
{
    for(int i=0; i<4; ++i)
    {
        // and whatever other attributes of course
        gl_Position = gl_in[i%3].gl_Position;
        EmitVertex();
    }
}

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

...