OpenGL Tessellation着色器不绘图

时间:2015-10-09 00:17:12

标签: c opengl glsl

我正在尝试镶嵌一个球体,但是当我应用曲面细分着色器时,屏幕上没有显示任何内容。在阅读了相关的相关文献并在这里提出一些问题后,我仍然无法弄清楚出了什么问题。链接或加载着色器时没有错误,所以我有点不知所措。

着色器和绘图代码如下。 感谢。

顶点

#version 410

in vec4 vPosition;
out vec3 Position;

void main()
{
    Position = vPosition.xyz;
}

控制

#version 410
layout(vertices = 3) out;

in vec3 Position[];
out vec3 tcPosition[];

#define ID gl_InvocationID

void main()
{
    tcPosition[ID] = Position[ID];
    if(ID == 0) {
        gl_TessLevelInner[0] = 3.0;
        gl_TessLevelOuter[0] = 2.0;
        gl_TessLevelOuter[1] = 2.0;
        gl_TessLevelOuter[2] = 2.0;
    }
}

评价

#version 410
layout(triangles, equal_spacing, ccw) in;

in vec3 tcPosition[];
out vec3 tePosition;

uniform mat4 projection;
uniform mat4 Modelview;

void main()
{
    vec3 p0 = gl_TessCoord.x * tcPosition[0];
    vec3 p1 = gl_TessCoord.y * tcPosition[1];
    vec3 p2 = gl_TessCoord.z * tcPosition[2];
    vec3 tePosition = p0 + p1 + p2;
    gl_Position = vec4(tePosition, 1.0);
}

片段

#version 410

out vec4 FragColor;

void main()
{
    FragColor = vec4(1.0, 1.0, 0.0, 1.0);
}

绘制代码

glPatchParameteri(GL_PATCH_VERTICES, 3);
glDrawArrays( GL_PATCHES, 0, sphere.vertexNumber );

0 个答案:

没有答案