所以我可以使用曲面细分着色器绘制曲线,但是出来的线条非常细且呈锯齿状(锯齿状)。我很困惑如何处理这些新点(等值线),从 tessellation eval shader 到 fragment shader 并使其更厚和锯齿。
我知道它们有多种方法,例如使用几何着色器甚至顶点着色器来计算相邻顶点并创建折线。但是我的目标不是创建折线,而是创建恒定的厚度和抗锯齿的线条(边缘)。我认为片段着色器就足够了。
请告知实现这一目标的最佳和最快方法是什么,以及如何将“等值线”数据从曲面细分着色器传递到片段着色器并对其进行操作。任何显示数据从 TES 传输到 FS 的小代码都会非常有帮助。请原谅我,因为我是初学者,所以我上面的许多假设可能是不正确的。
顶点着色器:这是一个简单的通过着色器,所以我不在这里添加。
镶嵌评估着色器:
#version 450
layout( isolines ) in;
uniform mat4 MVP;
void main()
{
vec3 p0 = gl_in[0].gl_Position.xyz;
vec3 p1 = gl_in[1].gl_Position.xyz;
vec3 p2 = gl_in[2].gl_Position.xyz;
float t = gl_TessCoord.x;
float one_minus_t = (1.0 - t);
float one_minus_t_square = one_minus_t * one_minus_t;
float t_square = t * t;
float two_times_one_minus_t = 2 * one_minus_t;
// Bezier interpolation
vec3 p = one_minus_t_square * p0 + two_times_one_minus_t*t*p1 + t_square * p2;
gl_Position = vec4(p, 1.0);
}
Fragment Shader : 为 gl_FragColor 分配统一颜色的基本着色器
输出:
答案 0 :(得分:1)
如果你想画一条粗的平滑线,你有3个选择:
绘制一个具有许多顶点的高度细分的多边形。
在整个视口上绘制一个四边形并丢弃任何不在该线上的片段(在片段着色器中)。
混合选项 1 和 2。绘制一个比线大并包围线的粗糙多边形。丢弃边缘和角落的片段以平滑线条(在片段着色器中)。