1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

OpenGL Problem

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von TobiasReich, 06.08.2012.

  1. TobiasReich, 06.08.2012 #1
    TobiasReich

    TobiasReich Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    06.08.2012
    Hallo zusammen,
    ich habe mir gerade heute mein neues S3 gekauft.
    Da ich für Android programmiere und gerade an einer Augmented Reality App arbeite, ist mir ein Fehler aufgefallen, der mir neu ist.
    Zuvor habe ich (mit dem selben Code) an meinem S1 gearbeitet und diese Fehler nicht gehabt.
    Das Problem ist einfach:
    Ich habe ein Kamerabild und darüber eine OpenGL Szene. Wenn ich dort transparente Pixel habe, sollten diese eigentlich sich mit dem Hintergrundbild er Kamera mischen.
    Hier tritt aber jetzt bei dem S3 auf einmal ein Fehler auf. Die hellsten, transparenten Pixel (also nur die, die auch durchscheinen) werden "solarisiert". So ähnlich wie das negative Multiplizieren in Photoshop.
    Dieser Fehler sollte wohl nicht an dem Fragment-Shader liegen. Immerhin clampe ich hier die Farbwerte (auch wenn das vorher nie nötig war).
    Code:
    gl_FragColor = vec4(clamp(textureColor.rgb * lightWeighting.xyz,  0.0, 1.0), 0.5);
    Hat diesen Effekt irgendwer schon mal beobachtet? Zumal die GPU ja die selbe wie im S2 ist und da klappt es. Sind das ggf. irgendwelche der neuen Settings, die ich übersehen habe? Sowas wie den AutoTone (der ist es wohl nicht).
    Ich hoffe, irgendwer von euch hat dieses Problem schon einmal beobachtet.
    Ich danke euch,
    Tobias

    [​IMG]
     
  2. Flamey, 06.08.2012 #2
    Flamey

    Flamey Android-Lexikon

    Beiträge:
    1,211
    Erhaltene Danke:
    245
    Registriert seit:
    23.03.2011
    Phone:
    Samsung Galaxy S3
    Vielleicht wendest du dich an dieses Unterforum:

    Android App Entwicklung auf Android-Hilfe.de

    Deine Frage ist sehr speziell die hier wahrscheinlich keiner so einfach beantworten kann. Ich hoffe du findest noch eine Lösung :)
     
  3. TobiasReich, 06.08.2012 #3
    TobiasReich

    TobiasReich Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    06.08.2012
    Kann ich den Thread verschieben oder soll ich ihn lieber nochmal dort neu schreiben? Danke trotzdem!
     
  4. Flamey, 06.08.2012 #4
    Flamey

    Flamey Android-Lexikon

    Beiträge:
    1,211
    Erhaltene Danke:
    245
    Registriert seit:
    23.03.2011
    Phone:
    Samsung Galaxy S3
    Scheibe einfach einem Admin, Moderator etc eine PN, mit der bitte diesen Thread dorthin zu verschieben :)
     
  5. TobiasReich, 07.08.2012 #5
    TobiasReich

    TobiasReich Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    06.08.2012
    Okay, scheint, als wenn dieses Problem ohnehin nicht bei jedem vorkommen würde. Vielleicht kann mir jemand, der ein eigenes Galaxy S3 hat helfen.
    Ich habe ein kleines Testprogramm geschrieben, was den Fehler reproduziert.
    Wenn jemand Lust hat, mir zu helfen, könnt ihr euch den Code hier herunterladen. Vielleicht findet ihr ja meinen Denkfehler:

    https://dl.dropbox.com/u/13527005/CameraGLTest.zip

    Oder wenn ihr mir helfen wollt aber keine Programmierer seid, dann könnt ihr euch die APK installieren und mir mittelnen, ob es bei euch auch Probleme gibt:

    https://dl.dropbox.com/u/13527005/CameraGLTest.apk

    Jede Hilfe ist wichtig. Selbst wenn ich erfahre, dass mein Telefon einen Defekt haben sollte. Also lasst es mich wissen, selbst wenn es bei euch klappt!

    Vielen Dank,
    Tobias
     
  6. TobiasReich, 08.08.2012 #6
    TobiasReich

    TobiasReich Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    06.08.2012
    Ah, alles klar, ich habe die Lösung.
    Das Problem ist die Premultiplikation mit dem Alpha Wert.
    Am Einfachsten also ginge es schon damit:

    vec3 color = clamp(textureColor.rgb * lightWeighting.xyz, 0.0, 1.0);
    color *= 0.5; // premultiply by alpha
    gl_FragColor = vec4(color, 0.5);

    Auch wenn ich immernoch keine Ahnung habe, weshalb es auf älteren Geräten perfekt funktioniert hat oder weshalb ich das selbe Problem bei Gl1.0 auch habe, wo ich meinen Shader nicht selber schreiben kann.
    Trotzdem, für alle, die ähnliche Probleme haben ist das vielleicht die Lösung!
    Danke an euch alle!
    Tobias
     

Diese Seite empfehlen