jogl - камера от первого лица - PullRequest
1 голос
/ 13 марта 2012

Я пытаюсь сделать камеру от первого лица в моем проекте. Я следовал этому уроку

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 ]

1 голос
/ 16 августа 2012

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

Point p = e.getPoint();

на

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

Это работает.

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

0 голосов
/ 13 марта 2012

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

...