3

这是我的 gluLookAt 设置:

 glu.gluLookAt(x,y,z,    // eye location
               x + Math.cos(Math.toRadians(eyeAngle)),
               y,
               z - Math.sin(Math.toRadians(eyeAngle)), // point to look at (near middle)
               0.f,1.f,0.f); // the "up" direction

x,y,z 是坐标,在左右转动和前后移动时会发生变化。但是我很难实现左右扫射。任何帮助,将不胜感激。

4

2 回答 2

4

终于想通了一切。如果你有前进和左转和右转,那么扫射其实很简单。例如,向右扫射基本上就是向右转 90 度,向前移动,然后再向左转 90 度。

我的前锋是:

x += distance*Math.cos(Math.toRadians(eyeAngle)); 
z += -distance*Math.sin(Math.toRadians(eyeAngle));

你不想改变 eyeAngle,因为你仍然想看同一个方向。对于向右扫射,您想要像向右转 90 度然后向前移动一样移动,同样向左移动。所以右边是我上面的前向方法,在我原来的 eyeAngle 的右边有一个 90 的角度,但是因为你想保持 eyeAngle 相同,你不改变变量,你只需添加 90 到它。

所以,正确的扫射方法是:

    x += distance*Math.cos(Math.toRadians(eyeAngle+90)); 
    z += -distance*Math.sin(Math.toRadians(eyeAngle+90));

Left 将减去 90。在您前进并设置整体 glulookat 之后,它实际上非常简单。感谢大家的帮助,它确实帮助我理解了它是如何工作的。

于 2012-11-03T13:37:53.797 回答
0

我对 GLU API 不了解,但给定 X、Y 和 Z 坐标,

a Left relative to it's current Y rotation is,
    position of X -= distance*Math.sin(Math.toRadians(Y-90));
    position of Z += distance*Math.cos(Math.toRadians(Y-90));


a Right relative to it's current Y rotation is,
    position of X -= distance*Math.sin(Math.toRadians(Y+90));
    position of Z += distance*Math.cos(Math.toRadians(Y+90));

尝试用 eyeAngle 替换 Y,因为旋转点是什么。

于 2012-11-03T02:57:53.490 回答