我想要一个正方形(由 表示head
)始终面向鼠标(由Mouse
- 是的,它是 LWJGL 表示)。由于我正在使用glRotatef(angle)
它,我实际上很难让它面向鼠标
- 需要度数,而大多数 java
Math
函数都涉及弧度 - 很难做到,因为我无法知道我必须旋转多远才能指向鼠标
我编写了以下 java 代码,它假设 0 度是直的:
double mx = Mouse.getX();
double my = Mouse.getY();
double rx = head.x;
double ry = head.y + 1;
double vx = head.x;
double vy = head.y;
double mtor = Math.sqrt(Math.pow(mx + rx, 2) + Math.pow(my + ry, 2));
double mtov = Math.sqrt(Math.pow(mx + vx, 2) + Math.pow(my + vy, 2));
double rtov = Math.sqrt(Math.pow(rx + vx, 2) + Math.pow(ry + vy, 2));
double rotate = Math.toDegrees(Math.acos((Math.pow(mtov, 2) + Math.pow(rtov, 2) - Math.pow(mtor, 2))/(2*mtov*rtov))));
但是,这会产生一些奇怪的结果:
(有白色方块的一面是正面。完整专辑请访问http://imgur.com/a/4DwFg)
这是一些控制台输出:
Mouse X: 555.0
Mouse Y: 439.0
Reference X: 400.0
Reference Y: 301.0
Vertex X: 400.0
Vertex Y: 300.0
Rotation: 65.56236879269605
Mouse X: 552.0
Mouse Y: 440.0
Reference X: 400.0
Reference Y: 301.0
Vertex X: 400.0
Vertex Y: 300.0
Rotation: 65.5244609346555
那么,我做错了什么?(额外的信用:在openGL中有没有更好的方法来做到这一点?)