2013-09-25 1 views
0

я в настоящее время имеет следующие данные вершин (для пирамиды) выкладываюсь так:Эффективных средства рисования облицованной границы для твердой формы

float4 vertexData[ 18 ] = 
{ 
    // front 

    { 1.0f, 0.0f, 1.0f, 1.0f }, // front right 
    { 0.0f, 1.0f, 0.0f, 1.0f }, // top 
    { -1.0, 0.0f, 1.0f, 1.0f }, // front left 


    // right 

    { 1.0f, 0.0f, 1.0f, 1.0f }, // right front 
    { 0.0f, 1.0f, 0.0f, 1.0f }, // top 
    { 1.0f, 0.0f, -1.0f, 1.0f }, // right back 


    // back 

    { 1.0f, 0.0f, -1.0f, 1.0f }, // back right 
    { 0.0f, 1.0f, 0.0f, 1.0f }, // top 
    { -1.0, 0.0f, -1.0f, 1.0f }, // back left 


    // left 

    { -1.0f, 0.0f, -1.0f, 1.0f }, // left back 
    { 0.0f, 1.0f, 0.0f, 1.0f }, // top 
    { -1.0f, 0.0f, 1.0f, 1.0f }, // left front 

    // bottom back major 

    { -1.0f, 0.0f, 1.0f, 1.0f }, // bottom left front 
    { -1.0f, 0.0f, -1.0f, 1.0f }, // bottom left back 
    { 1.0f, 0.0f, -1.0f, 1.0f }, // bottom right back 

    // bottom front major 

    { 1.0f, 0.0f, -1.0f, 1.0f }, // bottom right back 
    { 1.0f, 0.0f, 1.0f, 1.0f }, // bottom right front 
    { -1.0f, 0.0f, 1.0f, 1.0f }, // bottom left front 

}; 

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

Я знаю, что я мог бы просто использовать «GL_LINES» и установить новый однородный цвет, но я думаю, что это будет не очень эффективно. Может, я ошибаюсь?

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

Любые идеи относительно хорошего подхода для этого?

ответ

3

Вы называете cel-shading. Один из самых популярных руководств для этого можно найти здесь: http://nehe.gamedev.net/tutorial/cel_shading/25001/

Использование GL_LINES не является неэффективным. Используйте VBO для хранения данных вершин на графическом процессоре, затем вы можете рисовать несколько раз. И вы можете даже нарисовать GL_LINES своим пользовательским шейдером. В учебнике это делается в основном так же. Для того, чтобы контуры не сливались с фоном твердых объектов, вам нужно небольшое смещение глубины (избегайте сражений с z-буфером).

1

Он определенно связан с затенением мультфильма (ячейки).

Есть несколько способов сделать это:

Смежные вопросы