首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gl_TessCoord是如何在镶嵌期间计算出来的?

gl_TessCoord是如何在镶嵌期间计算出来的?
EN

Stack Overflow用户
提问于 2015-03-09 15:57:18
回答 1查看 2.1K关注 0票数 3

目前我正在学习OpenGL的镶嵌着色器。但是当涉及到在镶嵌评价着色器中内置的变量"gl_TessCoord“时,我无法理解它是如何计算的。

我知道,当使用不同的镶嵌模式(四角或三角形)时,"gl_TessCoord“是不同的。我检查了蓝皮书和红皮书,但是他们只给出了一个粗略的解释,说明它代表了输入顶点的权重。有什么想法吗?

下面是矩形结构的示例代码:

代码语言:javascript
复制
#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);
}

下面是三角形镶嵌的示例代码:

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 18:09:12

gl_TessCoord对所有原始拓扑都表示相同的概念。

这个向量是当前原语中的位置,最好不要把它看作是xyz。由于它是相对于曲面的,所以uvw (可选)更直观。您可以任意调用坐标(例如xyzrgbstpuvw),但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)坐标,表示顶点相对于细分矩形的相对水平和垂直位置。

在四边形的情况下,每个分量测量单位正方形的两个边的距离。在三角形的情况下,它是从三角形的三个边(重心坐标)的距离。这就是为什么您的四边形镶嵌着色器只使用uv,而三角形示例则使用uvw

为了更好地说明这一点,请考虑以下图表:

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28946396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档