我目前有如下布局的顶点数据(金字塔):
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”,并设置一个新的统一颜色,但我认为这不会非常有效。也许我错了?
无论哪种方式,我最初认为着色器的主要原因是因为它们是一个很酷的方法:我可以编写一个程序,可以为边框添加一些有趣的效果。但是,通过一个着色器程序如何做到这一点,我完全被难倒了。
对此采取良好做法的任何想法?
答案 0 :(得分:3)
你所说的是细胞阴影。其中一个最受欢迎的教程可以在这里找到:http://nehe.gamedev.net/tutorial/cel_shading/25001/
使用GL_LINES效率不高。使用VBO将顶点数据存储在GPU上,然后可以绘制几次。您甚至可以使用自定义着色器绘制GL_LINES。在教程中,它基本上以相同的方式完成。要使轮廓不渗透到实体对象背景中,您需要一个小的深度偏移(避免z缓冲区对抗)。
答案 1 :(得分:1)
它与卡通(单元格)着色明确相关。
有几种方法可以做到: