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

时间:2014-08-21 19:26:14

标签: opengl glsl

我想要达到的效果是具有清晰轮廓的顶点颜色。因此,在三角形内部,片段着色器应使用最接近该片段的任何顶点的颜色。

现在在考虑它时,我能想出的唯一解决方案是将tex coords 1,0,0 0,1,0和0,0,1分配给三个顶点,并且有两个(重新排序的)副本。顶点颜色数组,然后从相应的tex坐标最高的颜色aray中选择。此方法至少会为每个顶点添加9个浮点数。这将减慢应用程序的速度,因为我的网格经常变化退出并显着增加内存占用。

是否有更好/更简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

[替换了错误的原始]

这应该实际上工作......

//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];