Picking

This topic contains 3 replies, has 3 voices, and was last updated by  geo 4 years, 6 months ago.

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #31237

    geo
    Member

    Hello,

    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?

    #37114

    dgu
    Member

    Hello

    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 !!

    http://forum.imgtec.com/discussion/comment/6134/#Comment_6134

    event if it is not advise for performance reason, i never been able to make it run.

    GLbyte color[4];
    GLfloat depth;
    GLuint index;

    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.

    regards
    david g

    #37115

    Joe Davis
    Member

    Hi Geo,

    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!

    Joe

    #37116

    geo
    Member

    thank you both very much for your immediate response. I will follow your suggestion and i will contact you again in case i find any trouble.

    Kind regards

    Giorgos

Viewing 4 posts - 1 through 4 (of 4 total)
You must be logged in to reply to this topic.