0

我目前正在尝试使用几何着色器。

我的输入是一组点,应该为其创建多个三角形

这是几何着色器

#version 330
layout(points) in;
layout(triangle_strip, max_vertices = 3) out;

in vec3[] vPos;
out vec3 oPos;

void main() {
    for(int i = -1; i <= 1; i++)
        for(int j = -1; j <= 1; j++)
        {
            for(int k = -1; k <= 1; k++)
            {
                oPos = vPos[0] + vec3(i,j,k);
                EmitVertex();
            }
        EndPrimitive();
        }

}

这是相应的 C++ 代码

mMeshGenerator->use();

GLuint query;
glGenQueries(1, &query);
glEnable(GL_RASTERIZER_DISCARD);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, mMeshVBO->buffer());
glBeginQuery(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, query);
    glBeginTransformFeedback(GL_TRIANGLES);
        mPointsVAO->draw();
    glEndTransformFeedback();
glEndQuery(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
glFlush();
GLuint primitives;
glGetQueryObjectuiv(query, GL_QUERY_RESULT, &primitives);

std::cout << "-----" << primitives << "-----" << std::endl;
GLfloat feedback[primitives*3*3];
glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, sizeof(feedback), feedback);

for (int i = 0; i < primitives*3*3; i++) {
    printf("%f\n", feedback[i]);
}
glDisable(GL_RASTERIZER_DISCARD);

根据查询,只写了一个原语。

输入点 (10,20,30) 的输出:

-----1-----
9.000000
19.000000
29.000000
9.000000
19.000000
30.000000
9.000000
19.000000
31.000000

我的代码有什么问题,只有 1 个三角形而不是 27 个?

4

1 回答 1

2
layout(triangle_strip, max_vertices = 3) out;

这意味着只允许发射 3 个顶点(又名 1 个三角形);其余的都被丢弃

于 2014-08-06T11:56:04.270 回答