改变点的颜色openGL3.3

时间:2017-06-21 08:23:48

标签: c++ opengl point-clouds

我正在研究opengl3.3 +,我的问题是:是否可以为pointcloud添加颜色。 实际上,我正在从一个数组中加载一个pointCloud(用VAO和VBO来显示该数组),并且我在另一个数组中有这些点的颜色。 在opengl< 3我会在渲染每个点之前使用函数glColor3f,但在OpenGL3中有没有办法做到这一点? (也许使用着色器?)

所以,简单来说:
我加载一个文件,在其中我可以找到(x,y,z)pointcloud中点的位置,以及(r,g,b)相关的颜色。我想用相关的颜色来说明这一点。这是实现这一目标的方法吗?

谢谢! 编辑:这是我要呈现的实际代码:

void setupPointCloud() {
    glGenVertexArrays(1, &this->VAO);
    glGenBuffers(1, &this->VBO);
    glBindVertexArray(this->VAO);
    glBindBuffer(GL_ARRAY_BUFFER, this->VBO);

    glBufferData(GL_ARRAY_BUFFER, this->bufferXYZ_.size() * sizeof(GLfloat), &this->bufferXYZ_[0], GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat), (GLvoid*)0);
}

void draw() {
    glBindVertexArray(this->VAO);

    glBindBuffer(GL_ARRAY_BUFFER, this->VBO);
    glEnable(GL_PROGRAM_POINT_SIZE);

    //std::cout << bufferXYZ_.size();
    glDrawArrays(GL_POINTS, 0, m_Total);

    glBindVertexArray(0);
    glBindTexture(GL_TEXTURE_2D, 0);
}

(bufferXYZ_是一个包含点的GLfloat数组,我的bufferColor_包含良好顺序中的颜色关联点)。

1 个答案:

答案 0 :(得分:2)

是的,为了关联每个顶点的颜色,您需要使用着色器。

您可以查看有关OpenGL的these教程。他们将为您提供有关现代OpenGL的知识。特别是,this部分向您展示了如何做您想做的事。