• Create Account

## help calculating this

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

8 replies to this topic

### #1john_lin  Members

103
Like
0Likes
Like

Posted 19 December 2012 - 12:05 PM

hi to all,
I attached a img with this post . Please consider the marked lines as a grid in a orthgonal projection . I want to select a tile in this grid by clicking mouse over them . i want to know what kind of a formula used to solve this kind of problem . please help me to solve this issue;Thanks in advance

john lin

### #20r0d  Members

1572
Like
0Likes
Like

Posted 19 December 2012 - 05:59 PM

hi to all,
I attached a img with this post . Please consider the marked lines as a grid in a orthgonal projection . I want to select a tile in this grid by clicking mouse over them . i want to know what kind of a formula used to solve this kind of problem . please help me to solve this issue;Thanks in advance

john lin

In general steps:

1. Multiply your world-to-view (w2v) and view-to-projection (v2p) matrices to give you a world-to-projection matrix (w2p).
2. Calculate the inverse of this to give you a projection-to-world matrix (p2w)
3. Transform the projection-space position (where you clicked on screen in projection space coordinates) to a world position
4. Transform the projection-space direction (depending on your coordinate system... something like (0, 0, 1)) to a world direction
5. Do intersection tests from the world-space point and directions to the rectangles in the grid

### #3Mussi  GDNet+

3998
Like
0Likes
Like

Posted 19 December 2012 - 06:04 PM

This is not a trivial problem to solve, I'd suggest you take a look at OpenCV.

### #4max343  Members

346
Like
0Likes
Like

Posted 19 December 2012 - 06:22 PM

Like Mussi said, it's not a trivial problem.

I'm no big expert in vision, but my first try would be to use the Canny edge detector (or some scale space variant) to create a grid image. Then partition the regions image by building a trapezoidal map. After that's done you can answer point location queries efficiently.
Though even this simple scheme will require a lot of tweaking to work correctly.

### #5Bacterius  Members

13100
Like
0Likes
Like

Posted 19 December 2012 - 08:31 PM

To me it's not obvious the OP wants image pattern recognition, for all I can tell he might've used this to describe an abstract 2D grid viewed from an angle in 3D space, in which case the problem can be easily solved - raytrace against the grid plane, and convert the (x, y) intersection point (on the plane) to a (u, v) tile coordinate.

“If I understand the standard right it is legal and safe to do this but the resulting value could be anything.”

### #6john_lin  Members

103
Like
0Likes
Like

Posted 20 December 2012 - 03:10 PM

how the peoples used to calculate the input(mouse click) to select tiles in farm vile like games . I really need that farm vile like solution please help me guys . thank you

Edited by john_lin, 20 December 2012 - 03:12 PM.

### #7Álvaro  Members

20235
Like
0Likes
Like

Posted 20 December 2012 - 03:19 PM

FarmVille uses isometric projection, so the formulas are a bit simpler. If you wan to select which tile has been clicked on in an image with perspective projection, it's not all that hard either. The easy way to do it is to compute ray-plane intersection (the ray being from the camera to the pixel where the click happened, the plane being the floor). One could also construct a projectivity (3x3 matrix) which maps screen coordinates to floor coordinates, but that's a little bit more involved.

### #8john_lin  Members

103
Like
0Likes
Like

Posted 20 December 2012 - 03:52 PM

### #9DT....  Members

487
Like
0Likes
Like

Posted 13 January 2013 - 12:33 AM

One way to go is:

1) Use "gluUnProject" to get a ray from the camera,

2) Use "ray to Plane"  to get an intersection point,

3) Map/Hash the intersection point to your 2D grid.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.