- April 15, 2013 at 10:03 am #31237
I am a noob at the IMG forum and at OpenGL. I have started to design a simple interface for a Smartphone for my diploma thesis, using IMG’s SDK, and I try to implement picking for 2D objects using OpenGL ES 2.0. After spending sometime searching I decided (not sure if the right choice) to try color picking. I have 2 questions:
1) Can I assign different color to each object on the screen using the same shaders?
2) I am thinking to implement the picking in the RenderScene function calling 2 other draw functions; one with all texture etc turned off and one more which will have what I had ,before to try the picking, in the RenderScene function. Is that the right way to think or am I not even close?April 15, 2013 at 11:45 am #37114
if you are referring about glReadPixels ,reading pixel from BUFFER
Joe publish a good review the usage of this function,forum.imgtec.com/discussion/comment/7559/#Comment_7559
Tobias gave a very clear explanation as well !!
event if it is not advise for performance reason, i never been able to make it run.
glReadPixels(x, WH - y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, color);
glReadPixels(x, WH - y - 1, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
glReadPixels(x, WH - y - 1, 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_SHORT_4_4_4_4, &index);
I endup doing an Unprojecting and it work very well.
david gApril 15, 2013 at 11:58 am #37115
As David has pointed out, reading back from colour buffers that the GPU has rendered can be quite costly.
As a more efficient solution to this problem, you can create a bounding box for every object in your scene, and then do a simple intersection test where you fire a ray from the pixel that was clicked/touched and determine which object that ray intersects with first. This is actually quite straight forward to implement. We already provide functions in our SDK to generate bounding boxes. You can then search through the bounding boxes for all objects in your scene to find those that the clicked point interacts with on an X & Y plane, then search through these objects to find out which one is closest to your camera.
Hope this helps!