目前我正在学习OpenGL的镶嵌着色器。但是当涉及到在镶嵌评价着色器中内置的变量"gl_TessCoord“时,我无法理解它是如何计算的。
我知道,当使用不同的镶嵌模式(四角或三角形)时,"gl_TessCoord“是不同的。我检查了蓝皮书和红皮书,但是他们只给出了一个粗略的解释,说明它代表了输入顶点的权重。有什么想法吗?
下面是矩形结构的示例代码:
#version 430 core
layout ( quads) in;
void main( void)
{
// Interpolate along bottom edge using x component of the
// tessellation coordinate
vec4 p1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);
// Interpolate along top edge using x component of the
// tessellation coordinate
vec4 p2 = mix(gl_in[2].gl_Position, gl_in[3].gl_Position, gl_TessCoord.x);
// Now interpolate those two results using the y component
// of tessellation coordinate
gl_Position = mix(p1, p2, gl_TessCoord.y);
}下面是三角形镶嵌的示例代码:
#version 430 core
layout ( triangles) in;
void main( void)
{
gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +
(gl_TessCoord.y * gl_in[1].gl_Position) +
(gl_TessCoord.z * gl_in[2].gl_Position);
}发布于 2015-03-09 18:09:12
gl_TessCoord对所有原始拓扑都表示相同的概念。
这个向量是当前原语中的位置,最好不要把它看作是x、y和z。由于它是相对于曲面的,所以u、v和w (可选)更直观。您可以任意调用坐标(例如xyz、rgb、stp或uvw),但uvw是规范符号。
OpenGL 4.5 (核心剖面)-11.2.2标记原始世代-第392页 原语生成器产生的每个顶点在规范化参数空间中具有相关联的(u,v,w)或(u,v)位置,参数值在0,1范围内,如图11.1所示。 对于三角形,顶点位置为重心坐标(u,v,w),其中u+v+w= 1,表示三角形的三个顶点对顶点位置的相对影响。 对于四边形和等值线,位置是(u,v)坐标,表示顶点相对于细分矩形的相对水平和垂直位置。
在四边形的情况下,每个分量测量单位正方形的两个边的距离。在三角形的情况下,它是从三角形的三个边(重心坐标)的距离。这就是为什么您的四边形镶嵌着色器只使用u和v,而三角形示例则使用u、v和w。
为了更好地说明这一点,请考虑以下图表:

https://stackoverflow.com/questions/28946396
复制相似问题