目前我正在学习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);
}
Run Code Online (Sandbox Code Playgroud)
以下是三角形曲面细分的示例代码:
#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);
}
Run Code Online (Sandbox Code Playgroud)
gl_TessCoord 与所有原始拓扑表示相同的概念.
这个向量是当前基元中的位置,最好不要将它视为x,y和z.由于它相对于表面,u(v和w可选)更直观.你可以调用任何你想要的坐标(例如xyz,rgb,stp或uvw),你要知道,不过uvw是规范的符号.
OpenGL 4.5(核心配置文件) - 11.2.2 Tessellation Primitive Generation - p.392
由基元生成器生成的每个顶点在标准化参数空间中具有关联的(u,v,w)或(u,v)位置,参数值在[0,1]范围内,如图11.1所示.
对于三角形,顶点位置是重心坐标(u,v,w),其中u + v + w = 1,并指示三角形的三个顶点对顶点位置的相对影响.
对于四边形和等值线,位置是(u,v)坐标,指示顶点相对于细分矩形的相对水平和垂直位置
在四边形的情况下,每个分量测量距单位正方形的两个边缘的距离.在三角形的情况下,它是距三角形的三个边缘(重心坐标)的距离.这就是为什么你的四边形例如镶嵌着色只使用u和v,而三角形的例子使用u,v和w.

| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |