# How to tell what part of a 3D cube was touched

I am writing a rather simple android game and I am implementing Open GL to draw a 3D cube that spins upon the X, Y and Z axis and I need to know where the user has clicked on the texture of the cube.

The texture is a simple square bitmap (100x100) that has a smaller square in the center. I need to know if the user touches the inner square. As well was tell which face of the cube the user touches. Does anyone know how this can be accomplished if not can anyone give some pseudo code on how to tell where the ray correlates to the texture? Or at least point me in the right direction.

The textures of each face are like this:

The whole cube looks like this: https://docs.google.com/file/d/0BzmLnD4ub-ohaU9CM21WWC1GRW8/edit?usp=sharing

The code I am using is from: http://www3.ntu.edu.sg/home/ehchua/programming/android/Android_3D.html2.9 It is a port to android from Lesson 6 NeHe. Example 6a: Photo-Cube

• Once you know which object was touched, you can iterate through its triangles doing a triangle/ray intersection test to see which face was touched. There's some code for that here. – MichaelHouse Jul 2 '13 at 18:20
• It is only a rotating cube. But how could I tell if it hits the square in the center? – Clayton Jul 2 '13 at 18:31
• To use @Byte56 example, subdivide the cube into smaller triangles. Then keep track of outside versus internal faces in a map to quickly determine from "which triangle face was touched" whether it was inside or outside the area you need. Alternately, add a smaller rectangle at each side of the cube where the red is; if it sticks out just a bit then it will get the intersection before the big cube behind, on each face. – Patrick Hughes Jul 2 '13 at 18:57

If your hit test is really that simple, then instead of doing more complicated triangle intersection as Byte56 suggests you could do simple AABB-ray intersection test. The intersection test will tell you the point that was hit. This point in model space will lie on one of the faces (so one of X, Y, or Z will be +/-h, where h is the half-width of your cube). Assuming that the red square is one third the size of the cube itself, that means that the other two coordinates must both fall within [-h/3,+h/3] in order for the hit to have been the red area.