曲面细分着色器 - OpenGL

use*_*754 2 opengl tessellation

layout (vertices = 3) out;

void main(void)
{
    if (gl_InvocationID == 0)
    {
        gl_TessLevelInner[0] = 5.0;
        gl_TessLevelOuter[0] = 5.0;
        gl_TessLevelOuter[1] = 5.0;
        gl_TessLevelOuter[2] = 5.0;
    }
    gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
}
Run Code Online (Sandbox Code Playgroud)

摘录自:Haemel,Nicholas."OpenGL SuperBible:

我如何理解TessLevelInner和Outer以及为什么id 0列出了两次?

sse*_*ell 13

我该如何理解gl_TessLevelInnergl_TessLevelOuter

请参阅: gl_TessLevelInner,gl_TessLevelOuter,OpenGL的镶嵌-色阶

顾名思义,它们控制正在处理的图元的内部和外部曲面细分因子级别.下面是一个图像,说明了各种内/外水平设置的结果.

在此输入图像描述 资料来源:http://antongerdelan.net/opengl/tessellation.html


为什么索引0使用了两次?

它被使用两次,因为它访问两个不同的对象.索引的第一个用途0

gl_TessLevelInner[0]
Run Code Online (Sandbox Code Playgroud)

第二是

gl_TessLevelOuter[0]
Run Code Online (Sandbox Code Playgroud)