Помогите с определением координат клика

Помогите с определением координат клика
Делаю игру с псевдотрехмерной графикой. Посути обычное 2D но с Z координатой (которая немного смещает рисуной вверх/ввниз по Y и создает илюзию обема) а так это абсолютно плоская игра в которой по особому отрисованы плоские текстуры

Сама карта игры - это сетка 1000 на 1000 квадратов .Вид всегда под одним углом, некаких поворотов . Мне нужно определить в какой из этих квадратов кликнули мышкой
Зная координаты квадрата который находится в центре экрана ( координаты "камеры") , а также координаты клика мышки можно легко узнать куда кликнули( игровые координаты квадрата в который засандалили мышкой)

Location_X = Kamera.cameraX + (Click.Location.X + Click.Location.Y) / MAP.blocksize; //+ popravkavo4nije koordinati (no eto nevazno)
Location_Y = Kamera.cameraY - (Click.Location.X - Click.Location.Y) / MAP.blocksize ;

Однако когда я добавил в игру третее измерение (координату Z) возникли ПРОБЛЕМЫ.
Некогда ровная сетка квадратов теперь стала кривоватой и как определить координаты теперь ваще непонятно

вот как на этом рисунке допустим кликнули в синий квадрат - я могу найти по координатам клика и Координатам Камеры определить в какой квадрат кликнули , но получаеться что вполне может оказаться что некий квадрат расположенный ниже будет иметь БОЛЬШОЕ значение "Z-координаты" и перекроет его

значит походу нужно еще проверять Z координаты всех нижнех квадратов????а если на этих квадратах еще будут находится некие предметы то тогда ваще ХЗ как высчитывать куда кликнули.

Вобщем подкиньте какуюнибуть идею =)

  • как вариант - можно сделать что-то вроде z-буфера.
    когда отрисовываете тайл, помечаете каждый его пиксел на специальной карте (массив, картинка, как угодно) , как принадлежащий этому тайлу.
    если нижний тайл займет часть его места - он затрет и часть пикселей на этой карте.
    не обязательно делать карту 1:1 можно уменьшить масштаб в 4-8 раз. от этого точность в вашем случае сильно не пострадает.
    это также может помочь в случае "если на этих квадратах еще будут находится некие предметы ".
    но это все-таки достаточно медленный вариант как мне кажется.

    еще один вариант - проверить вертикальный столбик (2 параллельных столбика на сколько мне видится) тайлов снизу вверх, до координат нажатия, проверяя, не попадает ли курсор в многоугольник одного из них. первый в который попадет - нужный.

    еще, если для отрисовки используете opengl, загляните сюда.
    http://www.gamedev.ru/articles/read.shtml?id=20118
    даже если игра 2d, это не мешает использовать аппаратное ускорение, а очень даже наоборот.

  • Z координатой (которая немного смещает рисунок вверх/вниз по Y и создает илюзию обьема)
    вот так же и смещай координаты курсора