0

Ich möchte die Transparenz eines mit glDrawArrays gezeichneten Objekts ändern (GL_TRIANGLE_STRIP, 0, 4);Transparenz für Dreieckstrip Objektöff nungen 2.0

ich die Mischung Option verwendet haben, wie

glEnable(GL_BLEND); 
    //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glBlendFunc(GL_SRC_ALPHA, GL_SRC_ALPHA_SATURATE); 

(ich mit diesen Optionen ausprobiert haben: GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA_SATURATE) Insgesamt ich die Farbe bin immer verändert, wenn ich ändern der Alpha-Wert, aber nicht transparent oder halbtransparent. Auf Alpha = 255, helle Farbe erhalten, wenn Alpha = 1 eine schwarze Farbe erhält, aber nicht transparent. Wenn ich Alpha = 0 mache, bekomme ich eine komplette Transparenz. Gibt es eine Möglichkeit, halbtransparent zu sein? (Wenn ich Alpha gebe zwischen 1 bis 255, sagen wir 100, bekomme ich eine helle Schattenfarbe, aber Hintergrundobjekt ist immer noch nicht sichtbar. Mittel, Transparenz ist nicht verfügbar) Wird jemand helfen?

Hier ist meine Plotten APIs verwendet:

glUniformMatrix4fv(i32Location, 1, GL_FALSE, afIdentity); 
    glEnableVertexAttribArray(VERTEX_ARRAY); 
    glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

Antwort

0

Für den Standard „über“ Operator Mischen Sie verwenden möchten: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); Der Alpha-Wert des gezeichneten Objekts bestimmt dann, wie viel von den Vordergrund zu sehen ist, dh das Ergebnis der Mischoperation ist:

result = new_value * alpha * existing_value + (1-alpha)

Wenn Sie das transparente Objekt vor dem Hintergrundobjekt zeichnen, müssen Sie den Tiefentest ändern, um Objekte hinter dem transparenten Objekt zu sehen. Sie können dies tun, indem Sie den Tiefentest (glDisable(GL_DEPTH_TEST);) deaktivieren, wenn Sie für das transparente Objekt keinen Tiefentest benötigen, oder indem Sie Tiefenschreibvorgänge deaktivieren (glDepthMask(GL_FALSE);), wenn Sie Tiefentests für das transparente Objekt durchführen möchten, aber Objekte nicht verdecken möchten dahinter.