2012-11-03 201 views
2

我想制作一个简单的游戏引擎,但当我试图将2D鼠标坐标映射到我的世界中的3D坐标时,我陷入了一个困境。基础游戏有一架飞机作为地面,因为它将会是(有希望随着时间的推移)RTS游戏引擎。2D到3D地图OpenGL

我的问题是,我不能真正拿出任何有用的东西。飞机位于0,-100,-300点,大小约为1000x1000。我的相机在0,0,0,场景旋转60度,给人一种“鸟眼”凸轮的印象。

我在想三角方程,我知道我的相机的高度和角度,可能计算距离会给我正确的坐标,但这只是一个想法。

有人请给我一些建议吗?

+0

你对飞机位于(0,-100,-300)点的确切含义是什么?尝试使用包含点和法线向量来指定它。但是,你说的使用三角函数是正确的。 –

+0

问题是我想移动我的建筑物,这就是为什么我需要坐标。 – SPL

+0

所以基本上你需要将鼠标坐标变换为游戏世界的“地面”坐标?标题会误导人们:这是2D到2D的转换。 – SoonDead

回答

0

你可以用简单的光线投射来做到这一点。

首先,使用gluUnProject,可以获得对应于鼠标指针的2D窗口坐标的3D世界坐标m

给定相机位置e = (0, 0, 0),可以计算鼠标光线方向r = m - e

现在,给定点p在飞机上和飞机正常n,你可以计算intersection of the mouse ray with the plane

+0

谢谢。你能告诉我一个更新的功能使用吗?也许可以! – SPL

+0

我不知道任何“新”功能。如果您正在寻找更高级别的效用函数集,请查看其他(开源)场景图,渲染引擎或游戏引擎,例如[OGRE](http://en.wikipedia.org/wiki/OGRE )。 – mrucci