У меня очень большой набор точек (~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
линий, и результат слишкоммне трудно понять, правильны они или нет.Есть ли способ, которым я мог бы случайно отбросить некоторые из них?Есть один вызов draw, который выполняет рисование, поэтому я не могу придумать, как использовать одинаковые переменные, чтобы выбрать, какие из них будут нарисованы.Заранее спасибо.