jogl - 第一人称相机

时间:2012-03-13 00:03:05

标签: opengl jogl

我正在尝试在我的项目中制作第一人称照相机。我按照本教程

http://www.morrowland.com/apron/tutorials/gl/gl_camera_3b.zip

键盘移动正常,但鼠标移动很奇怪。我正在使用java + jolg,但我认为没有太大区别

以下是负责旋转的两种方法:

    public void rotate(float speed) {
    aux = mView.minus(mPos);
    mView.z = (float) (mPos.z + Math.sin(Math.toRadians(speed)) * aux.x + Math.cos(Math.toRadians(speed))
            * aux.z);
    mView.x = (float) (mPos.x + Math.cos(Math.toRadians(speed)) * aux.x - Math.sin(Math.toRadians(speed))
            * aux.z);

}

    public void mouseMove(float x, float y) {
    float angle_y = 0.0f;
    float angle_z = 0.0f;

    if ((x == w/2) && (h/2 == y))
        return;

    robot.mouseMove(w / 2, h / 2);


    angle_y = (float) ((w / 2 - x)) / 1000;
    angle_z = (float) ((h / 2 - y)) / 1000;


    mView.y += angle_z * 2;

    if ((mView.y - mPos.y) > 8)
        mView.y = mPos.y + 8;
    if ((mView.y - mPos.y) < -8)
        mView.y = mPos.y - 8;

    rotate(-angle_y); // Rotate
}

并且有听众:

            public void mouseMoved(MouseEvent e) {
            Point p = e.getPoint();
            camera.mouseMove((float)p.getX(),(float) p.getY());
        }

2 个答案:

答案 0 :(得分:1)

问题在于java如何从画布获得点。所以如果我改变了

Point p = e.getPoint();

Point p = MouseInfo.getPointerInfo().getLocation();

有效。

对不起,迟到了。我忘记了这个问题。

答案 1 :(得分:0)

我会尝试加入一个计时器并且每隔一段时间才更新一次 - 如果你试图在每次鼠标移动时重新计算框架,你就可以超载自己。