2011-04-23 92 views
2

我正在C++中使用OpenGL编写带弹跳球(x和y,不会在Z中弹跳)的屏幕保护程序。当这个球接触到屏幕边缘时,球上会出现一小块伤害。 (当球被损坏时,会发生爆炸。)当球不旋转时,找到损坏球的部分是容易的部分。从旋转的边缘确定点

我为此决定的算法是,我保持最左边,最右边,最顶部和最底部顶点的位置。对于每次碰撞,我显然需要知道它碰到了哪个屏幕边缘。在球滚动之前,当它接触到屏幕边缘时,如果它碰到屏幕左边缘,我知道最左边的顶点是击中球的点。从那里,我得到距离该点d距离内的所有顶点。我不需要被击中的实际顶点,只是球表面上的点。这样做,我不需要读取所有顶点,将它们转换为球的x,y位置,并查看哪些是不在屏幕上的。做到这一点将解决我所有的问题,但会像地狱一样缓慢。

目前,球的旋转由俯仰,偏航和滚转控制。问题是,由于偏航,俯仰和滚转角度,球的外表面上的哪个点已经触及屏幕的边缘?我已经考虑保持向上,正确和方向矢量,但我完全不熟悉这一点,正如有人可能会注意到的,完全失去了。我已经多次阅读维基百科上的旋转矩阵文章,并且仍然画空白。如果我摆脱了一个旋转角度会更简单,但我不想。

回答

0

如果你有你的旋转角度,那么你可以在你的代码中重新创建模型视图矩阵。使用该矩阵,您可以将旋转应用到网格的顶点(仅通过乘法),然后像以前一样查找最左侧(或其他)的顶点。

This article解释了如何使用角度构建旋转矩阵。

+0

对不起,但就像我说过的,我一遍又一遍地读了,仍然画空白。我知道我需要什么,使用偏航,俯仰和滚动的反转来创建旋转矩阵,然后将其应用到适当的边缘顶点(左,右,上,下)。我认为在过去一周的工作中,我的脑子在思考这个问题。 (不幸的是,我在工作中编写的程序远没有那么有趣。) – Ross 2011-04-23 21:08:55

+0

我不想对整个模型应用任何东西,因为它变得非常慢。我的模型有近10,000个顶点。在顶点查找以找到点的x距离内的顶点已经很慢了。我将通过最终生成查找表来加快速度。 – Ross 2011-04-23 21:18:41