Hi Robert,

This is exactly what I wanted to avoid! lol! =)
I don't have this math skills and as it is a simple game, I chose the
color-picking techinique.

Do you have any idea why the colored objects are being displayed?
I always draw the textured objects at the end of the onDrawFrame function.
Does it always swap buffers after this function or am I triggering something
wrong before the end?

Thanks,



Thiago


On Thu, Sep 2, 2010 at 21:21, Robert Green <rbgrn....@gmail.com> wrote:

> Thiago,
>
> I'm going to answer by providing a totally different way to do your
> picking.  If you separate the object models and the rendering into two
> different things, you can have it so that when it's time to pick, you
> get a ray into your world using glUnProject (assuming you have your
> own view transform matrix that you use) and run intersection tests of
> that ray against your models.  I recommend doing a simple ray-sphere
> intersection test to see if the ray was in the area of the object and
> then test against the faces of the object itself or a convex hull
> surrounding it to get a more accurate idea.  This, done optimally,
> will most likely outperform your current solution as it doesn't
> introduce a complete pipeline stall with 2 pass rendering
> (glReadPixels, clear, draw again)...
>
> If you're interested in doing it, just refer to 3D game math books for
> the matrix math involved and google around for a ray-sphere test to
> get started.  Once you've got that working, there are algorithms for
> producing the hull around the object or if you're ok with bounding
> boxes, they tend to work alright and are easily constructed.
>
> On Sep 2, 2:50 pm, Thiago Lopes Rosa <thiago.r...@gmail.com> wrote:
> > Hi,
> >
> > I have a 3D game and I am using color-picking to know which object was
> > selected.
> >
> > When the user touches the screen, I draw each object with a different
> color.
> > Then I read the color where the user touched the screen to know which
> object
> > was selected. After that I draw each object with their respective
> > textures/colors. (everything done during one onDrawFrame pass)
> >
> > The problem is that sometimes the colored objects appear on the screen
> (~5%
> > of the times the user touches the screen) and it is even worse on slower
> > hardwares.
> >
> > This is my pseudo code:
> >
> > public void onDrawFrame(GL10 gl) {
> > if (user touched the screen) {
> >  gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
> >  gl.glMatrixMode(GL10.GL_MODELVIEW);
> >
> > // DRAW COLORED OBJECTS
> >
> > gl.glReadPixels(x, y, ......);
> >  // CHECK WHICH OBJECT WAS SELECTED
> >  gl.glColor4x(0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF);
> >  }
> >
> >  gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
> >  gl.glMatrixMode(GL10.GL_MODELVIEW);
> >
> >  // DRAW TEXTURED OBJECTS
> >
> > }
> >
> > As far as I understand, we always draw on the Back Buffer and only after
> we
> > finish, it swaps to the Front Buffer and updates the screen.
> > Is there anything wrong with the above code?
> >
> > Thanks!
> >
> > Thiago
>
> --
> 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+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
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+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to