我正在使用OpenGL在C ++中编写一个带有弹跳球(x和y,不会在Z中反弹)的屏幕保护程序。当这个球接触到屏幕的边缘时,球上会出现一小片伤害。 (当球受到足够的损坏时,它会爆炸。)当球没有旋转时,找到球部分受损是很容易的部分。
我为此决定的算法是我保持最左,最顶部,最顶部和最底部的位置。对于每次碰撞,我显然需要知道它击中了哪个屏幕边缘。在球可以滚动之前,当它接触到屏幕边缘时,如果它碰到左边的屏幕边缘,我知道最左边的顶点是击中球的点。从那里,我得到距离该点d距离内的所有顶点。我不需要击中的实际顶点,只需要球表面上的点。
这样做,我不需要读取所有顶点,通过球的x,y位置进行平移,看看哪些是离屏的。这样做可以解决我所有的问题但是会很慢。
目前,球的旋转由俯仰,偏航和滚动控制。问题是,考虑到我的偏航,俯仰和滚转角度,球的外表面上的哪个点触及了屏幕的边缘?我已经考虑过保持一个向上,向右和方向的向量,但我对此完全是新手,并且正如有人可能注意到的那样,完全迷失了。我已经多次阅读维基百科上的旋转矩阵文章,但仍然留空。如果我摆脱一个旋转角度会更简单,但我不愿意。
答案 0 :(得分:0)
如果您有旋转角度,则可以在代码中重新创建模型视图矩阵。使用该矩阵,您可以将旋转应用于网格的顶点(只需通过乘法),然后像以前一样找到最左侧(或任何其他)顶点。
This article解释了如何用你拥有的角度构造旋转矩阵。