Wednesday, August 8, 2012

Re: [android-developers] OpenGL and Camera Preview - blending together gets “over saturated” color

You should be able to make it work with OpenGL ES 1.0 by choosing another blending equation.


On Wed, Aug 8, 2012 at 4:44 AM, Tobias Reich <tobiasreich82@gmail.com> wrote:
Okay, I will try this but after all, it happens in OpenGL 1.0 as well and there is no chance to change the shader there.
What could I do there? And why did it work on older phones/android versions like the S1 and the S2 with Android 2.x?

Am Dienstag, 7. August 2012 09:08:57 UTC+2 schrieb Romain Guy (Google):
Hi,

You should output your colors with premultiplied alpha. Your code should look like this:

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


On Mon, Aug 6, 2012 at 4:21 PM, Tobias Reich <tobias...@gmail.com> wrote:
I'm working on a new Galaxy S3 and found a problem that didn't occur on other phones like my old Galaxy S1 or the Galaxy S2 - which has almost the same GPU as the S3.
When drawing my OpenGL models on top of my camera image like this:
mGLView = new GLSurfaceView(this); mGLView.setOnClickListener(InputManager.getInstance()); GameRenderer renderer = new GameRenderer(kamera, this); InputManager.getInstance().currentActivity = renderer; mGLView.setEGLContextClientVersion(2); mGLView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); setPreserveEGLContextOnPause mGLView.getHolder().setFormat(PixelFormat.TRANSLUCENT); mGLView.setZOrderOnTop(true); mGLView.setRenderer(renderer); setContentView(new CameraView(this), new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); addContentView(mGLView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

So the GLRenderer should be transparent. It actually is. It works fine for all the objects that are opaque as well as the background (where I see the image of the camera)

My problem is, when I make the pixels semi-transparent in the fragment Shader I get a weird result. The brightest pixels seem overexpose when "blending together". And it looks like they got clamped after so the value that brighter than white - loosing probably the first bit - got dark again. So only the brightest pixels are affected. It happens even if I use a simple call like:

gl_FragColor = vec4(clamp(textureColor.rgb * lightWeighting.xyz, 0.0, 1.0), 0.5);


So the actual GL-Fragment is clamped and I'm pretty sure it comes from the camera preview itself. Here is an image that describes my problem:  


I get more and more convinced that it is an "overflow" for the values but how can I change this? By the way - perhaps it helps - this effect gets stronger the lower the alpha value of the fragment (the gl rendered one) is. So somehow it looks like something is compensating/normalizing the "semi transparent" values.

Is there any way of "clamping" both values together since in the Shader I can only clamp the actual rendered fragment somehow without asking for the camera preview values. :-(

Thank you very much! I hope it is not a severe problem,

  Tobias Reich
 


--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-d...@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en



--
Romain Guy
Android framework engineer
roma...@android.com

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en



--
Romain Guy
Android framework engineer
romainguy@android.com

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment