Преобразование экранных координат в мировые координаты - PullRequest
2 голосов
/ 17 февраля 2012

Я получаю экранные координаты, используя это:

@Override
public boolean onTouchEvent(MotionEvent ev) {
x = ev.getX(0);
y = ev.getY(0);
return true;
}

И это вершины моего квадрата openGL 1.0:

private float vertices[] = {
        -1.0f, -1.0f,  0.0f,        // V1 - bottom left
        -1.0f,  1.0f,  0.0f,        // V2 - top left
         1.0f, -1.0f,  0.0f,        // V3 - bottom right
         1.0f,  1.0f,  0.0f         // V4 - top right
};

Все, кто работал с openGL, знают, чтоесли бы я вставил переменные x и y вместо статей, я бы получил абсолютную чепуху.Мой вопрос: какую формулу я должен использовать, чтобы преобразовать координаты экрана x и y в мировые координаты, чтобы я мог использовать их для позиционирования моего квадрата в точку касания?

РЕДАКТИРОВАТЬ:

Упс, язабыл сказать, что это 2D игра ...

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

На самом деле я сам нашел способ, и glUnProject - не лучший способ для платформы Android ... http://magicscrollsofcode.blogspot.com/2010/10/3d-picking-in-android.html

1 голос
/ 17 февраля 2012

Существует функция с именем 'gluunproject', которая может сделать это за вас. Ссылка здесь.

http://www.opengl.org/sdk/docs/man/xhtml/gluUnProject.xml

Кстати, координаты экрана будут соответствовать 3D-линии, проходящей от центра камеры через координаты экрана (плоскость изображения).

Входные данные ModelView, проекции и области просмотра могут быть получены путем запроса OpenGL текущих матриц. Обратитесь по той же ссылке (указаны вызовы функций).

Кроме параметров экрана x и y, вам нужен параметр глубины или параметр z. Вы можете использовать диапазон глубины, чтобы поместить квадрат в конкретную плоскость z. Или укажите значение по умолчанию. Но убедитесь, что он находится внутри видимой области.

Как только вы получите координаты объекта, рассмотрите его как центр квадрата и нарисуйте квадрат необходимой длины.

Сатиш

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...