这是我制作的几何着色器,根据我的理解应该简单地将3个顶点传递给frag着色器?当我删除geom着色器并将值直接传递给frag着色器时,它会工作并显示我想要的内容。 我用三角形绘制地形,每个绘制调用通过6个顶点(2个三角形),也许这与它有关但是我无法弄清楚是什么
#version 330
layout(triangles) in;
layout(triangle_strip, max_vertices = 3)out;
in float gHeight;
in vec4 gSurfacePosition;
in float gTerrainHeight;
in vec2 gTexCoords[3];
in vec4 gNormal[3];
out float oTerrainHeight;
out float oHeight;
out vec4 oNormal;
out vec4 oSurfacePosition;
out vec2 oTexCoords;
void main()
{
oSurfacePosition=gSurfacePosition;
oHeight=gHeight;
oTerrainHeight=gTerrainHeight;
for(int i = 0; i < 3; i++)
{
gl_Position = gl_in[i].gl_Position;
oNormal = gNormal[i];
oTexCoords = gTexCoords[i];
EmitVertex();
}
}
答案 0 :(得分:1)
in float gHeight; in vec4 gSurfacePosition; in float gTerrainHeight;
这不应该编译。要么您没有正确检查错误,要么您的实施在报告错误方面非常松懈。
这不应该编译的原因是因为所有GS inputs must be arrayed。您在基元中获得一个输入值每个顶点。您的GS将triangles
作为输入,因此它将每个输入值作为3个值的数组。你为一些输入做了这个,但你没有为所有做这些。
oSurfacePosition=gSurfacePosition; oHeight=gHeight; oTerrainHeight=gTerrainHeight;
这并不是你认为它做的。每当您致电EmitVertex
时,value of all out
variables becomes undefined。因此,每次要发出新顶点时,必须再次设置out
个变量。即使您想要写相同的值,也必须每次都设置它。