2017-02-01 1 views
1

Ich habe eine sehr einfache 2D-Sternform, die ich in rot malen möchte. Ich habe 2 VBOs für sie und einen VAO erstellt. Ein VBO ist für die Scheitelpunkte des Sterns und einer für die Farbwerte, die ich an den Shader übergeben möchte.OpenGL - bekommen eine seltsame Ergebnisse mit einem Fragment-Shader

Hier ist, wie ich die Farbdaten erstellt: (lassen Sie uns sagen, dass ich in rot interessiert bin)

struct CArray { 
    static const GLuint numColor = 1; 
    glm::vec4 color[numColor]; 
    CArray() { 
     color[0] = glm::vec4(1.0f, 0.0f, 0.0f, 1.0f); 
    } 
}; 

CArray starColor; 

Das ist mein Puffer Bindungsprozess ist:

glEnableVertexAttribArray(12); 
    glGenBuffers(1, &g_bufferObject3); 
    glBindBuffer(GL_ARRAY_BUFFER, g_bufferObject3); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec4), starColor.color, GL_STATIC_DRAW); 
    glVertexAttribPointer(12, 4, GL_FLOAT, GL_FALSE, 0, 0); 

Das ist mein Vertex-Shader:

layout (location=0) in vec4 position; 
layout(location=12) in vec4 color; 

out vec4 colorVertFrag; 

uniform mat4 ModelViewMatrix; 
uniform mat4 ProjectionMatrix; 

void main() { 
    gl_Position = ProjectionMatrix * ModelViewMatrix * position; 
    colorVertFrag = color; 
} 

Das ist mein Fragment-Shader:

in vec4 colorVertFrag; 
out vec4 color; 

void main() { 
    color = colorVertFrag; 
} 

Und hier ist das Ergebnis i erhalten: (die Punkte ignorieren, dass der Stern Augen bilden, Nase und lächeln, sind sie eigentlich schwarz sein)

enter image description here

Wie Sie sehen können, statt Um eine solide rote Farbe zu bekommen, bekomme ich einen seltsamen schwarz-roten Farbverlauf. Wenn ich die folgende Zeile in meinem Vertex-Shader setzen:

colorVertFrag = vec4(1.0, 0.0, 0.0, 1.0); 

Der Star kommt perfekt rot aus.

Was könnte das Problem sein? Danke!

+0

hahaha, das ist ein Lächeln! :-P –

+0

Ich bin immer noch ziemlich neu zu OpenGL: D – gambit20088

+0

Sollte nicht Ihre Farbe VBO eine Farbe für jeden Eckpunkt enthalten? –

Antwort

2

die Linie

glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec4), starColor.color, GL_STATIC_DRAW); 

sollte

glBufferData(GL_ARRAY_BUFFER, numberOfElements * sizeof(glm::vec4), starColor.color, GL_STATIC_DRAW); 

, wo numberOfElements soll Anzahl der Ecken sein, Sie haben. Sie müssen 1 Farbe pro Vertex senden.

+0

Ja, das hat es gelöst. Bitte sehen Sie auch, was ich zu Tulon kommentiert habe. – gambit20088

Verwandte Themen