发射顶点提供"error C1067: too little data in type constructor"



我正在使用几何着色器从GL_POINTS生成立方体

#version 150 core
layout(points) in;
layout(triangle_strip, max_vertices = 18) out;
in vec3 g_col[];
out vec3 f_col;
uniform mat4 transform;
void main()
{
f_col = g_col[0];
float s = gl_in[0].gl_PointSize * 0.5;
vec4 c = gl_in[0].gl_Position;
// Bottom
gl_Position = transform * (c + vec4 (-s, -s, -s, 0));
EmitVertex();
gl_Position = transform * (c + vec4 (+s, -s, -s, 0));
EmitVertex();
gl_Position = transform * (c + vec4 (-s, +s, -s, 0));
EmitVertex();
gl_Position = transform * (c + vec4 (+s, +s, -s, 0));
EmitVertex();
// Far
gl_Position = transform * (c + vec4 (-s, +s, +s, 0));
EmitVertex();
gl_Position = transform * (c + vec4 (+s, +s, +s, 0));
EmitVertex();
// Top
gl_Position = transform * (c + vec4 (-s, -s, +s, 0));
EmitVertex();
gl_Position = transform * (c + vec4 (+s, -s, +s, 0));
EmitVertex();
// Near
gl_Position = transform * (c + vec4 (-s, -s, -s, 0));
EmitVertex();
gl_Position = transform * (c + vec4 (+s, -s, -s, 0));
EmitVertex();
EndPrimitive();
// Left
gl_Position = transform * (c + vec4 (-s, -s, -s));
EmitVertex ();
gl_Position = transform * (c + vec4 (-s, +s, -s));
EmitVertex ();
gl_Position = transform * (c + vec4 (-s, -s, +s));
EmitVertex ();
gl_Position = transform * (c + vec4 (-s, +s, +s));
EmitVertex ();
EndPrimitive ();
}

如果我在第一个EndPrimitive之后(// Left注释之前(删除代码,这将正确地在立方体周围绘制一条条带,使两侧没有上限。

如果我尝试绘制一个新的三角形条来盖住边,则对于四个后续EmitVertex调用中的每一个,我都会收到此错误:

error C1067: too little data in type constructor

根据此文档

GS 定义了这些顶点输出表示的基元类型。GS 还可以通过调用 EndPrimitive(( 函数来结束一个基元并启动一个新基元。这不会发出顶点。

为了从 GS 写入两个独立的三角形,您必须使用 EmitVertex(( 为前三个顶点编写三个单独的顶点,然后调用 EndPrimitive(( 结束条带并开始一个新的顶点。然后你用 EmitVertex(( 再写三个顶点。

我做错了什么?

在工作部分:

gl_Position = transform * (c + vec4 (+s, -s, -s, 0));

在非工作部分:

gl_Position = transform * (c + vec4 (-s, -s, -s));

vec4构造函数需要四个组件,正如错误消息告诉您的那样。

相关内容

  • 没有找到相关文章

最新更新