К сожалению, вам, возможно, придется полностью преобразовать вашу геометрию в линейные примитивы и визуализировать их, используя 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();
}
}
Если вы используете правильный блокВзаимодействие шейдеров на основе, вы должны быть в состоянии использовать ваши существующие вершинные и фрагментные шейдеры для остальных и просто зацепить этот геометрический шейдер между ними для каркасного рендеринга всех видов для примитивов на основе треугольников.