Перемещение объекта вместе с мышью

1

я нарисовал квадрат, теперь я хочу переместить его по плоскости, следуя указателю мыши. Я использую open GL es 1.0.I пытался получить разницу в позиции движения с помощью кода ниже:

@Override public boolean onTouchEvent(MotionEvent e) {
    float x = e.getX();
    float y = e.getY();
    switch (e.getAction()) {
    case MotionEvent.ACTION_MOVE:
         mRenderer.dx = x - mPreviousX;
         mRenderer.dy = y - mPreviousY;
        requestRender();
    }
    mPreviousX = x;
    mPreviousY = y;
    return true;
}

а затем я переводю объект, используя функцию gtranslatef с значениями dx и dy.

gl.glTranslatef(dx, dy,0);

но для небольшого перемещения в указателе мыши. Большое смещение в позиции объекта.

Как я могу перемещать объект вместе с мышью?

  • 0
    Вы поднимаете палец вверх и нажимаете где-нибудь еще на экране?
Теги:
opengl-es

1 ответ

0
Лучший ответ

Координаты указателя обычно находятся в физических размерах экрана, то есть в пикселях. Ваши координаты OpenGL зависят от матриц проекции и модельного вида, которые вы применяете.

То, что вы должны сделать, это сделать обратную трансформацию координат экрана/видового экрана в ваш объект или пространство мира. Это делается путем преобразования конвейера трансформации. Поскольку матричное умножение является линейной операцией, вы можете не только вводить через нее абсолютные значения, но и для дифференциалов.

Я бы сказал вам больше, но мне нужно сказать, что ваша существующая структура программы дает вам разумные советы о том, как продлить или изменить ее. Пожалуйста, разместите его на http://pastebin.com или аналогичном.

  • 0
    Вы можете использовать функцию gluUnproject для преобразования ваших координат экрана в координаты объекта
  • 0
    @SatishKumar: Да, я знаю об этом. Я не хотел говорить OP, потому что у меня есть догадка, что OP может злоупотреблять стеком матриц. Сначала я хотел увидеть код, чтобы иметь возможность вносить исправления в него, прежде чем уговорить gluUnproject в него.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню