我从~300k
和rgb
图像派生了非常多的点(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);
}
自然地,绘制了300k
条线,结果太密集了,我无法理解它们是否正确。有什么办法可以我随机丢弃其中一些吗?只有一个绘制调用可以绘制图形,所以我想不出任何使用统一变量来选择绘制哪个变量的方法。
预先感谢。