在不使用统一变量的情况下,丢弃片段着色器上的随机片段

时间:2019-06-25 09:15:01

标签: opengl glsl

我从~300krgb图像派生了非常多的点(depth),并且为了获得几何信息,我为每个图像计算了法线向量这些点。但是,在确定法向矢量正确之前,我无法进行任何进一步的计算,因此我决定用一行显示每个矢量:

glm::vec3 lvec = point + normal;
normals[index + 0] = point.x;
normals[index + 1] = point.y;
normals[index + 2] = point.z;
normals[index + 3] = lvec.x;
normals[index + 4] = lvec.y;
normals[index + 5] = lvec.z;

此处point是包含每个点坐标的向量,而normal是其法线向量。我将行的两端连续存储在数组中,并在缓冲后使用GL_LINES绘制数据。

glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, height * width * 6 * sizeof(GLfloat),
    normals, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);

绘图功能:

glDisable(GL_PROGRAM_POINT_SIZE);
glLineWidth(3.0);

//binding shader program and setting uniform variables
glUseProgram(shader);
glUniformMatrix4fv(modelLocation, 1, GL_FALSE, &model[0][0]);
glUniformMatrix4fv(viewLocation, 1, GL_FALSE, &view[0][0]);
glUniformMatrix4fv(projectionLocation, 1, GL_FALSE, &projection[0][0]);

//binding vertex array object and drawing
glBindVertexArray(VAO);
glDrawArrays(GL_LINES, 0, width * height * 2);

顶点着色器:

#version 330 core

layout(location = 0) in vec3 position;

uniform mat4 model, view, projection;

void main() {

    gl_Position = projection * view * model * vec4(position, 1.0);

}

片段着色器:

#version 330 core

out vec4 colour;

void main() {

    colour = vec4(1.0, 0.0, 0.0, 1.0);

}

enter image description here

自然地,绘制了300k条线,结果太密集了,我无法理解它们是否正确。有什么办法可以我随机丢弃其中一些吗?只有一个绘制调用可以绘制图形,所以我想不出任何使用统一变量来选择绘制哪个变量的方法。 预先感谢。

0 个答案:

没有答案