我想知道一种在水平轴上翻转角度的方法,而不必进行多次操作。假设我有一个角度为0(在我的代码坐标系中“向右指”),翻转后的角度应为180(指向左)。如果是90(指向上),翻转后仍应为90。89变成91,依此类推。
我可以对角度所暗示的X/Y速度进行操作,但这会减慢事情的进程,而且我感觉这不是正确的方法。
我不太懂数学,所以可能用错了术语……有人能帮忙吗?
编辑:抱歉,我回复得很晚,我不在电脑旁边,好的…
http://img215.imageshack.us/img215/8095/screenshot031v.jpg
这个截图可能有用。上面的结构是两个卫星和一个光束连接到中心的白点。两个卫星应该继承白点的角度(可见于调试目的),所以如果它指向一个角度,它们将跟随。左边的卫星是镜像的,所以我按照建议计算了180-角度,尽管这也是我的第一次尝试。正如你所看到的,它不是镜像的,而是翻转的。当白点旋转时,它会向后旋转。另一个做得很好。
这是与其他东西链接的内容的角度重新计算,pid将是父对象,id为当前pin。ang是角度偏移量,在对象链接到另一个对象时复制,因此在旋转时保持位置不变。
旋转似乎也会错过旋转速度(每次重绘时添加到当前角度的整数,顺时针旋转为正,如下所示: http://img216.imageshack.us/img216/7/screenshot032ulr.jpg。 因此,它绝对不是180-角度,尽管这显而易见。镜像是通过反转纹理坐标来完成的,因此不会影响角度。我担心这可能是GL旋转的一个怪癖。
这是与其他东西链接的内容的角度重新计算,pid将是父对象,id为当前pin。ang是角度偏移量,在对象链接到另一个对象时复制,因此在旋转时保持位置不变。
if(object[id].mirror)
object[id].angle = 180 - (object[id].pin.ang + object[pid].angle);
else
object[id].angle = object[id].pin.ang + object[pid].angle;
这是具体的旋转部分。OpenGL。offx/y用于偏离中心旋转的物体,例如即将出现的光束,它可以正确渲染其他所有内容。
glTranslatef(list[index[i]].x, list[index[i]].y, 0);
glRotatef(list[index[i]].angle, 0.0, 0.0, 1.0);
glTranslatef(list[index[i]].offx, -list[index[i]].offy, 0);
旋转似乎也会错过旋转速度(每次重绘时添加到当前角度的整数,顺时针旋转为正,如下所示: http://img216.imageshack.us/img216/7/screenshot032ulr.jpg。 因此,它绝对不是180-角度,尽管这显而易见。镜像是通过反转纹理坐标来完成的,因此不会影响角度。我担心这可能是GL旋转的一个怪癖。