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”,并设置一个新的统一颜色,但我认为这不会很有效。不过,也许我错了?

无论哪种方式,我最初考虑着色器的主要原因是因为它们是一种很酷的方法:我可以编写一个可以为边框添加一些有趣效果的程序。但是,就如何通过一个着色器程序执行此操作而言,我完全被难住了。

关于这个的好方法有什么想法吗?

4

2 回答 2

3

你所说的就是细胞阴影。可以在这里找到最流行的教程之一:http: //nehe.gamedev.net/tutorial/cel_shading/25001/

使用 GL_LINES 并不是低效的。使用 VBO 将顶点数据存储在 GPU 上,然后可以多次绘制。您甚至可以使用自定义着色器绘制 GL_LINES。在本教程中,它基本上以相同的方式完成。为了使轮廓不渗入实体对象背景,您需要一个小的深度偏移(避免 z 缓冲区冲突)。

于 2013-09-25T04:28:59.637 回答
1

它与卡通(单元格)着色明确相关。

有几种方法可以做到:

于 2013-09-25T11:10:15.043 回答