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());
        }

person enkor    schedule 13.03.2012    source источник
comment
Пожалуйста, расширьте немного на это странно. Пожалуйста, дайте более подробную информацию о проблеме (ах)   -  person Michael Durrant    schedule 13.03.2012
comment
Камера смотрит не правильно. Движение его не одинаково для всех направлений и очень изменчиво.   -  person enkor    schedule 13.03.2012


Ответы (2)


Проблема заключалась в том, как java получает точку от холста. Итак, если я изменил

Point p = e.getPoint();

to

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

Оно работает.

Извини за поздний ответ. Я забыл об этом вопросе.

person enkor    schedule 16.08.2012

Я бы попробовал поставить таймер и обновлять его только время от времени - вы можете перегрузить себя, если попытаетесь пересчитывать кадр каждый раз, когда срабатывает перемещение мыши.

person vextorspace    schedule 13.03.2012