2017-06-21 8 views
0

Ich arbeite an OpenGL3.3 +, und meine Frage ist: ist es möglich, Farbe zu einer Pointcloud hinzuzufügen. Tatsächlich lade ich eine pointCloud aus einer Datei in einem Array (mit VAO und VBO, um dieses Array anzuzeigen), und ich habe Farben für diese Punkte in einem anderen Array. In opengl < 3 Ich würde die Funktion glColor3f vor dem Rendern jedes Punkte verwenden, aber in OpenGL3 gibt es eine Möglichkeit, es zu tun? (Vielleicht Shader verwenden?)Farbe der Punkte ändern openGL3.3

Also, einfach zu sein:
ich eine Datei laden, in denen ich finden kann (x, y, z) die Positionen der Punkte in Punktwolke, und (r, g, b) die Farbe zugeordnet. Und ich möchte den Punkt mit der zugehörigen Farbe zeichnen. Ist das ein Weg, das zu erreichen?

Danke! EDIT: hier ist meine eigentliche Code zu machen:

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_ ein Array von GLfloat ist, die Punkte enthält, und ich habe bufferColor_, die die Farbe zugeordnet Punkte in der guten Ordnung enthält).

Antwort

1

Ja, um die Farbe für jeden Scheitelpunkt zuzuordnen, müssen Sie Shader verwenden.

Sie können these Tutorials auf OpenGL betrachten. Sie geben Ihnen ein Wissen über das moderne OpenGL. Insbesondere zeigt this Teil, wie Sie tun, was Sie wollen.

+0

Oh! Ja, sicher! ... Ich bin kein kluger Mann, ich muss nur Daten mit Layout senden ... Danke –