OpenGL Problem

T

TobiasReich

Neues Mitglied
0
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

glProblem.jpg
 
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 :)
 
Kann ich den Thread verschieben oder soll ich ihn lieber nochmal dort neu schreiben? Danke trotzdem!
 
Scheibe einfach einem Admin, Moderator etc eine PN, mit der bitte diesen Thread dorthin zu verschieben :)
 
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
 
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
 

Ähnliche Themen

W
  • WuDiDong
Antworten
3
Aufrufe
827
jogimuc
J
S
Antworten
4
Aufrufe
1.110
Sempervivum
S
R
Antworten
3
Aufrufe
1.744
Ritartet
R
Zurück
Oben Unten