我有一个非常简单的地形图,例如256x256个图块,它被分为多个图块(相同的正方形......)。每块瓷砖都有高度,坡度...... 如下图所示。我的默认外观是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这样的东西用于检测,也许它可以在我的情况下使用。因为我的视图设置中没有眼睛pos,视图矢量是恒定的! 3D Screenspace Raycasting/Picking DirectX9
D3DXVec3Unproject看起来也很有前途!
图片:http://i1335.photobucket.com/albums/w666/greenpig83/sc4_zpsaaa61249.png