У меня очень простая карта местности, например, 256х256 тайлов, она разбита на тайлы (одинаковые квадраты...). каждая плитка имеет высоту, наклон... Что-то вроде рисунка ниже. Мой внешний вид по умолчанию будет видом iso. (Каждая плитка может быть разделена на более мелкие плитки для сглаживания, я назвал тесселяцию)
D3DXMatrixOrthoLH(&matProj, videoWidth , videoHeight , -100000, 100000);
float xPitch=0;
float yPitch=PI/3.0; //rotate yPitch 60 degree
float zPitch=PI/4.0; //rotate zPitch 45 degree
Теперь мне нужно выбрать плитку юнита на экране с помощью мыши (куда переместить или построить что-то...)! У меня есть положение мыши Mx, мне нужно знать, что это за плитка! Если карта плоская, это очень просто! а вот с высотой сложно. Я планирую сделать карту довольно статичной (не вращать часто)... только перевод. Таким образом, я могу хранить все координаты вершины (x, y) на экране. Используя D3DXVec3Project. А затем ищем треугольники, содержащие позицию мыши -> нужный нам тайл! Однако при таком подходе нам может понадобиться обыскать 5-10 или 20 треугольников. Знаете ли вы какой-нибудь лучший способ, более оптимизированный или элегантный? Спасибо!
Я читал про что-то вроде RayCasting для детекта, может быть его можно использовать в моем случае. Поскольку в моей настройке просмотра нет позиции глаза, вектор обзора постоянен! 3D Screenspace Raycasting/Выбор DirectX9
D3DXVec3Unproject тоже выглядит многообещающе!
Изображение: http://i1335.photobucket.com/albums/w666/greenpig83/sc4_zpsaaa61249.png