GLSL自定义/不插值顶点颜色的三角形



我想要达到的效果是顶点颜色与锐利的轮廓。所以在三角形内部,片段着色器应该使用最接近那个片段的顶点的颜色。

现在,当考虑到它,我能想到的唯一的解决方案是分配texcord 1,0,0,0,1,0和0,0,1到三个顶点,并有2(重新排序)顶点颜色数组的副本,然后从颜色数组中选择对应的texcord是最高的。这种方法至少会为每个顶点增加9个浮点数。这会降低应用程序的速度,因为我的网格经常改变,并且显著增加内存占用。

是否有更好/更容易的方法来实现这一点?

[替换错误的原文]

这应该实际上工作…

//vert
out vec3 colour;
...
//geom
//simple passthrough but dupe colours to separate and include barycentric coord
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
in vec3 colour[];
flat out vec3 colours[3];
out vec3 coord;
...
for (int i = 0; i < 3; ++i)
    colours[i] = colour[i];
for (int i = 0; i < 3; ++i)
{
    coord = vec3(0.0);
    coord[i] = 1.0;
    gl_Position = gl_in[i].gl_Position;
    EmitVertex();
}
//frag
flat in vec3 colours[3]; //triangle's 3 vertex colours
in vec3 coord; //barycentric weights as a result of interp
...
//get index of biggest coord
int i = (coord.x > cood.y && coord.x > coord.z) ? 0 :
    ((coord.y > coord.z) ? 1 : 2);
//choose that colour
vec3 fragColour = colours[i];