Отбрасывание случайных фрагментов на фрагментном шейдере без использования равномерных переменных - PullRequest
0 голосов
/ 25 июня 2019

У меня очень большой набор точек (~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);

}

enter image description here

Естественно, нарисовано 300k линий, и результат слишкоммне трудно понять, правильны они или нет.Есть ли способ, которым я мог бы случайно отбросить некоторые из них?Есть один вызов draw, который выполняет рисование, поэтому я не могу придумать, как использовать одинаковые переменные, чтобы выбрать, какие из них будут нарисованы.Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...